`
jguangyou
  • 浏览: 368986 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java初始化块和构造方法的执行顺序

阅读更多

       初始化块是java语言中的第四种成员(其他的为属性、方法和构造器),一个类中可以有多个初始化块,相同修饰符的初始化块的执行顺序为:前面定义的初始化块先执行,后面的后执行。那初始化块和构造方法的执行顺序是怎么样的呢?答案是当创建java对象的时候,系统总是先调用该类里定义的初始化块,然后再调用构造方法。看下面这个简单的例子:

 

public class Person {
	{
		System.err.println("person first init block");
	}
	
	public Person(){
		System.err.println("person Constructor methed");
	}
	{
		System.err.println("person second init block");
	}
	
}

 在主方法中定义 一个Person类,程序输出结果为:

person first init block
person second init blok
person Constructor methed

 

         另一个问题,初始化块是可以有修饰符的,但是修饰符只能是static关键字,那如果初始化块加上static后,会有什么不同呢?如果按照我们定义静态变量的思维来想的话,是不是系统在加载该类的时候就执行静态初始化块呢?没错,就是这个样子的。把上面的程序改一下。

public class Person {
	{
		System.err.println("person first init block");
	}
	
	public Person(){
		System.err.println("person Constructor methed");
	}
	{
		System.err.println("person second init blok");
	}
	
	static{
		System.out.println("person static init block");
	}
	
	
}

 执行结果:

person static init block
person first init block
person second init blok
person Constructor methed

 很明显,系统在初始化类之前可定要先加载类,所以,static最先执行,然后是依次执行非静态块,最后执行构造方法。

       还有一种情况,那就是有继承的情况。如果父类和子类都有静态初始化块和非静态初始化块,初始化一个子类的实例,应该是如何执行呢?顺序为:子类的静态初始化块、父类的静态初始化块、父类的非静态初始化块、父类的构造方法、子类的非静态初始化块、子类的构造方法。

 

  • 大小: 826.1 KB
分享到:
评论

相关推荐

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    java面试题静态加载顺序构造方法

    java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System....

    java面试题-类的初始化顺序.doc

    我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:

    Java类初始化顺序

    所有代码块是从上往下顺序执行的,所以代码块里面使用到的变量如果在块下面初始化会有问题 执行构造方法中内容。 所以看见的空构造方法,只能说第三部没有需要执行的内容。 下面举例子 public class TestClass { ...

    深入理解java构造器机理

    java构造方法是java类中最重要的一个概念,这篇文档涵盖了,java对象初始化过程中构造器调用的顺序,及作用。

    JAVA面试题解惑系列

    我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:

    Java开发者文档,分享日常学习的一些小知识点 .rar

     构造方法的作用就是初始化。  (2) 静态对象的初始化  程序中主类的静态变量会在main方法执行前初始化。  不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时  未创建此类...

    JAVA基础知识精华总结 收藏

    (2) 常量在使用前必须赋值,但除了在声明的同时初始化外,就只能在构造方法中初始化 。 (3) final修饰的方法不能被重置(在子类中不能出现同名方法)。 (4) 如果声明一个类为final,则所有的方法均为final,无论...

    Thinking in java4(中文高清版)-java的'圣经'

    4.4 Foreach语法 4.5 return 4.6 break和 continue 4.7 臭名昭著的“goto” 4.8 switch 4.9 总结 第5章 初始化与清理 5.1 用构造器确保初始化 5.2 方法重载 5.2.1 区分重载方法 5.2.2 涉及基本类型的重载 5.2.3 以...

    Java 基础核心总结 +经典算法大全.rar

    类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...

    疯狂JAVA讲义

    5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 5.10 本章小结 165 本章练习 165 第6章 面向对象(下) 166 6.1 基本数据类型的包装类 167 6.2 处理对象 170 6.2.1 打印对象和toString方法 170 6.2.2 =...

    Java开发技术大全(500个源代码).

    errorInit.java 演示变量初始化错误的程序 integerExample.java 演示各种整型变量的使用 isPrime.java 判断素数 leapYearByIf.java 用if语句判断闰年 leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper...

    杰普学习corejava总结笔记

    2.构造器执行顺序 1.类加载,同时初始化类中静态的属性(赋默认值) 2.执行静态代码块 3.分配内存空间,同时初始化非静态的属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示...

    java初学者必看

    3.5.2 变量赋值和初始化 3.5.3 常量 3.6 类型转化 3.6.1 数值类型之间的转换 3.6.2 强制类型转换 3.7 运算符 3.7.1 算术运算符 3.7.2 关系运算符 3.7.3 逻辑运算符 3.7.4 位运算符 3.7.5 自动递增和递减 ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    生成对象的最后一步是执行构造方法,进行初始化。由于对构造方法可以进行重写 ,所以通过给出不同个数或类型的参数会分别调用不同的构造方法。 例子:以类 Rectangle 为例,我们生成类 Rectangle 的对象: Rectangle p1...

    JAVA基础课程讲义

    静态初始化块(经常用来初始化类,加载类信息时执行!) 67 package 68 JDK中的主要包 68 import 68 eclipse的使用 69 继承(extend, inheritance) 70 为什么需要继承?继承的作用? 70 继承介绍 70 如何实现继承? ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    7.9.3 留个无参数的构造方法——给重要属性赋初始值 183 7.9.4 在构造方法中调用构造方法 184 7.10 方法大汇总 185 7.10.1 本例中用到的类 186 7.10.2 使用例程将本章的知识穿起来 189 7.11 小结:多方位理解...

    Java入门教程(微学苑)-part1

    3.15 作为方法名来初始化对象 50 3.16 作为参数传递 51 3.17 Java方法重载 52 3.18 Java类的基本运行顺序 53 3.19 Java包装类、拆箱和装箱详解 54 3.20 包装类的应用 54 3.20.1.1 1) 实现 int 和 Integer 的相互转换...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    7.9.3 留个无参数的构造方法——给重要属性赋初始值 183 7.9.4 在构造方法中调用构造方法 184 7.10 方法大汇总 185 7.10.1 本例中用到的类 186 7.10.2 使用例程将本章的知识穿起来 189 7.11 小结:多方位理解...

    java面试800题

    "类的初始化过程 当创建一个对象时,对象的各个变量根据其类型被设置为相应的默认初始值,然后调用构造方法,而每次调用构造方法都是要执行三个阶段: 1.调用超类的构造方法; 2.由初始化语句对给变量进行初始化...

Global site tag (gtag.js) - Google Analytics