范文无忧网范文学习范文大全

Java中构造函数是什么?它应该具体怎么用呢

12月28日 编辑 fanwen51.com

[地动仪的构造是什么]张衡对地震有不少亲身体验。为了掌握全国地震动态,他经过长年研究,终于在阳嘉元年(公元132年)发明了候风地动仪──世界上第一架地震仪。它有八个方位,每个方位上均有口含龙珠的...+阅读

是构造方法,不是构造函数,后者是C++的概念首先要注意的是Java的构造器并不是函数,所以他并不能被继承,这在我们extends的时候写子类的构造器时比较的常见,即使子类构造器参数和父类的完全一样,我们也要写super就是因为这个原因。 构造器的修饰符比较的有限,仅仅只有public private protected这三个,其他的例如任何修饰符都不能对其使用,也就是说构造器不允许被成名成抽象、同步、静态等等访问限制以外的形式。 因为构造器不是函数,所以它是没有返回值的,也不允许有返回值。但是这里要说明一下,构造器中允许存在return语句,但是return什么都不返回,如果你指定了返回值,虽然编译器不会报出任何错误,但是JVM会认为他是一个与构造器同名的函数罢了,这样就会出现一些莫名其妙的无法找到构造器的错误,这里是要加倍注意的。 在我们extends一个子类的时候经常会出现一些意想不到的问题,我在这里说一些和构造器有关的。 首先说一下Java在构造实例时的顺序(不讨论装载类的过程) 构造的粗略过程如下

1、分配对象空间,并将对象中成员初始化为0或者空,java不允许用户操纵一个不定值的对象。

2、执行属性值的显式初始化(这里有一点变化,一会解释,但大体是这样的)

3、执行构造器

