`
dxm1986
  • 浏览: 429562 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

变量初始化不是默认的构造函数执行的

    博客分类:
  • java
阅读更多
首先写一个类:
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++ 类对像构造时,需要对类成员变量完成初始化赋值操作。使用初始化列表完成这步操作在性能上有益处。...第四行调用了一次默认构造函数……第四行是哪儿来的?  这里需要陈述一下“复制构造函数”和

    c++ 子类构造函数初始化及父类构造初始化的使用

    因此,在创建子类对象时,为了初始化从父类中继承来的成员变量,编译器需要调用其父类的构造函数。如果子类的构造函数没有显示地调用父类的构造函数,则默认调用父类的无参构造函数,至于什么事显式调用,在下面会...

    C++ primer 第十六章 模板句柄 C++11,使用委派构造函数,

    C++11,使用委派构造函数,并且快速初始化变量,default关键字重声明默认构造函数,回复pod状态。分析与推荐用法。

    C++初始化函数列表详细解析

    在以下三种情况下需要使用初始化成员列表: ...若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。(也就是这三种情况

    详解C++ 拷贝构造函数

    拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给...

    C++ 类的构造函数详解及实例

    编译器提供的默认构造函数的初始化规则: 在栈和堆中的类对象的内置或复合类型成员变量将为脏数据; 在全局变量区的类对象的内置或复合类型成员变量初始化为0; 类对象成员将调用默认的构造函数来初始化; #...

    在C++中子类继承和调用父类的构造函数方法

     如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。  构造原则如下:  1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。 ...

    从汇编看c++中默认构造函数的使用分析

    }上面的类X没有定义构造函数,仅仅有一个int i。 下面为其汇编程序: 代码如下:; 7 : int main() {  push ebp;ebp为一个寄存器,总是指向一个函数调用堆栈的栈底,作为基址,用偏移量来访问该调用栈上的变量,但...

    定义一个圆类circle,它有一个变量radius(半径)。从键盘输入数据,通过构造函数的参数传递给radius,编程计算并输出圆的的周长和面积。但是,必须确保输入的数据不为复数。

    定义一个圆类circle,它有一个变量radius(半径)。从键盘输入数据,通过构造函数的参数传递给radius,编程计算并输出圆的的周长和面积。但是,必须确保输入的数据不为复数。

    面向对象课程设计——分数类的设计与实现

    为了能够在不提供初始化值的情况下也能对对象初始化,构造函数中应该包含默认的值。构造函数还应该以最简分数的形式存储数据,即2/4应该在对象中存储成分子为1、分母为2的形式。公有成员函数应该有以下功能: 两个...

    编写一个程序,用来模拟银行帐户的基本操作,如帐户开户的话,则最低存款额为100、存取现金操作以及在使用任意修改余额后都可以随时查看帐户余额

    编写一个默认的构造函数,使用值100 初始化该成员变量(如果用户开户时的钱少于100,则不能开户;也就是不能实例化该类。)。创建一个参数化构造函数,它可以传递任何大于100的整数以初始化saving变量。

    tensorflow之变量初始化(tf.Variable)使用详解

    我们通过tf.Variable构造一个variable添加进图中,Variable()构造函数需要变量的初始值(是一个任意类型、任意形状的tensor),这个初始值指定variable的类型和形状。通过Variable()构造函数后,此variable的类型和...

    mfc c++视频笔记

    每个类都必须创建一个构造函数,没有的话,就不能创建对象,如果没有定义构造函数,编译器会默认提供不带任何参数的构造函数,他只负责创建对象,不会进行任何的初始化工作。只要一个类定义了一个构造函数,不管这个...

    VC++深入详解源码

    构造函数的作用是对对象本身做初始化工作,也就是给用户提供初始化类中成员变量的一种方式,在类对象有虚表的情况下,构造函数还对虚表进行初始化。 另外,我说:“C++又规定,如果一个类没有提供任何的构造函数,则...

    JAVA资格认证:SCJP310-055中文

    第一部分:声明、初始化、和作用域。  定义类、内部类、静态类、接口、枚举。  正确使用包语句和导入语句,包括静态导入。... 为类及层次类编写构造函数,知道默认构造函数的行为,实例化类及内部类

    零起点学通C++多媒体范例教学代码

    10.3.5 再谈默认构造函数 10.4.析构函数和delete运算符 10.4..1 默认析构函数 10.4.2 调用构造函数进行类型转换 10.5 浅层复制构造函数 10.6 深层复制构造函数 第11章 运算符重载 11.1 运算符重载 11.2 在成员函数...

    零起点学通C++学习_多媒体范例教学代码

    10.3.5 再谈默认构造函数 10.4.析构函数和delete运算符 10.4..1 默认析构函数 10.4.2 调用构造函数进行类型转换 10.5 浅层复制构造函数 10.6 深层复制构造函数 第11章 运算符重载 11.1 运算符重载 11.2 在...

    新手学习C++入门资料

    上面例子中,第一次调用show()函数时,让编译器自动提供函数原型中指定的所有默认参数,第二次调用提供了第一个参数,而让编译器提供剩下的两个,第三次调用则提供了前面两个参数,编译器只需提供最后一个,最后一...

    java的对象引用与对象的区别、多态性理解、向上转型和向下转型、栈和堆等综合型的知识.docx

    2)末尾的()意味着,在对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造函数。 3) 左边的 “Vehicle veh1”创建了一个Vehicle类...

Global site tag (gtag.js) - Google Analytics