java对象初始化的顺序

Java代码

  1. public class Son extends Father {
  2. String value = null;//2
  3. public Son() {
  4. super();  //1
  5. System.out.println("Son:  " + value);//3
  6. }
  7. public static void main(final String[] args) {
  8. new Son();
  9. }
  10. }
  11. class Father {
  12. public Father() {
  13. if (this instanceof Son) {
  14. Son lower = (Son) this;
  15. lower.value = "test";
  16. }
  17. }
  18. }
  19. class Father {
  20. public Father() {
  21. if (this instanceof Son) {
  22. Son lower = (Son) this;
  23. lower.value = "test";
  24. }
  25. }
  26. }

下载

这个的结果是 null 
步骤1  设置为test 
步骤2  设置为null 
步骤3 打印出来null

如果 不是   String value = null ; 只是   String value; 下载

步骤1  设置为test 
步骤2  不做任何事情,因为已经有值了,不用设置为默认的null值了 
步骤3 打印出来null

所以  一个字段不设置值 和 设置为null  是有区别的。

时间: 2024-08-14 14:43:06

java对象初始化的顺序的相关文章

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

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

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

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

Java对象初始化顺序(一)

---恢复内容开始--- 偶尔翻到了关于Java对象初始化顺序的面试题,重新复习了一下,顺便做笔记. 1.父类子类构造函数执行的先后顺序 public class Test2 { public int Field; //step 1 public Test2(){ Field = 1; } } /*************************************************/ /** * 次类的目的仅是为了验证父类子类构造函数执行的先后顺序 */ public class T

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

局部变量与成员变量: 局部变量分为: 行参:在方法签名中定义的局部变量,随方法的结束而凋亡. 方法内的局部变量:必须在方法内对其显示初始化,从初始化后开始生效,随方法的结束而凋亡. 代码块内的局部变量:必须在代码块内对其显示初始化,从初始化后开始生效,随代码块的结束而凋亡. 成员变量: 静态属性:类加载时初始化,随着类的存在而存在: 非静态属性:随着实例的属性存在而存在: 关于他两的区别: 1.局部变量不可以加static: 2.局部变量不可以加public.protected.private:

Java程序初始化的顺序是怎样的

在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象. Java程序的初始化一般遵循以下三个原则(以下三原则优先级依次递减):(1)静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次.(2)父类优先于子类进行初始化.(3)按照成员变量定义顺序进行初始化.即使变量定义散布于方法定义之中,它们依然在任何方法(包括构造函数)被调用之前先初始化.

Java对象初始化详解

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

Java对象初始化详解(转)

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

Java中初始化的顺序问题小结

以下内容有一部分是自己的总结,还有一部分是借鉴别人的总结. 一.基础概念: 1.构造方法: 构造方法用于执行类的实例初始化工作 ,构造方法又称构造函数.创建对象时,根据传入的参数列表,将自动调用相应的构造方法.  每个类都有构造方法,如果没有显示声明构造方法,编译器会自动生成一个默认的无参数的构造方法.默认构造方法实例化对象,并将未赋值的字段赋予默认值. 注意:如果声明了带有参数的构造方法,编译器则不会自动生成默认的无参数的构造方法,此时如果需要无参数的构造方法,则需要显示声明. 2.初始化代码

JAVA 对象初始化的过程

对象初始化的过程例:Student S    =    new Student();1.因为new Student()用到了Student类,所以会把它从硬盘上加载进入内存2.如果有static静态代码块就会随着类的加载而执行,还有静态成员和普通方法也会随着类的加载而被加载3.在堆中开辟空间,分配内存地址4.在堆中建立对象特有属性,并同时对特有属性进行默认初始化5.对属性进行显示初始化6.执行构造代码块,对所有对象进行初始化7.执行对应的构造函数,对对象进行初始化8.将内存地址给S(给栈中的变量