首先写一个类:
public class Test{
public int x;
public String y;
public static void main(String[] args){
Test test = new Test();
System.out.println("x = "+test.x);
System.out.println("y = "+test.y);
}
}
保存为Test.java
这里并没有声名构造方法,所以它存在着默认的构造方法.
用javac Test.java 命令将其编译,得到Test.class文件!
然后用java Test 命令将其执行,输出的结果为:
x = 0
y = null
然后用javap Test 命令将Test.class文件反编译,得到如下结果:
public class Test extends java.lang.Object{
public int x;
public java.lang.String y;
public Test();
public static void main(java.lang.String[]);
}
可以看到,在类中多出来一个构造方法public Test();
但是这个构造方法并没有方法体,
所以,变量的初始化并不是构造函数执行的!!
而且当我自定义一个构造函数后,默认的构造函数也就消失了,又如何为变量初始化?
变量的初始化是在类被装载的时候自动初始化的!!
分享到:
相关推荐
1. **默认构造函数的隐式初始化**:如果没有提供显式的初始化,编译器会使用默认构造函数来初始化成员变量,这可能不是预期的行为。 2. **const成员变量的强制初始化**:对于声明为const的成员变量,必须在构造函数...
` 在没有自定义构造函数的情况下,编译器不会检查成员变量`val`是否已被初始化,因为默认构造函数不执行初始化。因此,尝试访问`s.val`或`arr[2].val`可能会导致未定义的行为,除非在运行时明确地对它们赋值。 - 当...
构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常用于类级别的初始化。 ### 构造函数与静态块的基本概念 构造函数是一种特殊的方法,它与类同名,并没有返回类型,其主要...
这一切都是在构造函数执行之前,变量的真正初始化是在构造函数中执行。 Java 变量初始化的时机 Java 变量初始化的时机可以分为两类:实例变量初始化和类变量初始化。 实例变量初始化 实例变量初始化可以在三个...
在 C++ 中,子类构造函数的初始化涉及到父类构造函数的调用,否则将无法正确地初始化从父类继承来的成员变量。本文将详细介绍 C++ 子类构造函数初始化及父类构造初始化的使用。 首先,我们需要了解构造函数的基本...
构造函数是C++中的一种特殊函数,它们的主要作用是初始化对象的状态,并将对象的成员变量初始化为合适的值。构造函数的名称与类名相同,没有返回值(包括void),且只能被调用一次,即在对象创建时。构造函数可以有...
在这个特定的场景中,题目要求实现一个计数器类,并且使用默认构造函数进行初始化。下面我们将详细讨论这个主题。 首先,让我们了解什么是构造函数。在C++中,构造函数是一种特殊类型的成员函数,它在创建对象时...
在本实例中,我们将深入探讨四种主要类型的构造函数:默认构造函数、初始化构造函数、复制构造函数和转换构造函数。 首先,我们来讨论默认构造函数。默认构造函数是没有任何参数的构造函数,它通常用来创建一个不带...
1. **默认构造函数**:如果在类定义中没有定义任何构造函数,编译器会提供一个默认构造函数,该函数不接受任何参数并且不执行任何特定初始化操作。默认构造函数适用于那些不需要特别初始化的简单成员变量。 2. **带...
在这个例子中,`a1`的`a`成员变量被声明时初始化为1,然后在默认构造函数中没有进一步的初始化,所以`a1.a`保持为1。对于`a2`,它的`a`在构造函数初始化列表中被赋予3,覆盖了声明时的1。而`a3`在更复杂的构造函数中...
- **特点**:默认构造函数通常用于简单的初始化或者当对象不需要复杂初始化逻辑时。 - **示例**:`Monitor` 类的默认构造函数就是一个例子,它不会对类的属性进行初始化。 ```csharp public class Monitor { ...
类成员初始化的困惑是指在类的成员变量初始化时可能遇到的问题。 11. 构造类成员 构造类成员是指在类中定义的成员变量的初始化。 12. 构造对象的顺序 构造对象的顺序是指在创建对象时,系统自动调用构造函数的...
我们提供了默认构造函数和参数化构造函数,以便在创建对象时根据需要进行初始化。在`Main`方法中,我们演示了如何使用这两种构造函数创建`Person`对象。 总结来说,C#中的构造函数是创建和初始化对象的关键组成部分...
在C++中,如果类没有定义任何构造函数,编译器会自动生成一个默认构造函数,这个默认构造函数不接受任何参数,只分配内存,不初始化成员变量。 创建对象时,构造函数分为两个阶段:显示或隐式初始化阶段和赋值阶段...
C++ 类对像构造时,需要对类成员变量完成初始化赋值操作。使用初始化列表完成这步操作在性能上有益处。...第四行调用了一次默认构造函数……第四行是哪儿来的? 这里需要陈述一下“复制构造函数”和
首先,我们定义了一个名为`A`的基类,它包含一个整型成员变量`x`以及两个构造函数:一个默认构造函数和一个接受整型参数的构造函数。 ```csharp class A { public int x; // 默认构造函数 public A() { x = 0...
如果用户没有定义构造函数,C++编译器会自动生成一个默认的构造函数,这个默认构造函数不做任何事情,即不执行任何初始化操作。 析构函数则与构造函数相反,它在对象生命周期结束(通常是对象超出作用域或delete...
如果需要禁止编译器生成默认构造函数,可以声明一个默认构造函数并将其标记为已删除。 3. 构造函数的执行顺序: 在对象创建过程中,构造函数的调用顺序遵循以下规则: - 首先,按照声明顺序调用基类的构造函数。 ...