这里主要是介绍JAVA的类的初始化顺序,比较基础;主要是以例子演示为主:

  • 例子一:

 1 package com.cnblog.GDUTtiantian;
 2
 3 /**
 4  *
 5  * @author GDUTtiantian
 6  * @date 2014-5-19 下午1:30:10
 7  * JAVA类的初始化顺序
 8  */
 9 public class Tiantian {
10
11     {
12         System.out.println("初始化:代码块1");
13     }
14
15     {
16         System.out.println("初始化:代码块2");
17     }
18
19     public Tiantian(){
20
21         System.out.println("Constructor:Tiantian");
22     }
23
24     {
25         System.out.println("初始化:代码块3");
26     }
27
28     public static void main(String[] args) {
29         Tiantian client = new Tiantian();
30     }
31
32 }
例子一运行结果:

初始化:代码块1
初始化:代码块2
初始化:代码块3
Constructor:Tiantian

  

  非静态代码块和普通变量一样,按照在程序出现的先后顺序,被加载到构造器中进行初始化;所以它们被初始化的顺序就是在程序中的出现的先后顺序。

  下一步,稍微修改下例子一的代码:

  • 例子二:

 1 package com.cnblog.GDUTtiantian;
 2
 3 /**
 4  *
 5  * @author GDUTtiantian
 6  * @date 2014-5-19 下午1:30:10
 7  * JAVA类的初始化顺序
 8  */
 9 public class Tiantian {
10
11     {
12         //这里编译不会出错,主要是当前代码块处于name属性的作用域范围。
13         this.name = "GDUT";
14         System.out.println("初始化:代码块1");
15     }
16
17     {
18         System.out.println("初始化:代码块2");
19     }
20
21     private String name = "tiantian";
22
23     public Tiantian(){
24
25         System.out.println("Constructor:Tiantian");
26     }
27
28     {
29         System.out.println("初始化:代码块3");
30     }
31
32     public static void main(String[] args) {
33         Tiantian client = new Tiantian();
34         System.out.println(client.name);
35     }
36
37 }

  

例子二运行结果:

初始化:代码块1
初始化:代码块3
初始化:代码块3
Constructor:Tiantian
tiantian

  理解了这里,可以帮助更好地理解JAVA类的初始化过程。JAVA类不是在定义private String name = "tiantian";的时候先对name进行初始化,而是在代码块一中就对name进行了初始化,name的值为”GDUT”,然后再进一步初始化,name的值为”tiantian”.下面一个例子主要是针对具有继承关系的两个类的初始化顺序的探讨。

  • 例子三:

 1 package com.cnblog.GDUTtiantian;
 2
 3
 4 class Parent {//父类
 5
 6     {//Parent:block 1
 7         this.name = "My parent.";
 8         System.out.println("Parent:代码块1");
 9     }
10
11     private String name = "A Parent.";
12
13     {//Parent:block 2
14         this.name = "Your parent.";
15         System.out.println("Parent:代码块2");
16     }
17
18
19     public Parent(){
20         System.out.println("Constructor:Parent");
21         System.out.println(this.name);
22     }
23
24     {//Parent:block 3
25         this.name = "Their parent.";
26         System.out.println("Parent:代码块3");
27     }
28 }
29
30 /**
31  *
32  * @author GDUTtiantian
33  * @date 2014-5-19 下午1:30:10
34  * JAVA类的初始化顺序
35  */
36 public class Tiantian extends Parent{
37
38     {//block 1
39         //这里编译不会出错,主要是当前代码块处于name属性的作用域范围。
40         this.name = "GDUT";
41         System.out.println("初始化:代码块1");
42     }
43
44     {//block 2
45         System.out.println("初始化:代码块2");
46     }
47
48     private String name = "tiantian";
49
50     public Tiantian(){
51
52         System.out.println("Constructor:Tiantian");
53     }
54
55     {//block 3
56         System.out.println("初始化:代码块3");
57     }
58
59     public static void main(String[] args) {
60         Tiantian client = new Tiantian();
61         System.out.println(client.name);
62     }
63
64 }

   

例子三运行结果:

