对象初始化优先级

初始化优先级:静态代码块>>main方法>>构造代码块>>构造函数

 1 package com.itinfo;
 2
 3 /**
 4  * 代码块的优先级
 5  * http://www.cnblogs.com/goodcheap
 6  *
 7  * @author: Wáng Chéng Dá
 8  * @create: 2017-02-26 19:12
 9  */
10 public class CodeBlock {
11
12     static {
13         System.out.println("go to------>>>>>(CodeBlock--static{})");
14         System.out.println("I am CodeBlock static code block!\n");
15     }
16
17     {
18         System.out.println("go to------>>>>>(CodeBlock--{})");
19         System.out.println("I am CodeBlock code block!\n");
20     }
21
22     public CodeBlock() {
23         System.out.println("go to------>>>>>(CodeBlock--CodeBlock(){})");
24         System.out.println("I am CodeBlock Constructor!\n");
25     }
26
27 }
28 class TestCodeBlock extends CodeBlock {
29
30     static {
31         System.out.println("go to------>>>>>(TestCodeBlock--static{})");
32         System.out.println("I am TestCodeBlock static code block!\n");
33     }
34
35     {
36         System.out.println("go to------>>>>>(TestCodeBlock--{})");
37         System.out.println("I am TestCodeBlock code block!\n");
38     }
39
40     public TestCodeBlock() {
41         System.out.println("go to------>>>>>(TestCodeBlock--public TestCodeBlock(){})");
42         System.out.println("I am TestCodeBlock Constructor!\n");
43     }
44
45     public static void main(String[] args) {
46         System.out.println("go to------>>>>>(main)");
47         System.out.println("I am main method!\n");
48         CodeBlock block = new TestCodeBlock();
49     }
50 }

控制台输出:


go to------>>>>>(CodeBlock--static{})
I am CodeBlock static code block!

go to------>>>>>(TestCodeBlock--static{})
I am TestCodeBlock static code block!

go to------>>>>>(main)
I am main method!

go to------>>>>>(CodeBlock--{})
I am CodeBlock code block!

go to------>>>>>(CodeBlock--CodeBlock(){})
I am CodeBlock Constructor!

go to------>>>>>(TestCodeBlock--{})
I am TestCodeBlock code block!

go to------>>>>>(TestCodeBlock--public TestCodeBlock(){})
I am TestCodeBlock Constructor!

 

多态状态对象初始化优先级总结:父类静态代码块>>子类静态代码块>>main方法>>父类构造代码块>>父类构造函数>>子类构造代码块>>子类构造函数

时间: 2024-10-09 04:41:34

对象初始化优先级的相关文章

阿里巴巴面试题--Java对象初始化

转自 http://blog.csdn.net/ysjian_pingcx/article/details/19605335 Java对象初始化 这是一道阿里巴巴的关于Java对象初始化的面试题,堪称经典,代码很简单(编写格式做了些修改),但是需要面试者对Java中对象初始化有一个透彻的认识,那么通过这道面试题,对我有点启发,所以希望在这里分享给大家,希望能给迷惘的初学者一起指引,下面我们直入主题,先看看代码: 1 public class InitializeDemo { 2 private

对象初始化

对象初始化过程 第一步:在创建之前,检查是否加载(检查硬盘上的class文件是否加载到内存中,如果没有加载,就先加载父类的文件) 在加载父类的文件,在加载本类的文件中java使用的加载的策略:懒惰式加载(按需加载)用到的时候,只加载一次. 第二步:分配对象的空间.递归分配所有父类和子类的属性空间,属性会自动初始化为"0"的值 第三步:给属性赋值 第四步:调用父类的构造方法(默认调用父类的无参构造方法) 第五步:调用本类的构造方法

类加载与对象初始化

1. 初始化原因:避免发生空指向异常. 2. 类加载与初始化的顺序: 2.1 类加载时间:          每个类的编译代码都存在于他自己的独立文件中,该文件的加载通常发生在创建类的第一个对象时,或是访问类的static域或static方法时. 2.2 初始化顺序:(先父类后子类,创建对象之前先对类中的域进行初始化)        首先,类加载器主动加载主类(主类的初始化顺序与下面普通类一样),找到main方法,在main方法中根据第一行要创建的对象,加载该类的字节码文件,如果编译器注意到她有

Java 对象初始化顺序 执行顺序

先看一道Java面试题: 求这段程序的输出. 解答此题关键在于理解和掌握类的加载过程以及子类继承父类后,重写方法的调用问题: 从程序的执行顺序去解答: 1.编译:当这个类被编译通知后,会在相应的目录下生成两个.class 文件.一个是 Base.class,另外一个就是Base$Sub.class.这个时候类加载器将这两个.class  文件加载到内存 2.Base base= new Sub(): 声明父类变量base对子类的引用,JAVA类加载器将Base,Sub类加载到JVM(Java虚拟

理解隐式类型、对象初始化程序和匿名类型

在C# 3.0中,几乎每个新特性都是为LINQ服务的.所以,本文将介绍下面几个在C# 3.0中引入的新特性: 自动实现的属性 隐式类型的局部变量 对象和集合初始化程序 隐式类型的数组 匿名类型 其实这几个特性都是比较容易理解的,对于这几个特性,编译器帮我们做了更多的事情(想想匿名方法和迭代器块),从而简化我们的代码. 自动实现的属性 在C# 3.0以前,当我们定义属性的时候,一般使用下面的代码 public class Book { private int _id; private string

对象初始化的过程

对象初始化过程: a.在创建类之前,检查类是否已加载(检查硬盘上的class文件,是否已加载到内存中),如果没有加载就先加载父类文件,再加载本类的文件        Java使用的加载策略:懒惰式加载(按需要加载),用到的时候加载,只加载一次 b.分配对象的空间,递归分配所有的父类和子类的属性空间  属性会自动初始化为"0"值 c.给属性赋值 d.调用父类的构造方法(默认调用父类的无参构造方法) e.调用本类的构造方法

Java父类子类的对象初始化过程

摘要 Java基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况. 1. 基本初始化过程: 对于一个简单类的初始化过程是: static 修饰的模块(static变量和static 块)  ---> 按照代码顺序依次执行. | 实例变量  及非static模块---> 按照代码顺序依次执行. | 构造函数 ---> 执行对应的构造函数. 子类的初始化过程. 父类static修饰的模块 | 子类static修饰模块 | 父类实例变量和非static块 | 父

Java对象初始化详解

出处:http://blog.jobbole.com/23939/ 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深 入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本文在最后也会对类的初始化进行介绍,相对于对象初始化来说,类的初始化要相对简单一 些). 1.Java对象何时被初始化 Java对象在其被创建时初始化,在Java代码中,有两种行为可以引起对象的创建.其中比较直观的一种,也就是通常所

Spring-----配置及对象初始化(1)

一,配置文件进行Spring初始化 1,配置文件编写 <?xml version="1.0" encoding="utf-8" ?> <configuration> /************* 这里会报异常“Spring.Context.Support.ContextRegistry”的类型初始值设定项引发异常.把配置注释掉就行了 <startup> <supportedRuntime version="v4.0