java 构造函数初始化全过程以及顺序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java 构造函数初始化全过程以及顺序
public class Test1 {
public static int k=0;
public static Test1 t1=new Test1("t1");
public static Test1 t2=new Test1("t2");
public static int i=print("i");
public static int n=99;
public int j=print("j");
{
print("构造块");
}
static {
print("静态快");
}
public Test1(String str){
System.out.println((++k)+":"+str+" i="+i+" n="+n);
++n;++i;
}
public static int print(String str){
System.out.println((++k)+":"+str+" i="+i+" n="+n);
++n;
return ++i;
}
public static void main(String[] args) {
Test1 t=new Test1("init");
}
}
1:j i=0 n=0
2:构造块i=1 n=1
3:t1 i=2 n=2
4:j i=3 n=3
5:构造块i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:静态快i=7 n=99
9:j i=8 n=100
10:构造块i=9 n=101
11:init i=10 n=102
从运行结果可以看出,先进行类的静态初始化,包括静态块和静态变量,谁在前谁就先初始化,然后则是构造函数本身,这同时也包含两个部分:构造快和成员变量,顺序由出现的顺序决定,谁先出现谁先执行,然后才是构造函数体本身。类的继承知识点(1)java不支持多重继承,也就是说子类至多只能有一个父类(2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承(4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。
public abstract class A { int i=1; public void printI() { System.out.println("i="+i); } } public class B extneds A{ int i=2; public static void
main(String[] args) { B b=new B();
b.printI(); } }
正确结果1