关注小程序 找一找教程网-随时随地学编程

Java教程

memo_java

静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。

如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量

静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法


内部类的主要作用如下:


1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类


2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据


3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便


问:内部类有几种呢?


答:内部类可分为以下几种:


成员内部类

静态内部类

方法内部类

匿名内部类


如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字

创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用,由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

父类的引用可以调用子类从父类继承或重写的方法,但不能调用子类独有的方法

包含抽象方法的类是抽象类,抽象类中可以包含普通方法也可以没有抽象方法,抽象类不能直接创建对象,可以定义引用变量

接口一般是public,不能是protected,private

接口里的方法只能是抽象方法,是public static系统会自动添加

接口里的属性是public static final 系统会自动添加

包装类主要提供了两大类方法:

1. 将本类型和其他基本类型进行转换的方法

2. 将字符串和本类型及包装类互相转换的方法

Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理。

Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名

集合框架主要是两大接口,collection和map

Entry是map的一个内部类


自定义注解

===============================================

// 下面四个称为元注解

@Target({ ElementType.METHOD, ElementType.TYPE}) // 注解的作用域

@Retention(value = RetentionPolicy.RUNTIME) // 注解的生命周期

@Inherited // 允许继承

@Documented // 可生成文档

public @interface DoAnnotation {

// 成员的类型受限,须为原始类型或String,Class,Annotation,Enumeration

// 如果只有一个成员,则必须名字为value,使用时可以忽略成员名和赋值号(=)

// 注解类也可以没有成员,那种称为标识注解

String desc(); //必须无参无异常

String author();

int age() default 18;

}

===============================================


===============================================

取字节的低八位的方法

例如,有个数字 0x1234,如果只想将低8位写入到内存中

将 0x1234 & 0xff

0x1234 表示为二进制 00010010  00110100

0xff       表示为二进制 11111111

两个数做与操作,显然将0xff补充到16位,就是高位补0

此时0xff 为 0000000011111111

与操作 1&0 =0 1&1 =1 这样 0x1234只能保留低八位的数 0000000000110100 也就是 0x34

===============================================

UTF-8编码中,中文日语汉字占三个字节,英文字母占一个字节

GBK编码中,  中文日语汉字占两个字节,英文字母占一个字节

shift_jis编码中,日语汉字占两个字节,英文字母占一个字节

java是双字节编码,是UTF-16be编码,中文日语汉字占两个字节,英文字母占两个字节


File类只用于表示文件或目录的信息,不能用于文件内容的访问

File file = new File("src\\main\\java\\xxxxxx\\yyyyyy\\zzzzzz\\app\\welcome\\Calculable.java");相对路径不是本类所在的路径,而是工程根目录

RandomAccessFile可以对文件进行读和写,可以访问文件的任何位置

RandomAccessFile rf = new RandomAccessFile(file,"rw");

经常用PrintWriter和BufferedReader配合使用读写文件


对象的序列化就是将对象转换成byte序列

序列化流ObjectOutputStream,是过滤流writeObject

反序列化流ObjectInputStream,是过滤流readObject

序列化接口Serializable,必须实现这个接口才能序列化,这个接口没有任何方法,只是一个标准

private transient String prefix;//transient修饰的变量不会被JVM默认序列化,可以做自己的序列化 (可参照ArrayList)

对子类对象进行反序列化时,如果父类没有实现序列化接口,那么其父类的构造函数会被调用


java8以后,接口可以拥有方法体


log.debug(ReflectionToStringBuilder.toString(对象)) ReflectionToStringBuilder是apach下打印对象内容(键值对方式)的类