首先写一个类:
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();
但是这个构造方法并没有方法体,
所以,变量的初始化并不是构造函数执行的!!
而且当我自定义一个构造函数后,默认的构造函数也就消失了,又如何为变量初始化?
变量的初始化是在类被装载的时候自动初始化的!!
分享到:
相关推荐
C++ 类对像构造时,需要对类成员变量完成初始化赋值操作。使用初始化列表完成这步操作在性能上有益处。...第四行调用了一次默认构造函数……第四行是哪儿来的? 这里需要陈述一下“复制构造函数”和
因此,在创建子类对象时,为了初始化从父类中继承来的成员变量,编译器需要调用其父类的构造函数。如果子类的构造函数没有显示地调用父类的构造函数,则默认调用父类的无参构造函数,至于什么事显式调用,在下面会...
C++11,使用委派构造函数,并且快速初始化变量,default关键字重声明默认构造函数,回复pod状态。分析与推荐用法。
在以下三种情况下需要使用初始化成员列表: ...若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。(也就是这三种情况
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给...
编译器提供的默认构造函数的初始化规则: 在栈和堆中的类对象的内置或复合类型成员变量将为脏数据; 在全局变量区的类对象的内置或复合类型成员变量初始化为0; 类对象成员将调用默认的构造函数来初始化; #...
如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。 构造原则如下: 1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。 ...
}上面的类X没有定义构造函数,仅仅有一个int i。 下面为其汇编程序: 代码如下:; 7 : int main() { push ebp;ebp为一个寄存器,总是指向一个函数调用堆栈的栈底,作为基址,用偏移量来访问该调用栈上的变量,但...
定义一个圆类circle,它有一个变量radius(半径)。从键盘输入数据,通过构造函数的参数传递给radius,编程计算并输出圆的的周长和面积。但是,必须确保输入的数据不为复数。
为了能够在不提供初始化值的情况下也能对对象初始化,构造函数中应该包含默认的值。构造函数还应该以最简分数的形式存储数据,即2/4应该在对象中存储成分子为1、分母为2的形式。公有成员函数应该有以下功能: 两个...
编写一个默认的构造函数,使用值100 初始化该成员变量(如果用户开户时的钱少于100,则不能开户;也就是不能实例化该类。)。创建一个参数化构造函数,它可以传递任何大于100的整数以初始化saving变量。
我们通过tf.Variable构造一个variable添加进图中,Variable()构造函数需要变量的初始值(是一个任意类型、任意形状的tensor),这个初始值指定variable的类型和形状。通过Variable()构造函数后,此variable的类型和...
每个类都必须创建一个构造函数,没有的话,就不能创建对象,如果没有定义构造函数,编译器会默认提供不带任何参数的构造函数,他只负责创建对象,不会进行任何的初始化工作。只要一个类定义了一个构造函数,不管这个...
构造函数的作用是对对象本身做初始化工作,也就是给用户提供初始化类中成员变量的一种方式,在类对象有虚表的情况下,构造函数还对虚表进行初始化。 另外,我说:“C++又规定,如果一个类没有提供任何的构造函数,则...
第一部分:声明、初始化、和作用域。 定义类、内部类、静态类、接口、枚举。 正确使用包语句和导入语句,包括静态导入。... 为类及层次类编写构造函数,知道默认构造函数的行为,实例化类及内部类
10.3.5 再谈默认构造函数 10.4.析构函数和delete运算符 10.4..1 默认析构函数 10.4.2 调用构造函数进行类型转换 10.5 浅层复制构造函数 10.6 深层复制构造函数 第11章 运算符重载 11.1 运算符重载 11.2 在成员函数...
10.3.5 再谈默认构造函数 10.4.析构函数和delete运算符 10.4..1 默认析构函数 10.4.2 调用构造函数进行类型转换 10.5 浅层复制构造函数 10.6 深层复制构造函数 第11章 运算符重载 11.1 运算符重载 11.2 在...
上面例子中,第一次调用show()函数时,让编译器自动提供函数原型中指定的所有默认参数,第二次调用提供了第一个参数,而让编译器提供剩下的两个,第三次调用则提供了前面两个参数,编译器只需提供最后一个,最后一...
2)末尾的()意味着,在对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造函数。 3) 左边的 “Vehicle veh1”创建了一个Vehicle类...