`
bliuqing
  • 浏览: 67134 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

java构造函数初始化

阅读更多
【转】http://blog.sina.com.cn/s/blog_4a5d4f74010009xf.html
首先:
(1)构造函数不是方法,不能够继承;但是可以重载;

(2)构造函数的执行阶段:
    为子类和父类的所有域设默认值;
    调用子类的构造函数;
    调用父类的构造函数;(隐式或显式,显式的话一定要是第一个语句)
    对父类域进行初始化;
    执行父类构造函数的其余部分;
    对子类域进行初始化;
    执行子类构造函数体;

(3)作为显式调用一部分的任何表达式都不允许引用当前对象的成员,
    所有的域的初始化语句将按照顺序执行,在这时可以引用本队象
    的其他成员,因为这时他们已经被初始化为默认值。



构造函数运行解析:

源代码如下
import java.util.*;
class super1{
{
  System.out.println('super1 ok');
}
  super1()
  {
    System.out.println('3');
  }
}

class Employee extends super1{
private String name;
private double salary=1500.00;
private Date birthday;
public Employee(String n,Date DoB){
   System.out.println('2');
   name=n;
   birthday=DoB;
}
public Employee(String n){
   this(n,null);
   System.out.println('4');
}
}

class Manager extends Employee{
  {
    System.out.println('Manager ok');
  }
  private String department;
  public Manager(String n,String d){
super(n);
department=d;
  }
}

public class test1{
  public static void main(String args[]){
new Manager('Smith','sales');
  }
}

new Manager('Smith','sales')调用过程:
(1)绑定构造函数参数。其实就是传递参数的过程
(2)查看是否有this()语句。没有。虽然没有使用this()语句调用构造函数,但是该步骤不能省略
(3)调用super()语句,此时,程序跳转到Public Employee(String n)。
(4)绑定构造函数参数String n
(5)查看是否有this()。有,则执行构造函数public Employee(String n,Date DoB)
(6)绑定构造函数参数String n,Date DoB
(7)查看是否有this()语句。没有
(8)执行有系统自动插入的super()语句:执行super1()
(9)执行显式初始化语句System.out.println('super1 ok');
(10)执行构造函数语句System.out.println('3');
(11)执行显式初始化语句private double salary=1500.00;
(12)执行构造函数语句System.out.println('2');同时执行name=n;birthday=DoB;
(13)执行构造函数语句System.out.println('4');
(14)执行显式初始化语句System.out.println('Manager ok');
(15)执行构造函数语句department=d;

几点总结:
(1)对象是由new运算符创建的,且在任何构造函数执行之前就已经创建完毕了
(2)构造函数的执行总是“向上”的:而且总是先执行完父类的构造函数
(3)在构造函数中,没有this()语句则由super()语句。没有this()时,或者自己编写super(),或者由系统自动调
    用 super()  
(4)显式初始化语句总是先于构造函数语句,但后于super()或this()

分享到:
评论

相关推荐

    java类中静态域、块,非静态域、块,构造函数的初始化顺序

    ### Java 类中静态域、块,非静态域、块,构造函数的初始化顺序 #### 一、概述 在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块...

    java代码的初始化顺序demo

    总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...

    Java继承时构造函数的调用

    在Java中,当子类继承父类时,子类的构造函数可以调用父类的构造函数来初始化父类的部分状态。有两种方式可以实现这一点: 1. 如果父类有一个无参数的构造函数,那么子类在创建对象时,会默认调用这个无参数的父类...

    Java构造函数的继承问题[收集].pdf

    这意味着在创建子类对象时,虽然会先调用父类的默认构造函数初始化父类部分,但子类还需要有自己的构造函数来完成自身的初始化。 3. **构造函数调用顺序**: - 在创建子类对象时,首先调用父类的默认构造函数,...

    java私有构造函数

    在Java编程语言中,构造函数(Constructor)是用于初始化新创建的对象的关键组成部分。默认情况下,构造函数的访问级别设置为`public`,以便其他类能够通过这个构造函数实例化对象。然而,在某些特定场景下,将构造...

    Java静态初始化块和对象初始化块

    它们可以被视为构造函数的补充,提供额外的初始化逻辑,特别是当多个构造函数需要执行相同的初始化操作时。 ```java public class InitFiledBlockStatic { int instanceVar; { // 对象初始化块中的代码 ...

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

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

    构造函数与静态块的执行顺序

    构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常用于类级别的初始化。 ### 构造函数与静态块的基本概念 构造函数是一种特殊的方法,它与类同名,并没有返回类型,其主要...

    java构造函数及相关知识[借鉴].pdf

    Java构造函数是编程中至关重要的概念,特别是在面向...总的来说,理解Java构造函数的使用和重载机制对于有效的对象初始化和代码的可维护性至关重要。通过合理利用这些特性,可以创建灵活、易于理解和扩展的代码结构。

    java构造函数示例(构造方法)

    Java构造函数是面向对象编程中的一个关键概念,用于在创建对象时初始化对象的状态。当我们创建一个类的实例时,构造函数会被自动调用,它允许我们设置对象的初始属性值,确保对象在创建后处于一个合理的状态。在这个...

    Java ejbCreate函数初始化EJB的一个代码实例

    然而,值得注意的是,从EJB 3.0开始,ejbCreate已经被废弃,推荐使用构造函数或者`@PostConstruct`注解的方法来进行初始化。这是因为EJB 3.x引入了更轻量级的编程模型,使得EJB更接近普通Java类,降低了学习和使用的...

    18_构造函数 视频

    在Java编程语言中,构造函数是一种特殊的方法,它在创建对象时被自动调用,用于初始化新创建的对象。本视频“18_构造函数”深入探讨了Java中的构造函数概念,是JavaSE学习的重要组成部分。 首先,我们来理解构造...

    构造函数的继承问题 笔记

    在面向对象编程语言如Java中,构造函数(Constructor)是一种特殊的方法,用于初始化新创建的对象。它与类同名,没有返回类型,并在创建对象时自动调用。 在Java中,构造函数可以被重载以提供不同的初始化方式,但...

    Java:构造函数与对象

    例如,在`Car`类中,我们可以通过构造函数初始化对象的属性,并通过getter和setter方法来获取和修改这些属性的值,从而实现了良好的封装: ```java public class Car { private String make; private String ...

    枚举类型与构造函数.doc

    枚举类型与构造函数 枚举类型是一种特殊的数据类型,它可以在程序中定义一组固定的常量,...枚举类型和构造函数是Java中两种重要的概念,枚举类型可以定义一组固定的常量,而构造函数可以用于初始化对象的实例变量。

    深入理解java构造器机理

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

    Java构造函数与普通函数用法详解

    2. 通过new调用构造函数初始化对象。 五、普通函数和构造函数的区别 普通函数和构造函数是两种不同的函数,它们的用法和特点如下: 普通函数: * 普通函数可以是static的,也可以是非static的。 * 普通函数可以...

    java 初始化与方法

    初始化过程包括了静态块和实例块的执行,以及构造函数的调用。静态初始化块用于在类加载时执行一次的初始化操作,而实例初始化块则在每次创建新对象时执行。这两个块可以用来设置默认值、初始化复杂对象或者执行其他...

    聚合中类的构造函数调用顺序

    这是因为首先调用了`Component`的构造函数来初始化`Aggregator`的成员变量`component`,然后才是`Aggregator`自身的构造函数。 这个顺序对于理解对象生命周期和依赖关系至关重要。如果在构造过程中,依赖于其他对象...

    判断是否为闰年,包含两个不同的构造函数

    这使得我们可以灵活地初始化日期对象。 #### 代码示例: ```java // 构造函数1: 只接受月和日 public Date(int month, int day) { this.month = month; this.day = day; } // 构造函数2: 接受年、月和日 public ...

Global site tag (gtag.js) - Google Analytics