关于java类初始化顺序的学习笔记
来源:互联网 发布:手机自动下棋软件 编辑:程序博客网 时间:2024/05/08 12:16
</pre>1)类的初始化顺序:(静态变量,静态初始化块)>(变量,初始化块)>构造器<pre name="code" class="java">public class InitClass { // 构造器 public InitClass() { System.out.println("构造器"); } // 变量 public String variable = "变量"; // 静态变量 public static String staticVariable = "静态变量"; // 初始化块 { // System.out.println(staticVariable);// 此处可以引用静态变量也说明了静态变量在初始化代码块着被初始化 System.out.println(variable); System.out.println("初始化块"); } // 静态初始化块 static { // System.out.println(variable);//此处引用非静态变量报错,自己理解是因为静态块是在变量前被初始化的,所以静态块中引用变量时,此变量还不存在故报错 System.out.println(staticVariable); System.out.println("静态初始化块"); } public static void main(String[] args) { new InitClass(); }}
此代码运行结果为:
静态变量
静态初始化块
变量
初始化块
构造器
2)存在继承的类的初始化顺序为:(父类静态变量,父类静态初始化块)>(子类静态变量,子类静态初始化块)>(父类变量,父类初始化块)>父类构造器>(子类变量,子类初始化块)>子类构造器
public class InitFather { // 构造器 public InitFather() { System.out.println("父类构造器"); } // 变量 public String variable = "父类变量"; // 静态变量 public static String staticVariable = "父类静态变量"; // 初始化块 { System.out.println(variable); System.out.println("父类初始化块"); } // 静态初始化块 static { System.out.println(staticVariable); System.out.println("父类静态初始化块"); } }public class InitClass extends InitFather{ // 构造器 public InitClass() { System.out.println("子类构造器"); } // 变量 public String variable = "子类变量"; // 静态变量 public static String staticVariable = "子类静态变量"; // 初始化块 { // System.out.println(staticVariable);// 此处可以引用静态变量也说明了静态变量在初始化代码块着被初始化 System.out.println(variable); System.out.println("子类初始化块"); } // 静态初始化块 static { // System.out.println(variable);//此处引用非静态变量报错,自己理解是因为静态块是在变量前被初始化的,所以静态块中引用变量时,此变量还不存在故报错 System.out.println(staticVariable); System.out.println("子类静态初始化块"); } public static void main(String[] args) { new InitClass(); }}
此代码运行结果为:
父类静态变量
父类静态初始化块
子类静态变量
子类静态初始化块
父类变量
父类初始化块
父类构造器
子类变量
子类初始化块
子类构造器
3)最后,变量一定是在初始化块前初始化吗?静态变量一定是在静态初始化块着初始化吗?
答案是否定的,这取决于静态变量和静态初始化块、变量和初始化块在代码中出现有位置。
4)静态变量及静态初始化块只会被初始化一次
public class InitClass{ // 构造器 public InitClass() { System.out.println("子类构造器"); } // 变量 public String variable = "子类变量"; // 初始化块 { // System.out.println(staticVariable);// 此处可以引用静态变量也说明了静态变量在初始化代码块着被初始化 System.out.println(variable); System.out.println("子类初始化块"); } // 静态变量 public static String staticVariable = "子类静态变量"; // 静态初始化块 static { // System.out.println(variable);//此处引用非静态变量报错,自己理解是因为静态块是在变量前被初始化的,所以静态块中引用变量时,此变量还不存在故报错 System.out.println(staticVariable); System.out.println("子类静态初始化块"); } public static void main(String[] args) { new InitClass(); new InitClass(); }}运行结果如下:
子类静态变量
子类静态初始化块
子类变量
子类初始化块
子类构造器
子类变量
子类初始化块
子类构造器
0 0
- 关于java类初始化顺序的学习笔记
- 【Java学习笔记】类初始化执行顺序
- java学习笔记----初始化顺序
- 关于java类初始化的顺序
- 关于JAVA类的初始化顺序
- 关于Java类内的初始化顺序
- 【Java笔记】类的初始化顺序
- 关于java的初始化顺序
- java学习个人笔记---java类总体初始化顺序
- java学习个人笔记---类成员变量初始化顺序
- JAVA学习笔记--- 静态变量、成员变量、局部变量及类的初始化顺序
- 关于java的初始化顺序的问题
- java关于类的初始化顺序-面试题目
- 关于java初始化顺序的一个示例
- 关于Java中初始化顺序的问题
- Java关于继承的详细初始化顺序
- java笔记一:类成员的初始化顺序
- java类的初始化顺序
- 图片映射小例子
- linux安装memcached并设置自启动详细操作步骤
- SecureCRT中使用代理
- 基于注解的spring3.0.x MVC学习笔记(一)
- Insert Interval 插入区间到多个区间
- 关于java类初始化顺序的学习笔记
- 拍摄照片添加文字
- linux下javadoc生成文件出现中文乱码
- 文件处理一(上传)
- source insight 快速定位文件
- URL长链接转换为短链接
- 设计一部iphone手机用面向对象的方法
- ZOJ3161
- e