`

Java继承结构中类的初始化

    博客分类:
  • Java
阅读更多

    初学者测试

    昨天自考考了《java程序语言设计》,有点不太记得类的初始化过程了,顺便复习了一下。

    同样准备了测试题一枚。把自己的email分散到输出中,如果正确输出,说明分析正确了。

    不行怎么行,这是基础。下面程序请先分析,如果结果(用白色字体是输出结果)正确,说明您对java类的初始化已经很熟悉,算是过关,如果没有,那赶紧复习吧。

 

package nie.test.extend;  

/** 子构造子的初始化过程: 
 * @author dotjar 
 *  1.父static域 
 *  2.父static块 
 *  3.子static域 
 *  4.子static块 
 *  5.父普通域
 *  6.父普通块{} 
 *  7.父构造子 
 *  8.子普通域
 *  9.子普通块{} 
 *  10.子构造子 
 */  
public class Test {  
    public static void main(String[] args) {  
        new Son("s");  
    }  
}  

class Father {  
    static protected String s = "father_static_property_string";  //1
    protected String b = "father_normal_property_string";  //5
    static {  
        s = "o";  //2
        System.out.print("d");  
        System.out.print(s);  
    }  
    {  
        b="r";  //6
        System.out.print("a");  
        System.out.print(b);  
    }  

    Father() {  
        this("@");  
        System.out.print("1");  //8
    }  

    Father(String s) {  
        System.out.print(s);  //7
    }  
}  

class Son extends Father {  
	public static String s = "son_static_property_string"; //3
	public String b = "son_normal_property_string"; //9
    static {  
        s = "j";  //4
        System.out.print("t");  
        System.out.print(s);  
    }  
    {  
        b = "3";  //10
        System.out.print("6");  
        System.out.print(b);  
    }  

    Son() {  
        System.out.print(".");  //11
    }  

    Son(String s) {  
        this();  
        System.out.print("com");  //12
    }  
}  
 

 测试完自己的输出,可以用鼠标选中下一行,检查。

这里:dotjar@163.com

 

 

分享到:
评论
1 楼 dotjar 2012-12-29  
事实上这样解释更好:
1.先是父类静态域和静态块,子类静态域和静态块
2.接着父类构造子,子类构造子,但此处中断一下!因为当初始化到构造子,系统先判断是否初始化了实例域和实例块,没有就先初始化,然后再是调用构造子。

相关推荐

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

    在实际开发中,理解这个初始化顺序是非常重要的,尤其是在设计复杂的类结构或者涉及单例模式、线程安全初始化等场景时。如果在构造器或初始化块中依赖其他静态或非静态成员,必须确保这些成员在需要之前已经被正确...

    java继承类实例

    在这个特定的程序中,我们看到了一个关于Java继承的实例,它演示了子类对象初始化时涉及的各个步骤,包括构造方法、初始化值、父类构造方法以及父类的初始化值。 首先,我们有一个名为`Parent`的父类,它有两个实例...

    java程序初始化顺序

    在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...

    探究java的ClassLoader及类变量初始化顺序

    Java中,类变量(static变量)的初始化顺序遵循以下规则: 1. 首先,执行父类的静态初始化块(方法),如果有的话。 2. 然后,执行子类的静态初始化块。 3. 静态变量的初始化顺序取决于它们在代码中声明的顺序,而...

    JAVA面试题解惑系列——类的初始化顺序

    在Java中,类的初始化顺序是面试中的经典问题之一,它涉及到继承、静态成员以及实例成员等多个方面。正确理解类的初始化顺序对于编写正确、高效的代码至关重要。 首先,需要了解Java类初始化的基本规则,即在类的...

    Java中初始化List的5种方法示例

    了解List的初始化方法可以帮助开发者更好地使用Java中的List数据结构,在实际开发中可以根据实际情况选择合适的方法。同时,了解List的初始化方法也可以帮助开发者更好地理解Java中的数据结构。 在实际开发中,选择...

    JAVA面试题解惑系列类的初始化顺序JAVA程序员JAVA工程师面试必看.pdf

    Java语言中的类初始化顺序是面试中...在实际编程中,我们有时需要依赖这种初始化顺序来确保数据的正确初始化,特别是在处理复杂的继承结构和多线程场景时。因此,熟练掌握类初始化顺序是每个Java程序员的基础技能之一。

    java类的继承实例

    Java 类的继承是其面向对象特性中的核心概念之一,它为代码重用和构建复杂的软件结构提供了基础。在 Java 中,一个类可以扩展另一个类的功能,这个被扩展的类被称为父类(或超类),而扩展的类则称为子类(或派生类...

    Java 接口与继承

    Java中的继承和接口是面向对象编程的关键特性,它们在软件设计中扮演着至关重要的角色,实现了代码的重用和类的层次结构。 继承是Java中创建新类的一种方式,它允许一个子类(SubClass)从一个已存在的父类...

    Java继承实例源代码

    在这个"Java继承实例源代码"的压缩包中,包含的文件可能提供了关于Java继承和多态性的实际应用示例。 首先,我们来看“继承”这一概念。在Java中,通过使用关键字`extends`,一个类可以声明其为另一个类的子类。...

    Java类初始化和实例化中的2个“雷区”

    2. 避免在类的静态字段初始化中直接或间接地依赖其他类尚未初始化的静态字段,因为这可能导致数据不一致或错误。 为避免这些“雷区”,应该遵循以下最佳实践: - 尽量减少静态字段的使用,尤其是涉及类间依赖的静态...

    Java实例化一个抽象类对象的方法教程

    当子类实例化时,会调用抽象类中的构造方法进行初始化。 在Java中,实例化抽象类的一种常见方式是通过子类继承并实现抽象方法。假设有一个抽象类`AbstractBase`: ```java public abstract class AbstractBase { ...

    \\java类、抽象类、接口、继承和对象解析 .doc

    在 Java 中,类是用来封装数据和行为的结构,而对象则是类的实例,具有具体的属性和行为。 1. **类与对象的区别** 类是模板或者蓝图,它定义了一组特性和行为,这些特性通过成员变量(属性)表示,行为通过方法...

    Java static静态初始快

    在Java编程语言中,`static`关键字扮演着重要的角色,特别是在初始化类的静态成员时。`static`静态初始化块是用来初始化类级别的变量,也就是说,这些变量是属于类本身,而不是类的实例。当我们讨论“Java static...

    Java继承时构造函数的调用

    在`Student`的构造函数中,我们可以看到`super(name, age)`的使用,这表示`Student`类在初始化时会调用`Person`类的两个参数构造函数,将参数传递给父类。 在`Test`类的`main`方法中,我们创建了三个`Student`对象...

    JAVA继承_接口_抽象类等练习.doc

    这是因为Java中类的继承通过`extends`关键字来表示,表示类B继承自类A。 ### 12. 类的多重继承 **概念:** Java不支持多重继承,即一个类不能直接继承多个父类。但是一个类可以实现多个接口。 **选择题示例:** 第...

    java 继承关系的加载顺序

    在Java编程语言中,继承是面向对象特性的重要组成部分,它允许一个类(子类)从另一个类(父类)继承属性和方法。了解Java中继承关系的加载顺序对于理解和优化程序性能至关重要。以下是对这个主题的详细阐述: 1. ...

    java在hashmap初始化时赋初值过程解析

    Java 在 HashMap 初始化时赋初值过程解析 ...本文介绍了 Java 中的 HashMap 初始化时赋初值过程解析,包括使用双括号进行初始化的语法和可能导致的串行化失败的问题,以及解决办法。希望对大家的学习有所帮助。

    java关于继承的思维导图(Xmind)

    在这个"java关于继承的思维导图(Xmind)"中,我们可以看到作者对Java继承机制的详细梳理。 1. **类的层次结构** - 在Java中,类可以看作是对象的模板,通过继承,子类可以共享父类的特性。这构建了一个类的层次结构...

Global site tag (gtag.js) - Google Analytics