Parent:代码块1
Parent:代码块2
Parent:代码块3
Constructor:Parent
Their parent.
初始化:代码块1
初始化:代码块2
初始化:代码块3
Constructor:Tiantian
tiantian

  

  首先,初始化子类时,会先去调用父类的构造器(如果没有显示调用,则编译器会自动调用父类的无参构造器,如果此时父类没有无参构造器,则编译会出错。),如果父类有继承其他类,则会调用其他类的构造器;否则,和例子二的初始化顺序一样。

总结:这里主要是涉及类的初始化,仅仅是非静态属性的初始化;还有其他的东西,后面会继续完善。

  

  我的主页

  

以上是个人的观点,欢迎交流讨论。

  [从文章转到随笔]  

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

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

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

  2. JAVA的初始化顺序:

    JAVA的初始化顺序: 父类的静态成员初始化>父类的静态代码块>子类的静态成员初始化>子类的静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造 ...

  3. java 继承 初始化顺序

    面向对象三大特性: 封装,继承,多态 java 继承初始化顺序 先初始化父类对象, 在父类对象中先初始化父类属性,再初始化父类的构造方法,然后初始化子类对象,初始化子类对象的属性,初始化子类的构造方法 ...

  4. 【知识总结】Java类初始化顺序说明

    微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...

  5. java继承 初始化顺序

    java继承 初始化顺序 标签: 初始化顺序 2013-08-01 10:13 879人阅读 评论(0) 收藏 举报  分类: java(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  6. Java变量、Java对象初始化顺序

    局部变量与成员变量: 局部变量分为: 行参:在方法签名中定义的局部变量,随方法的结束而凋亡. 方法内的局部变量:必须在方法内对其显示初始化,从初始化后开始生效,随方法的结束而凋亡. 代码块内的局部变量 ...

  7. Java对象初始化顺序

    最近我发现了一个有趣的问题,这个问题的答案乍一看下骗过了我的眼睛.看一下这三个类: package com.ds.test;   public class Upper { String upperSt ...

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

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

  9. 【细说Java】Java变量初始化顺序

    Java的变量初始化顺序,对这里一直似懂非懂,面试的时候也经常被问到,但答的一直不好,现在整理记录一下,以后忘记了可以来看看. 程序分为两个部分,第一个部分不考虑继承,第二个部分考虑继承: (1)不考 ...

随机推荐

  1. 程序员"装B"手册

    一.准备工作 “工欲善其事必先利其器.” 1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好.一个用来查资料,一个用来写代码.总之要显得信息量很大,效率很高. 2.椅子不一定要 ...

  2. 实用SQL大全

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  3. wmi uuid

    [转]https://www.cnblogs.com/-sylar/p/8376621.html 1. 开始-运行-输入:wbemtest 回车2. 单击"连接", 输入:root ...

  4. Eclipse 安装使用 M2Eclipse 插件

    help --> Install New Software --> Add 安装完后需要重启eclipse 通常 Eclipse 会自带 Maven.但可能按自己安装的 Maven 存在版 ...

  5. 解决maven update project 后项目jdk变成1.5的问题

    一.问题描述 在Eclipse中新建了一个Maven工程, 然后更改JDK版本为1.7, 结果每次使用Maven > Update project的时候JDK版本都恢复成1.5. 二.原因分析 ...

  6. [C#]“正在终止线程”的问题

    在C#中启用线程后,如果试图使用Abort方法来终止线程,那么必定会抛出“正在终止线程”的异常,一开始我也想过如何来避免这种异常出现,花了不少气力,但最后发现全是徒劳. 原因是一个正在运行的线程被终止 ...

  7. day05作业---字典

    # 字典找位置 用键, 列表.元组找位置 用索引'''1.有如下变量(tu是个元祖),请实现要求的功能tu = ("alex", [11, 22, {"k1": ...

  8. 进度条的制作unity

    不说了直接上代码: LoadingPanel: using UnityEngine;using System.Collections;using UnityEngine.UI;using UnityE ...

  9. ubuntu安装vmare tools

    在vm中安装vm tools, 点击安装 vmware tools cp  VMwareTools-10.0.10-4301679.tar.gz  /home/YOURNAME/    //因为cd ...

  10. OpenCV(2):视频

    播放AVI视频 #include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/highgui/h ...