java的初始化(编程思想)
6、成员初始化
java尽量保证:所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,java以编译错误的形式来贯彻这种保证。
如果类的成员变量时基本类型,那么没有初始化给默认值
在类里定义一个引用对象时,如果不将其初始化,此引用就会获得一个特殊值null
7、构造器初始化
可以用构造器来进行初始化。但要牢记:无法阻止自动初始化的进行,它将在构造器被调用之前发生。
初始化顺序
变量定义的先后顺序决定了初始化的顺序。即使变量定义与散布于方法定义之间,它们仍然会在任何方法(包括构造器)被调用之间得到初始化
静态数据的初始化
无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。如果一个域是静态的基本类型域,也没有进行初始化,那么它就会获得基本数据类型的标准初始值,如果它是引用数据类型,那么它的默认初始值就是null。
静态初始化只有在必要时刻才会进行。如果不创建Table对象,也不引用Table.b1或者Table.b2,那么静态的Bowl b1和b2永远都不会被创建。只有在第一个Table对象被创建(或者第一次访问静态数据)的时候,它们才会被初始化。
初始化的顺序是先静态对象,而后面是非静态对象
总结一下对象的创建过程,假设有一个名为Dog的类。
1、即使没有显式使用static关键字,构造器实际上也是静态方法。因此,当首次创建类型为Dog的对象或者Dog的静态方法/静态域被首次访问时,Java解析器必须查找类路径,以定位Dog.class文件。
2、然后载入Dog.class,有关静态初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候进行一次
3、当用new Dog()创建对象的时候,首先将堆上为Dog对象分配足够的存储空间
4、这块存储空间会被清零,这就自动地将Dog对象中的所有基本类型都设置成了默认值,而引用则被设置成了null
5、执行所有出现于字段定义出的初始化操作
6、执行构造器
显式的静态初始化
java允许将多个静态初始化动作组织成一个特殊的“静态子句”,有时也叫做“静态代码块”。尽管它看起来想个方法,但实际上只是一段跟在static关键字后面的代码。与其他静态初始化动作一样,这段代码仅执行一次:当首次生成这个类的一个对象时,或者首次访问属于那个类的静态数据成员时。
非讲台实例初始化
Java中也有被称为实例初始化的类似语法,用来初始化每一个对象的非静态变量。
它们与静态初始化子句是一模一样的,只不过少了static关键字。这种语法对于支持匿名内部类的初始化是必须的,但是它也使得你可以保证无论调用了哪个显式构造器,某些操作都会发生。实例初始化子句是在构造器之前执行的。
相关文章
- java fgc_java Metaspace频繁FGC问题定位
- 做了三年Java,java注释的三种形式
- java中中文显示乱码_java中显示中文乱码解决方法
- java编程软件下载_Ee Java(Java编程软件) V1.1.0 官方版
- 【Java AWT 图形界面编程】Container 容器 ② ( Frame 窗口示例 | Panel 示例 | 窗口中文乱码处理 )
- 【创作赢红包】【Java AWT 图形界面编程】菜单组件 ② ( 菜单组件示例要点说明 | 菜单组件示例代码 )
- JAVA 新提案:努力简化Hello World,让初学者更好地接受 Java !
- Java网络编程入门SocketServer与Socket详解编程语言
- Linux安装Java: 迈出第一步(linux上安装java)
- 机制使用Redis实现Java高效的过期机制(redisjava过期)
- Linux和Java联手构建编程世界(linux.java)
- Java并发编程视频分享-第二期
- 使用Redis优化Java开发的关键技巧(redis与java开发)
- Java驾驭MySQL,读写如飞(java读写mysql)
- 让Java开发能力在Linux下得到更大发挥(java linux编程)
- 如何在Linux系统中安装Java(linux中安装java)
- Java编程从Oracle中读取数据(java读取oracle)
- Java编程操作Oracle数据库(java读oracle)
- 编程玩转Java之Oracle编程实战(java中的oracle)
- java多线程编程之使用thread类创建线程
- java多线程编程之慎重使用volatile关键字