java 变量类型如下:

实例变量;

类变量;

初始化途经如下:

实例变量

  --声明时,初始化;

  --非静态初始化块内,初始化;

  --构造函数内,初始化;

实例1:

public class bean1 {

	int d;
int e;
int c;
int b;
int f; {
c = 3;
}
int a = 1; {
b = 2;
} public bean1() { d = 4;
f = 5;
e = 6;
} public int geta() { return a; } }

javap -c bean1.class 查看反汇编代码如下:

Compiled from "bean1.java"
public class initialization.bean1 {
int d; int e; int c; int b; int f; int a; public initialization.bean1();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: iconst_3  //初始化c
6: putfield #2 // Field c:I
9: aload_0
10: iconst_1  //初始化a  
11: putfield #3 // Field a:I
14: aload_0
15: iconst_2  //初始化b
16: putfield #4 // Field b:I
19: aload_0
20: iconst_4  //初始化d
21: putfield #5 // Field d:I
24: aload_0
25: iconst_5
26: putfield #6 // Field f:I
29: aload_0
30: bipush 6
32: putfield #7 // Field e:I
35: return public int geta();
Code:
0: aload_0
1: getfield #3 // Field a:I
4: ireturn
}

结论:实例变量的初始化均在public initialization.bean1()当中完成,无论是在声明时直接初始化,还是在代码块当中初始化,本质均在构造函数里面进行初始化,在构造函数当中的初始化顺序取决于在 定义直接初始化和代码块初始化中的顺序。

类变量

  --声明时,初始化;

  --静态初始化块内,初始化;

实例2:

package initialization;

public class bean2 {

	static int d;
static int e = 5;
static int c;
int b;
int f;
int a = 1;
static {
c = 3;
System.out.println("hello,static"); } {
b = 2;
System.out.println("hello");
}
static {
d = 4; } public bean2() { f = 6;
} public int geta() { return a; } }

新建bean2实例时,输出如下:

hello,static
hello

静态代码块是主动执行的,需要在项目启动的时候就初始化;

javap -c bean2.class 查看反汇编代码如下:

Compiled from "bean2.java"
public class initialization.bean2 {
static int d; static int e; static int c; int b; int f; int a; public initialization.bean2();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: iconst_1 //初始化a
6: putfield #2 // Field a:I
9: aload_0
10: iconst_2 //初始化b
11: putfield #3 // Field b:I
14: aload_0
15: bipush 6
17: putfield #4 // Field f:I
20: return public int geta();
Code:
0: aload_0
1: getfield #2 // Field a:I
4: ireturn static {};
Code:
0: iconst_5 //初始化e
1: putstatic #5 // Field e:I
4: iconst_3 //初始化c
5: putstatic #6 // Field c:I
8: iconst_4 //初始化d
9: putstatic #7 // Field d:I
12: return
}

结论:  实例变量的初始化均在public initialization.bean2()当中完成,无论是在声明时直接初始化,还是在代码块当中初始化,本质均在构造函数里面进行初始化,在构造函数当中的初始化顺序取决于在 定义直接初始化和代码块初始化中的顺序;

类变量在static {}中完成,且初始顺序以代码中顺序为主,类变量在实例变量前执行;

关于java final可以查看:http://www.cnblogs.com/dolphin0520/p/3736238.html

java 初始化顺序的更多相关文章

  1. Java初始化顺序

    package com.helei.init; class Log { public static String fatherStaticString(){System.out.println(&qu ...

  2. [转]Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数

    Java初始化顺序1在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入)2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包 ...

  3. C# 与Java初始化顺序及异同(转)

    C#初始化顺序 类成员变量初始化先于类的构造函数 静态成员变量先于实例变量 子类成员变量先于父类成员变量(java相反) 父类构造函数先于子类构造函数 参考实例: using System; //us ...

  4. java 初始化顺序问题

    今天在<thinking in java>上面看了关于初始化问题,之前从来都没有深入考虑过,这次算是把它搞明白了,所以记录一下: 这个不是我看到的初始化顺序问题,在网上搜索的时候发现的,感 ...

  5. Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)

    1.执行顺序 1.1.一个类中的初始化顺序 类内容(静态变量.静态初始化块) => 实例内容(变量.初始化块.构造器) 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)= ...

  6. 10、java初始化顺序

      在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入) 2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包括静态代码和变 ...

  7. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...

  8. Java 类成员的初始化顺序

    Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究.   1  无继承情况下的Jav ...

  9. Android(java)学习笔记136:Java类初始化顺序

    Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论:     1 .继承体系的所有静态成员初始化( ...

随机推荐

  1. 解决Ubuntu下Firefox+OpenJDK没有Java插件的问题

    如果是安装的OpenJDK,很遗憾它是没有libnpjp2.so的. 此时按照网上各种奇怪的方法都挣扎无效,但可以用icedtea插件来解决这个问题. icedtea的版本与本机安装的OpenJDK版 ...

  2. [C]为什么发明指针?

    指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序 ...

  3. ubuntu14.04 yuv文件的播放及视频信息的查看

    1.安装ffmpeg sudo add-apt-repository ppa:mc3man/trusty-media sudo apt-get update sudo apt-get install ...

  4. sql2008“备份集中的数据库备份与现有的xx数据库不同”解决方法

    http://www.cnblogs.com/huangfr/archive/2012/08/09/2629687.html 因为是在另一台电脑对同名数据库做的备份,用常规方法还原,提示不是相同数据库 ...

  5. NodeJS使用formidable实现文件上传

    最近自学了一下NodeJS,然后做了一个小demo,实现歌曲的添加.修改.播放和删除的功能,其中自然要实现音乐和图片的上传功能.于是上网查找资料,找到了一个formidable插件,该插件可以很好的实 ...

  6. NPOI操作EXCEL(二)——大量不同模板时设计方式

    上一篇文章介绍了一些NPOI的基础接口,我们现在就来看看具体怎么用NPOI来解析一个EXCEL. 博主现在有这么一堆excel需要解析数据入库: 当然这只是员工的简要模板,还有很多其他的模板.我们可以 ...

  7. FastDFS 通过文件名获取文件信息

    /** * 获取文件信息 * * param string group_name 文件所在的组名 * param string file_id 文件id(如: M00/09/BE/rBBZolgj6O ...

  8. 标题栏显示icon

    <link rel="shortcut icon" href="/favicon2.ico"/><link rel="bookmar ...

  9. 【codeforces 442B】 Andrey and Problem

    http://codeforces.com/problemset/problem/442/B (题目链接) 题意 n个人,每个人有p[i]的概率出一道题.问如何选择其中s个人使得这些人正好只出1道题的 ...

  10. Javascript格式化json返回的时间(/Date(1482747413000)/)

    //时间处理,类似/Date(1482747413000)/的形式,得到xxx年xx月xx日 11:11:11 function ChangeDateFormat(jsondate) { jsonda ...