4、将变量关联到堆中的对象上 介绍一下准备知识,以备一会来详细说明这个的流程 this() super()是你如果想用传入当前构造器中的参数或者构造器中的数据调用其他构造器或者控制父类构造器时使用的,在一个构造器中你只能使用this()或者super()之中的一个,而且调用的位置只能在构造器的第一行, 在子类中如果你希望调用父类的构造器来初始化父类的部分,那就用合适的参数来调用super(),如果你用没有参数的super()来调用父类的构造器(同时也没有使用this()来调用其他构造器),父类缺省的构造器会被调用,如果父类没有缺省的构造器,那编译器就会报一个错误,注意此处,我们经常在继承父类的时候构造器中并不写和父类有关的内容,此时如果父类没有缺省构造器,就会出现编译器添加的缺省构造器给你添麻烦的问题了哦。例如:Class b extends a{public b(){}}就没有任何有关父类构造器的信息,这时父类的缺省构造器就会被调用。 举个SL-275中的例子 1 public class Manager extends Employee { 2 private String department; 3 4 public Manager(String name, double salary, String dept) { 5 super(name, salary); 6 department = dept; 7 } 8 public Manager(String n, String dept) { 9 super(name); 10 department = dept; 11 } 12 public Manager(String dept) { // 这里就没有super(),编译器会自动地添加一个空参数的缺省super构造器,此时如果Employee类中没有空参数的缺省构造器,那就会导致一个编译错误 13 department = d; 14 } 15 } 你必须在构造器的第一行放置super或者this构造器,否则编译器会自动地放一个空参数的super构造器的,其他的构造器也可以调用super或者this,调用成一个递归构造链,最后的结果是父类的构造器(可能有多级父类构造器)始终在子类的构造器之前执行,递归的调用父类构造器 在具体构造类实例的过程中,上边过程的第二步和第三步是有一些变化的,这里的顺序是这样的,分配了对象空间及对象成员初始化为默认值之后,构造器就递归的从继承树由根部向下调用,每个构造器的执行过程是这样的:

1、Bind构造器的参数

2、如果显式的调用了this,那就递归调用this构造器然后跳到步骤5

3、递归调用显式或者隐式的父类构造器,除了Object以外,因为它没有父类

4、执行显式的实例变量初始化(也就是上边的流程中的第二步,调用返回以后执行,这个步骤相当于在父构造器执行后隐含执行的,看样子像一个特殊处理)

5、执行构造器的其它部分 这里的步骤很重要哦!!!!! 从这个步骤中可以很明显的发现这个实例初始化时的递归调用过程,估计看过这个你应该能够理解这个递归构造链是怎么样回事了。 这里还是给出SL-275中的一个例子,让你充分理解一下这个递归的过程。 public class Object { ... public Object() {} ... } public class Employee extends Object { private String name; private double salary = 15000.00; private Date birthDate; public Employee(String n, Date DoB) { // implicit super(); name = n; birthDate = DoB; } public Employee(String n) { this(n, null); } } public class Manager extends Employee { private String department; public Manager(String n, String d) { super(n); department = d; } } 在创建Manager("Joe Smith","Sales"):时,步骤如下 0 basic initialization 0.1 allocate memory for the complete Manager object 0.2 initialize all instance variables to their default values (0 or null) 1 call constructor: Manager("Joe Smith", "Sales") 1.1 bind constructor parameters: n="Joe Smith", d="Sales" 1.2 no explicit this() call 1.3 call super(n) for Employee(String) 1.3.1 bind constructor parameters: n="Joe Smith" 1.3.2 call this(n, null) for Employee(String, Date) 1.3.2.1 bind constructor ...

延伸阅读:

excel函数公式大全计算及格率首先要分别算出及格的数量和全部的数量,可以使用EXCEL中的COUNT函数计算出规定范围内的全部有效数量。用COUNTIF函数计算出规定范围内的及格数量,假设成绩表如下: 及...

EXCEL的常用公式及函数EXCEL的常用计算公式大全 一、单组数据加减乘除运算: ① 单组数据求加和公式:=(A1+B1) 举例: 单元格A1:B1区域依次输入了数据10和5, 计算: 在C1中输入 =A1+B1 后点击键盘“Enter(确...

一次函数重点知识定义:如果y=kx+b(k、b是常数且k不等于0),那么y叫做x的一次函数。二、一次函数的两个特征:(1)自变量x的指数为1 ;(2)k不等于0 ;(更特别的是:当b=0时,一次函数y=kx+b变为y=kx 这里k是常...

一次函数有哪些知识点去文库,查看完整内容> 内容来自用户:你说的对 知识点一、平面直角坐标系 1,平面直角坐标系 在平面内画两条互相垂直且有公共原点的数轴,就组成了平面直角坐标系。 其中,水平的数...

求一次函数的全部知识点展开全部 一. 变量与常量 1)在某一个变化过程中,取同一数值的量叫做常量。在某一个变化过程中,取不同的数值的量叫做变量。 2)在某一个变化过程中,有两个变量:x和y,当x取每一个值时...

一次函数知识点1、正比例函数 一般地,形如y=kx(k是常数,k≠0)的函数叫做正比例函数,其中k叫做比例系数. 2、正比例函数图象和性质 一般地,正比例函数y=kx(k为常数,k≠0)的图象是一条经过原点和(1...

求一次函数的知识点函数”的概念是17世纪时从对各种运动问题的研究和对机械运动规律的考察中形成的。“函数”这个词用作数学术语最早是德国数学家莱布尼茨于1692年在考虑由次切线的变化来确...

8年级数学一次函数要点一、知识要点: 1、一次函数:若两个变量x,y存在关系为y=kx+b (k≠0, k,b为常数)的形式,则称y是x的函数。 注意:(1)k≠0,否则自变量x的最高次项的系数不为1; (2)当b=0时,y=kx,y叫x的正...

java里解释一下什么是构造函数每创建一个类的实例都去初始化它的所有变量是乏味的。如果一个对象在被创建时就完成了所有的初始工作,将是简单的和简洁的。因此,Java在类里提供了一个特殊的成员函数,叫做构造...

推荐阅读
图文推荐
栏目列表