`
JiongBull
  • 浏览: 7971 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

JAVA的构造器问题

阅读更多

1. 抽象类不能够被实例化?
2. 子类对象在实例化的时候会追溯父类的构造方法,一直追溯到Object,创建所有父类的实例?

 

回答:

1、子类在创建实例后,类初始化方法会调用父类的初始化方法(除了java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Object的初始化方法。
这个地方我说的是初始化方法,而不是构造方法,因为构造方法是相对于java源程序而言,而编译后的class文件是初始化方法即"<init>"方法(红色部分为方法名),初始化方法是由java源程序的三个部分组成的,一个部分是成员字段后的直接的初始化语句,例如private int i=0;private Date date=new Date();等等,第二个部分是由初始化块组成,例如:

Java code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->public class Test{ private int i=0;//初始化第一部分 //以下大括号内为初始化第二部分 { this.i=4; \\do something...... } }


第三个部分就是java源代码中的构造方法中的代码,java源代码中有几个构造方法,那么class文件中就有几个初始化方法,编译器会把第一部分与第二部分分别复制到每个初始化方法的前端,然后把初始化方法对应参数的构造方法的代码复制到相应初始化方法中(这里说的复制其实应该说是编译,不过为了让你更好理解所以如此说).
那么说初始化方法如何追述其父类的,这也关系到初始化方法的结构,初始化方法的执行顺序以及结构就如上所说,但是每个初始化方法的第一个执行指令就是调用另外一个初始化方法,这个初始化方法可能是自身类某个初始化方法,例如你的构造函数中第一句有类似this(...)这种语句,那么初始化方法就会调用自身类的指定构造方法;如果你的构造方法中没有指定构造方法调用,那么初始化方法会默认调用父类无参数初始化方法,如果你的子类第一句为super(....),那么初始化方法会调用父类指定初始化方法。这种调用过程会递归进行调用,直到这个类是java.lang.Object类。
调用初始化方法并不代表会生成对象,你的java代码中出现new关键字加上构造方法的调用,只会生成一个对象,其父类对象不会生成,所以调用父类为抽象类的构造方法完全是合理的。而且初始化方法对于虚拟机来说只是一个名称叫做"<init>"的普通方法,区别只是生成对象以后调用而已(sun 的jdk私有包中有绕过构造方法生成对象的方式,可以证明之上说法,具体如何我这里不陈述)。
2,抽象类中的构造方法其实是用来给继承的子类来用的,因为构造方法相当于初始化方法,当子类调用构造方法时必须调用父类构造方法,所以你可以在子类产生对象时抽象类中按需求初始化抽象类中的字段以及执行一些初始化代码。其实并不是一定要生成某个类的实例才调用构造方法,子类也需要调用父类构造方法。而生成实例也并不一定会调用构造方法,在某些特殊实现中或者特殊情况下,生成实例不会调用构造方法。而调用了构造方法也不一定就生成了一个实例,但是那一定是一个实例调用的,就像一个普通的实例方法一样。

 

分享到:
评论

相关推荐

    深入理解java构造器机理

    “深入理解Java构造器机理” 在 Java 编程语言中,构造器是一种特殊的方法,用于初始化对象的创建。它是 Java 类中最重要的一个概念。下面将深入讨论构造器的机理、执行顺序、作用及与其他概念的区别。 一、构造器...

    java 构造器的调用

    在Java编程语言中,构造器(Constructor)是一个特殊的方法,主要负责对象的初始化工作。当创建一个新的类实例时,构造器会被自动调用。构造器的名称必须与类名完全相同,且没有返回类型,包括void。理解并熟练运用...

    JAVA构造器

    JAVA构造器

    Java入门理解构造器

    ### Java入门理解构造器 #### 一、构造器的基本概念 在Java中,构造器(Constructor)是一种特殊的方法,主要用于初始化对象。构造器的名字必须与类名相同,并且没有返回类型,甚至连`void`也不可以有。构造器的...

    Java 构造方法

    - **默认构造器**:如果程序员没有定义任何构造方法,Java编译器会自动提供一个无参的默认构造器。但一旦自定义了构造器,这个默认构造器将不再自动生成。 - **参数化构造器**:当需要在创建对象时传入特定值来初始...

    对象和构造器

    在 Java 程序设计中,对象和构造器是两个基本概念。对象是类的实例,构造器是创建对象的特殊方法。 类和对象 在 Java 中,每个对象都是一个类的实例。类是对对象的抽象,定义了对象的属性和行为。类中定义的变量...

    java中构造器内部调用构造器实例详解

    "java中构造器内部调用构造器实例详解" java中的构造器内部调用构造器实例是指在一个构造器中调用另一个构造器,以减少代码的重复和提高代码的可读性。这种做法可以使用this关键字来实现。 在 Java 中,每个类都...

    Java私有构造器使用方法示例

    但是,私有构造器也可以带来一些问题,例如限制类的实例化和子类化,增加代码的复杂性等。因此,在使用私有构造器时,需要根据实际情况进行权衡和选择。 私有构造器是 Java 编程语言中的一种特殊的构造器,它可以...

    理解构造器--构造器和方法的区别

    最后,值得注意的是,Java编译器会在构造器中自动插入对超类构造器的调用,如果没有显式指定,会默认调用无参构造器。这在继承层次结构中确保了初始化的连续性。 总之,理解构造器和方法的区别对于Java程序员至关...

    构造方法JAVA构造方法

    Java构造方法是面向对象编程中的一个关键概念,用于初始化新创建的对象。在Java类中,构造方法是一个特殊的方法,它的名字必须与类名完全相同,没有返回类型,甚至不包括void关键字。当我们创建一个类的新实例时,...

    基于Java构造器和Static关键字的研究.pdf

    基于Java构造器和Static关键字的研究.pdf

    Java 构造器原理及用法解析

    Java 构造器原理及用法解析 Java 构造器是 Java 编程语言中的一个基本概念,它们在创建新对象时执行的操作。构造器是 Java 中创建新对象时执行的操作,当 Java 应用程序创建一个类的实例时,它将检查构造器。如果该...

    JavaString构造器中originalValue.lengthsize

    Java:String构造器中originalValue.length&gt;size的理解

    Java构造器和方法的区别

     要学习Java,你必须理解构造器。因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆。但是,构造器和方法又有很多重要的区别。  原作者:Robert Nielsen 原站:www.javaworld.com  我们说构造器是一...

    java 静态块实例块构造器调用

    Java编程语言中,类的初始化过程涉及到静态块(static block)、实例块(instance block)以及构造器(constructor)。这些块的执行顺序对于理解和编写复杂的Java程序至关重要,特别是在涉及继承关系时。下面我们将...

    Java构造器使用方法及注意事项

    "Java构造器使用方法及注意事项" Java语言中,构造器是一种特殊的方法,用于初始化对象的状态。下面将详细介绍Java构造器的使用方法及注意事项。 一、构造器的使用方法 构造器是一种特殊的方法,用于初始化对象的...

    构造器和方法的区别

    构造器和方法是Java编程语言中的两个核心概念,它们各自承担着不同的角色和功能,但初学者往往容易混淆。为了更好地理解和区分构造器与方法,本文将深入探讨这两个概念的关键差异,包括它们的功能、语法特性以及如何...

    JPA构造器的使用样例

    总的来说,JPA构造器的使用样例展示了如何通过自定义构造器将多表查询的结果映射到自定义的Java对象上,从而更方便地处理数据库查询结果。这种方法不仅可以减少手动转换数据的工作,还可以使代码更清晰、更易于理解...

    Java面向对象(基础)- 类的成员之三:构造器(Constructor)

    【Java面向对象(基础)- 类的成员之三:构造器(Constructor)】 构造器是Java中用于初始化新创建对象的特殊方法。当我们使用`new`关键字创建一个对象时,构造器会被自动调用,用于设置对象的初始状态。构造器的名字...

Global site tag (gtag.js) - Google Analytics