new对象时 会自动初始化
执行顺序
父类静态属性->父类静态代码块->子类静态属性->子类静态代码块->父类非静态属性->父类非静态代码块->父类的构造方法->子类非静态属性->子类非静态代码块->子类的构造方法
class testFather{
static String string="父类静态属性";
String string1="父类非静态属性";
static {
System.out.println(string);
//非静态属性无法写到静态代码块中
System.out.println("父类静态代码块");
}
{
System.out.println(string1);
System.out.println("父类非静态代码块");
}
testFather(){
System.out.println("父类构造方法");
}
static void method(){
System.out.println("父类普通方法");
}
}
class test extends testFather{
static String string="子类静态属性";
String string1="子类非静态属性";
static {
System.out.println(string);
System.out.println("子类静态代码块");
}
{
System.out.println(string1);
System.out.println("子类非静态代码块");
}
test(){
System.out.println("子类构造方法");
}
static void method(){
System.out.println("子类普通方法");
}
}
创建该对象
public class test1{
public static void main(String[] args) {
new test();
}
}
输出结果
不创建对象直接调用 普通静态方法
public class test1{
public static void main(String[] args) {
test.method();
}
}
输出结果