Java中的初始化顺序
一.在创建类时为成员变量赋值和在构造函数中的赋值的先后顺序
在未用构造器之前其实已经将类的字段进行了赋值只是在调用构造器时,又将类的字段进行了重新的赋值。如下:
package com.cjm.inititalize;
public class Initialize2 {
public static void main(String[] args) {
new A1();
}
}
class A1{
private int i;
private B1 b;
public A1 () {
System.out.println("在初始化函数调用前:i的值为:"+i+"在初始化之前引用b的值为:"+b);
i=4;
b=new B1();
System.out.println("初始化之后的i值为:"+i+"初始化之后的b为"+b);
}
}
class B1{
}
结果如下:

1.非静态成员变量赋值优先于构造函数且成员变量的赋值顺序按照初始化的顺序
public class Inititalize {
private A a1 = new A("a1");
public Inititalize() {
System.out.println("Inititalize类被初始化!");
}
private A a2=new A("a2");
public static void main(String[] args) {
new Inititalize();
}
结果如下:

2.静态成员赋值优先于非静态成员赋值,非静态成员优先于构造函数的
注意:静态变量只会初始化一次,且必须在创建是就初始化
public class Inititalize {
private A a1 = new A("a1");
public Inititalize() {
System.out.println("Inititalize类被初始化!");
}
private static A a2=new A("a2");
public static void main(String[] args) {
new Inititalize();
}
}
结果为:

3.静态方法块的初始化同样也优先于非静态成员赋值
注意静态方法的变量为局部变量,生命周期仅在方法块中。
public class Inititalize {
private A a1 = new A("a1");
public Inititalize() {
System.out.println("Inititalize类被初始化!");
}
private static A a2=new A("a2");
public static void main(String[] args) {
new Inititalize();
}
static {
A a3=new A("a3");
}
}
结果如下::

小结:
public class Inititalize {
private A a1 = new A("a1");//4
private B b2=new B("b2");//5
public Inititalize() {
System.out.println("Inititalize类被初始化!");
}
private static A a2=new A("a2");//1
public static void main(String[] args) {
new Inititalize();
}
static {//2
A a3=new A("a3");
}
private static B b1=new B("b1");//3
}
结果如下:

由上可知初始化顺序为:静态成员变量/静态方法块,成员变量初始化/方法块,构造函数。
Java中的初始化顺序的更多相关文章
- [java] java中的初始化顺序
先看程序: package init_cls; class A{ {System.out.println("i am in the class A!");} static { Sy ...
- Java中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)
本文链接 http://blog.csdn.net/xiaodongrush/article/details/29170099 參考文章 http://my.oschina.net/le ...
- Java类继承关系中的初始化顺序
Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类Ini ...
- 图示Java类的初始化顺序
Java类的初始化顺序 在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行. 以下为代码验证阶段,一共三个类 ...
- java创建对象 的初始化顺序
java创建对象 的初始化顺序 1.初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化 ...
- Java学习笔记二十三:Java的继承初始化顺序
Java的继承初始化顺序 当使用继承这个特性时,程序是如何执行的: 继承的初始化顺序 1.初始化父类再初始子类 2.先执行初始化对象中属性,再执行构造方法中的初始化 当使用继承这个特性时,程序是如何执 ...
- Java中的初始化详细解析
今天所要详细讲解的是Java中的初始化,也就是new对象的过程中,其程序的行走流程. 先说没有静态成员变量和静态代码块的情况. public class NormalInit { public sta ...
- 浅谈Java中静态初始化块跟非初始化块
众所周知在JAVA编程语言中有两种初始化块: 静态初始化块 非静态初始化块 他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别 静态初始化块 定义: ...
- java中静态初始化块的执行顺序
在java中,其应该是先于所有的方法执行. 下面是测试代码: public class Test1 { static{ System.out.println("执行静态初始化块test1.. ...
随机推荐
- vertical-align属性测试实验面板 文字 图片对齐
转自:http://www.zhangxinxu.com/study/201005/verticle-align-test-demo.html
- axure rp安装
axure rp安装 1◆ axure rp 文件下载 2◆创建安装目录 3◆ 安装图解 4◆汉化 替换 5◆ 使用 success 1★AxureRP 8.0安装包 2★ ...
- Java 正则校验整数,且小数点只能是2位
//金额验证 public static boolean isNumber(String str){ Pattern pattern=Pattern.compile("^(([1-9]{1} ...
- react router @4 和 vue路由 详解(三)react如何在路由里面定义一个子路由
完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 5.react如何在路由里面定义一个子路由? a.引入在需要子路由的页面引入Rout ...
- 【配置】pom.xml的配置
pom.xml的配置: 地址:https://mvnrepository.com/ 示例:配置log4j 1.在搜索框中搜索log4j 2.在搜索结果页点击log4j 3.选择一个最新的版本,点击 4 ...
- 2-Servlet和servletContext
2018-08-09 22:34 * Servlet(好好学) * 动态WEB的资源. * 什么是Servlet * 实现Servlet接口,重写5个方法. * S ...
- highcharts,highStock 中文图表配置
感谢开源的支持! https://github.com/hcharts/highcharts-zh_CN
- 【IAP支付之三】苹果IAP安全支付与防范 receipt收据验证
这里网上的朋友已经介绍的很详细了,具体的链接已经无法找到了. 这里主要说几点本人在开发中遇到的问题: 1.漏单必须要处理,玩家花RMB购买的东西却丢失了,是绝对不能容忍的.所谓的漏单就是玩家已经正常付 ...
- [CodeForces332E]Binary Key
Problem 题目给出一个加密前的字符串长度为p和加密后的字符串长度为s,让你求一个长度为K字典序最小的密钥. 密钥是循环的,第i位为1表示加密前的第i为是有用的否则是没用的. Solution 首 ...
- awk计算最大值,最小值,平均值的脚本
传入至少三个数字参数到脚本awk_file,并计算出最大,最小,平均值.需要判断传入的数字是否足够,否则输出警告信息.平均值保留两位小数. 如执行bash awk_file 3 4 6 5,脚本输出结 ...