java 构造函数是如何执行的
来源:互联网 发布:双肩电脑包 知乎 编辑:程序博客网 时间:2024/04/30 13:06
1.构造函数不是方法!!
原因1:方法的话,会直接执行方法体内的代码,但是构造函数首先执行的不是{}里的代码块,而是给对象的成员初始化;
2.方法可以被调用其他方法调用,但是构造函数不能被方法或变量调用。
package com.statics.www;
public class Son {
//构造函数执行第二步:
private int num2=1*cal2();
//构造函数执行第一步:
public static int num1=1*cal1();
//构造函数第0步:
public static int cal1(){
System.out.println("构造函数第一步:静态变量赋值!");
return 1;
}
public static int cal2(){
System.out.println("构造函数第二步:非静态全局变量赋值");
return 2;
}
{
System.out.println("构造函数第三步:代码块!");
}
public Son(){
System.out.println("构造函数第四步:执行构造函数内部代码块!");
}
}
执行结果为:
2. 从上面测试得出结论:
构造函数初始化对象时,执行的顺序是
0.方法优先存在于任何变量或者对象,存在于类中,而不是对象中。即构造对象前,方法就存在。
第一步. 静态变量赋值
第二步.代码块或者全局变量,(执行顺序由代码位置决定,如果代码块在前,优先执行代码块;如果变量在前,优先变量赋值)
第三步.执行构造函数内部代码
3.继承中的构造函数执行顺序:
0.子类重写了父类的方法;
1.调用父类构造函数();
2.调用子类构造函数();
父类代码:
package com.statics.www;
public class Father {
private int num=1;
public Father(){
System.out.println("构造father,接下来调用Test()");
Test();
}
public void Test(){
System.out.println("调用Father被重写的方法Test(),现在的Num值是"+num);
}
}
子类代码:
package com.statics.www;
public class Son extends Father {
private int num=1;
public Son(){
System.out.println("执行Son构造函数内部代码块!");
}
public void Test(){
System.out.println("调用Son被重写的方法Test(),现在的Num值是"+num);
}
}
可以看出被调用的Test()方法是子类的Test(),另外特别注意Num =0!!!!!!因为父类的num 是private的不能继承,但是子类的num还没有被赋值(要等到父类构造完成,才能构造子类),所以默认是0
- java 构造函数是如何执行的
- Java 构造函数的执行
- [构造函数]构造函数是如何产生的?
- java 构造函数的执行过程
- JAVA 继承 构造函数的执行顺序
- Java构造函数的执行次序
- java构造函数的执行顺序
- JAVA 继承 构造函数的执行顺序
- 【java】构造函数的继承执行顺序
- Java中构造函数的执行顺序
- java构造函数和初始化函数的执行顺序
- [收藏]如何构造一个main以外执行的函数
- 什么是是JAVA构造函数
- Swift 2.0构造函数是如何实现继承的?
- 【c++】实验说明“转换构造函数”是如何转换的
- JAVA 与C#构造函数执行顺序的不同之处.
- java中父类与子类构造函数的执行顺序
- java变量,初始化快,构造函数的执行顺序
- 成大事必备9种能力、9种手段、9种心态
- 删除信息前提示
- (4)设计模式方法-创建型设计模式--:简单工厂模式【【【工厂方法模式
- 怎么才能不学习、不工作。(懒人必看)
- 找工作
- java 构造函数是如何执行的
- enum singleton
- hdu1867之KMP
- [zz] main函数之前--谁动了我的main
- 以一个具体的例子,深入剖析一下Android系统的绑定机制
- NYOJ 14-会场安排问题
- cygwin的安装中途种种遭遇
- void cdev_init(struct cdev *cdev, const struct file_operations *fops)
- 小米即将完成新一轮融资 传估值近百亿美元