不开编译器,不看答案看你是否能看出代码的运行结果:
class A
{
public A(){
System.out.println("A的无参构造方法!");
}
}
class B
{
public B(){
System.out.println("B的无参构造方法!");
}
}
class C
{
public C(){
System.out.println("C的无参构造方法!");
}
}
public class Test extends A
{
static{
System.out.println("Test的静态代码块");
}
private static B b;
private C c;
public Test(){
System.out.println("Test的无参构造方法");
}
public static void main(String args[]){
Test test = new Test();
}
}
运行结果是:
D:\>java Test
Test的静态代码块
A的无参构造方法!
Test的无参构造方法
怎么样!?你做对了吗??
我们再修改下代码,看这次你能否做对:
class A
{
public A(){
System.out.println("A的无参构造方法!");
}
}
class B
{
public B(){
System.out.println("B的无参构造方法!");
}
}
class C
{
public C(){
System.out.println("C的无参构造方法!");
}
}
public class Test extends A
{
static{
System.out.println("Test的静态代码块");
}
private static B b = new B();
private C c = new C();
public Test(){
System.out.println("Test的无参构造方法!");
}
public static void main(String args[]){
Test test = new Test();
}
}
执行结果是:
D:\>java Test
Test的静态代码块
B的无参构造方法!
A的无参构造方法!
C的无参构造方法!
Test的无参构造方法!
你做对了吗?细心的你应该已经发现第二次代码和第一次代码执行结果不同是因为在第一代码里我们只是声明了成员变量b,c而没有初始化。
通过这个例子你是否明白了对象实例化时的执行顺序呢:
实例化静态成员变量执行静态代码块(实例化静态成员变量和执行静态代码块的顺序按代码编写顺序而定)-->实例化父类对象-->实例化非静态成员变量-->执行构造方法
欢迎大家修改补充!!!
分享到:
相关推荐
"Java 对象初始化顺序学习指南" 在学习 Java 编程语言时,对象初始化顺序是一个非常重要的知识点,但是许多学生却感到困惑和困难。事实上,Java 对象初始化顺序并不难理解,只需要掌握“礼让”原则和 JVM 的执行...
这种情况下,初始化顺序如下:首先,`Lower`类的实例创建并分配默认值,然后调用`Upper`的构造器,接着执行`Initializer.initialize()`,该方法根据对象的实际类型(`Lower`)来设置字段的值。 5. **默认值**:即使...
Java对象初始化顺序是一个重要的编程概念,它涉及到类的继承、构造函数、成员变量初始化和非静态初始化块。在这个示例中,我们通过一个简单的代码片段来验证这些规则。首先,让我们详细解析一下给出的代码: ```...
在面向对象语言中(如Java、C#等),当创建一个继承自某个基类的子类对象时,会有一个特定的初始化顺序。这个顺序通常遵循以下步骤: 1. **基类静态成员初始化**:如果基类中有任何静态成员,则会在程序启动时按照...
tr); fatherStr = "fatherStr...总之,Java对象初始化顺序是编程过程中必须掌握的基础知识,它涉及到类的加载、实例化过程以及字段和方法的调用顺序。正确理解和运用这些知识,能够使我们写出更加健壮、高效的代码。
在Java编程语言中,对象初始化顺序是一个非常关键的概念,它涉及到类和对象的生命周期以及成员变量、静态成员变量、初始化块和构造函数的执行次序。理解这些规则对于编写健壮且可预测的代码至关重要。 首先,我们来...
在Java编程语言中,对象初始化顺序是一个重要的概念,它涉及到类和对象的生命周期。通过字节码分析,我们可以深入理解这个过程。字节码是Java虚拟机(JVM)理解和执行的二进制代码,它是Java源代码经过编译后的产物...
本文通过实例分析了C#中的对象初始化顺序,这对于理解和编写安全、高效的代码至关重要。 首先,让我们来理解C#对象初始化的基本顺序: 1. **变量初始化**:在构造函数执行之前,类的实例变量会先进行初始化。这...
以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**: - **加载**:当Java虚拟机(JVM)首次遇到一个类的引用时,会通过类加载器进行加载。加载过程包括找到类的.class文件,读取其字节码,并转化为内存中...
在实际开发中,理解这个初始化顺序是非常重要的,尤其是在设计复杂的类结构或者涉及单例模式、线程安全初始化等场景时。如果在构造器或初始化块中依赖其他静态或非静态成员,必须确保这些成员在需要之前已经被正确...
Java中的对象初始化流程是编程实践中一个非常重要的概念,它涉及到类加载、静态初始化块、实例初始化块、构造器等多个方面。下面将详细解释这个过程。 首先,对象初始化流程的起点是程序的入口点,即`main`方法。当...
静态初始化块和对象初始化块的执行顺序不同。静态初始化块在类加载时执行,而对象初始化块在创建新对象时执行。它们可以相互配合,以实现更复杂的初始化逻辑。例如,静态初始化块可以用来设置全局配置,而对象初始化...
当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...
这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载阶段**: 在Java程序运行时,JVM会先加载类的字节码文件(.class文件)。这个过程包括加载、...
Java 初始化顺序详解 在 Java 中,变量可以分为两类:类变量(静态变量)和实例变量(对象变量)。类变量是使用 static 关键字修饰的变量,它们属于类,而不是对象。实例变量则是没有使用 static 关键字修饰的变量...
Java对象的初始化顺序是一个关键的编程概念,它涉及到类加载、静态初始化、实例初始化等多个步骤。下面我们将详细探讨这些步骤。 首先,当程序运行并创建一个新的对象时,JVM(Java虚拟机)会按照特定的顺序来初始...
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...
### 类初始化顺序详解 本文将基于给定的Java示例代码深入探讨类初始化的顺序问题。这不仅是Java语言的关键特性之一,在其他面向对象语言(如C++、.NET)中也有相似的概念。理解这一概念有助于程序员更好地掌握面向...