java 对象的初始化顺序
来源:互联网 发布:财务审计软件oa 编辑:程序博客网 时间:2024/05/16 14:29
1、在通过new创建对象时调用了类的构造函数进行类对象的初始化。在运行时刻可以调用方法或者执行某些动作来确定初始值,这种方式为编程带来了很大的灵活性。但是这种方式无法阻止自动初始化的进行,他将在够构造器之前进行初始化
如下面的代码:
public class test1 {int i;public test1(){System.out.println(i);i++;}}在上面的程序运行结果 被打印出的值应该是0 ;原因在构造起初始一前类变量就进行初始化。对于基本类型和引用类型或者已经进行手动赋值的变量,这种情况都是成了(变量的初始化先于 构造器的初始化 并且没有手动赋值的变量java 默认进行初始化赋值 注意:这里说的都是类成员变量 对于局部变量或方法体内的变量不成立的),所以java编译器不会再你使用变量前请强制你去给变量赋值-----由于变量已经被默认初始化了
2、java 创建对象时初始化顺序 看下面代码运行结果 类成员变量分布在 java 类的各个位置
import static net.mindview.util.Print.*;// When the constructor is called to create a// Window object, you'll see a message:class Window { Window(int marker) { print("Window(" + marker + ")"); }}class House { Window w1 = new Window(1); // Before constructor House() { // Show that we're in the constructor: print("House()"); w3 = new Window(33); // Reinitialize w3 } Window w2 = new Window(2); // After constructor void f() { print("f()"); } Window w3 = new Window(3); // At end}public class OrderOfInitialization { public static void main(String[] args) { House h = new House(); h.f(); // Shows that construction is done }}
运行结果:
Window(1)Window(2)Window(3)House()Window(33)f()
从运行结果可以看出 house 类中定义的 window 三个引用变量成员 初始化的顺序都要早于 house 类的构造函数的初始化
另外也可以通过 代码块进行变量初始化写法如下:
class House { Window w1; // Before constructor House() { // Show that we're in the constructor: System.out.println("House()"); w3 = new Window(33); // Reinitialize w3 } Window w2;// After constructor void f() { System.out.println("f()"); } Window w3; // At end { w1 = new Window(1); w3 = new Window(3); w2 = new Window(2); }}public class OrderOfInitialization { public static void main(String[] args) { House h = new House(); h.f(); // Shows that construction is done }}class Window { Window(int marker) { System.out.println("Window(" + marker + ")"); }}
运行结果
Window(1)Window(3)Window(2)House()Window(33)f()
从运行结果看同过代码块进行初始化类成员变量也是可以的 代码块
{ w1 = new Window(1); w3 = new Window(3); w2 = new Window(2); }
总结:类初始化属性 是类成员变量自动初始化完成在进行构造函数的初始化 ; static 修饰的方法和类成员变量在类加载时就进行了初始化
阅读全文
0 0
- java对象的初始化顺序
- java对象的初始化顺序
- java对象的初始化顺序
- JAVA对象的初始化顺序
- java对象的初始化顺序
- java对象初始化的顺序
- java对象的初始化顺序
- java 对象的初始化顺序
- JAVA对象初始化顺序
- java对象初始化顺序
- Java 对象初始化顺序
- Java对象初始化顺序
- Java对象初始化顺序
- Java 对象初始化顺序
- Java 对象初始化顺序
- Java对象初始化顺序
- java对象初始化顺序
- java对象初始化顺序
- Java AES加密
- javascript垃圾回收机制
- DevExpress项目升级总结
- Autofac官方文档(一)【开始】
- UGUI雷达图
- java 对象的初始化顺序
- Mysql中的视图
- springboot(六):如何优雅的使用mybatis
- 白盒测试
- 第十一周项目1
- BZOJ 1143 祭祀river(floyd传递闭包+最大独立集)
- 从数据库中随机抽取一条记录的SQL语句
- 算法基础【1】 变量 数组 动态内存 魔数 宏
- pandas使用get_dummies进行one-hot编码