Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调用java中的默认构造函数?_Java_Default Constructor - Fatal编程技术网

如何调用java中的默认构造函数?

如何调用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

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,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) 声明至少一个构造函数,可防止创建隐式构造函数