java基础
1. java规定类字的首字母要大写
2. java文件名要和主类名一致(所以文件名的首字母要大写)
编译:javac Hello.java
运行:java Hello
3. 在一个java文件里面只能有一个public class,其他的class不能用public修饰,如果有多个类,那么编译后再文件夹中有多个.class
4. 对象创建流程分析
加载类信息时,会调用静态代码块,在调用普通代码块,最后再调用构造器,完成对象的初始化
5. this和super关键字的比较
6.类什么时候被加载?
1. 创建对象实例时(new)
2. 创建子类对象实例时,父类也会被加载
3. 使用类的静态成员时(静态属性,静态方法),当调用了子类的静态成员,父类也会被加载
7. 在创建一个对象时,在一个类中的调用顺序
1. 先调用静态代码块和静态属性的初始化(如果有多个静态代码块和多个静态属性初始化,则按它们的定义顺序调用)
2. 再调用普通代码块和普通属性的初始化(如果有多个普通代码块和多个普通属性初始化,则按它们的定义顺序调用)
3. 最后再调用构造方法
8. 在创建一个子类对象时(有继承关系),他们的静态代码块、静态属性初始化、普通代码块、普通属性初始化、构造方法的调用顺序:
1. 父类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行)
2. 子类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行)
3. 父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
4. 父类的构造方法
5. 子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
6. 子类的构造方法
释:当实例化一个子类对象时,如new Son();会发生下面事情:
a. 加载类信息(先加载父类,再加载子类)时,会调用静态代码块和静态属性初始化,所以会先调用父类的,再调用子类的
b. 再创建对象,即调用子类的构造器,构造器中隐藏了super();和普通代码块,如下:
public Son(){ //其父类的构造器也类似
//super();
//本类中的普通代码块
//初始化
}
所以由于super,会调用到父类的无参构造器,然后调用父类的普通代码块和普通属性初始化,然后再父类构造器的初始化,
super完后,会调用子类的普通代码块和普通属性初始化,最后是子类构造方法的初始化