如何调用java中的默认构造函数?
O/p为:如何调用java中的默认构造函数?,java,default-constructor,Java,Default Constructor,O/p为:i的值为1 ch的值为 我的问题是为什么ch值没有初始化?? 而如果另一种情况O/p为:i的值为0,ch的值为T 为什么在这种情况下我会被初始化。?默认情况下,Java将int初始化为0,将char初始化为null。因此,System.out.println将使ch看起来好像没有输出,但技术上它已经初始化。在第一种情况下,第二个构造函数不运行,因为Hello是通过传入int参数创建的,该参数调用第一个构造函数,因此ch没有设置为任何值。注释代码的行为方式相同,但由于i默认初始化为0,S
i的值为1 ch的值为
我的问题是为什么ch值没有初始化??
而如果另一种情况O/p为:i的值为0,ch的值为T
为什么在这种情况下我会被初始化。?默认情况下,Java将int初始化为0,将char初始化为null。因此,System.out.println将使ch看起来好像没有输出,但技术上它已经初始化。在第一种情况下,第二个构造函数不运行,因为Hello是通过传入int参数创建的,该参数调用第一个构造函数,因此ch没有设置为任何值。注释代码的行为方式相同,但由于i默认初始化为0,System.out.println显示i的
值为0 ch的值为T
Java默认将int初始化为0,将char初始化为null字符。因此,System.out.println将使ch看起来好像没有输出,但技术上它已经初始化。在第一种情况下,第二个构造函数不运行,因为Hello是通过传入int参数创建的,该参数调用第一个构造函数,因此ch没有设置为任何值。注释代码的行为方式相同,但由于默认情况下i初始化为0,System.out.println显示Java中i的值为0 ch的值为T
,int原语类型的默认值为0,而默认字符为'\u0000',为空字符。这就是为什么对于ch的值,您无法从int构造函数中获得任何可识别的内容。在Java中,int基元类型的默认值是0,而默认字符是'\u0000',空字符。这就是为什么对于ch的值,你不能从int构造函数中得到任何可识别的东西。你的类有两个构造函数,一个接受一个int
,另一个接受一个char
。无论使用哪个变量初始化类的实例,另一个变量都将使用它的默认值
- 键入
默认值为int
0
- 键入
默认值为char
,即\u0000
字符,如前所述null
public class Hello {
int i;
char ch;
Hello(int x){
i=x;
}
Hello(char c){
ch=c;
}
public static void main(String[] args) {
Hello h=new Hello(1);
System.out.printf("value of i is %d"+"value of ch is %c",h.i,h.ch);
//Hello h=new Hello('T');
//System.out.printf("value of i is %d"+"value of ch is %c",h.i,h.ch);
}
您的结果是:
Hello h=new Hello(1);
打电话时:
h.i = 1;
h.ch = '\u0000';
有效地导致:
Hello h=new Hello('T');
类有两个构造函数,一个接受
int
,另一个接受char
。无论使用哪个变量初始化类的实例,另一个变量都将使用它的默认值
- 键入
默认值为int
0
- 键入
默认值为char
,即\u0000
字符,如前所述null
public class Hello {
int i;
char ch;
Hello(int x){
i=x;
}
Hello(char c){
ch=c;
}
public static void main(String[] args) {
Hello h=new Hello(1);
System.out.printf("value of i is %d"+"value of ch is %c",h.i,h.ch);
//Hello h=new Hello('T');
//System.out.printf("value of i is %d"+"value of ch is %c",h.i,h.ch);
}
您的结果是:
Hello h=new Hello(1);
打电话时:
h.i = 1;
h.ch = '\u0000';
有效地导致:
Hello h=new Hello('T');
根据,int的默认值是0,char的默认值是'\u0000'(只有null),这就是您看到的。根据int的默认值是0,char的默认值是'\u0000'(只有null),这就是您看到的。ch不是默认初始化为null的,它是一个原语,正如其他答案所说的那样\u0000@Daniel是的,谢谢。我正在编辑链接讨论这一点,但你抢先了我一步。:)ch不是默认初始化为null的,它是一个原语,正如其他答案所说的那样\u0000@Daniel是的,谢谢。我正在编辑链接讨论这一点,但你抢先了我一步。:)谢谢你的回答。我还有一个疑问,那就是为什么需要显式地提到默认构造函数?在上面的代码中,我试图编写Hello h=new Hello();没有明确提到默认值,但返回了编译器错误。为什么?应该有助于回答您的问题。这里要强调的一点是1)如果一个类不包含构造函数声明,则隐式声明一个没有形式参数和NOTHROWS子句的默认构造函数。2) 声明至少一个构造函数,会阻止创建隐式构造函数。我还有一个疑问,那就是为什么需要显式地提到默认构造函数?在上面的代码中,我试图编写Hello h=new Hello();没有明确提到默认值,但返回了编译器错误。为什么?应该有助于回答您的问题。这里要强调的一点是1)如果一个类不包含构造函数声明,则隐式声明一个没有形式参数和NOTHROWS子句的默认构造函数。2) 声明至少一个构造函数,可防止创建隐式构造函数