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.. ...
随机推荐
- suffix array后缀数组
倍增算法 基本定义子串:字符串 S 的子串 r[i..j],i≤j,表示 r 串中从 i 到 j 这一段也就是顺次排列 r[i],r[i+1],...,r[j]形成的字符串. 后缀:后缀是指从某个位置 ...
- python字符串内建函数
- Ie11 的改变
摘录地址: http://www.4fang.net/content.jsp?id=30537 微软在上周刚刚发布了用于Windows 8.1上的首个Internet Explorer 11的 ...
- firstchild.data与childNodes[0].nodeValue意思
x.firstchild.data:获取元素第一个子节点的数据: x.childNodes[0]::获取元素第一个子节点; x.childNodes[0].nodeValue.:也是获取元素第一个子节 ...
- bzoj1692
题解: 二分最近的不相同 然后hash判断是否相同 然后贪心 代码: #include<bits/stdc++.h> using namespace std; #define ull un ...
- 程序从sqlserver2008搬家到MySQL5.6
1.数据表结构的搬家 SqlServer的建表sql语句在MySQL中肯定不能运行 这里使用转换工具 下载地址: https://download.csdn.net/download/zhutouai ...
- Linux学习: 触摸屏驱动
一.Linux输入子系统的结构: 二.触摸屏驱动代码: s3c_ts.c #include <linux/errno.h> #include <linux/kernel.h> ...
- Bluedroid: 音频数据的传输流程
一. UIPC: Audio Flinger获取到a2dp的hw module,然后蓝牙协议栈有专用于发送和接收media数据的线程,名称:btif_media_task. 蓝牙与Audio的 ...
- dapper 简单多表查询
public List<Book> GetBookList() { List<Book> bList = null; try { using (var t = new SqlC ...
- 基于session做的权限控制
一直听说做权限将登陆信息放在session中,实际也说不太出个所以然来,幸运在工作当中接触到了对应的代码的copy. 实现思路: 类似于粗粒度的权限控制 将权限控制的文件按包分隔好,对应的url前缀也 ...