gpt4 book ai didi

java - 当我们使用 "this"调用另一个构造函数时,为什么要在实例变量中使用 static ?

转载 作者:行者123 更新时间:2023-12-01 15:53:14 25 4
gpt4 key购买 nike

我对下面的代码没什么困惑。

class TestConstructor1{
static int num,num1;
TestConstructor1(int n)
{
this(num,num1);
num=n;
System.out.println("One argument constructor");
System.out.println("Value are "+num+" and "+num1);
}
TestConstructor1(int l,int m)
{
num=l;
num1=m;
System.out.println("Two argument constructor");
System.out.println("Value are "+num+" and "+num1);
}
public static void main(String args[])
{
TestConstructor1 ts=new TestConstructor1(10);

}
};

构造函数的调用方式是它必须调用的方式,即它首先调用两个参数构造函数,然后调用它自己的构造函数,但我有兴趣知道为什么我们必须在实例变量之前使用 static 以及为什么我们不能在没有实例变量的情况下使用实例变量声明为静态。

我正在等待您的回复。谢谢...

最佳答案

您对如何链接构造函数有点困惑。这样做:

private int num,num1; // instance values, initialized by constructors

TestConstructor1(int n)
{
this(n,0);
System.out.println("One argument constructor");
System.out.println("Value are "+num+" and "+num1);
}

TestConstructor1(int n,int m)
{
super(); // this call is implicit and does not explicitly need to be in the code

num=n;
num1=m;
System.out.println("Two argument constructor");
System.out.println("Value are "+num+" and "+num1);
}

请注意,第一个函数调用第二个函数,传入给定的 n 参数以及第二个参数的合适默认值。

<小时/>

至于将实例变量传递给链式构造函数...这是不可能的,因为访问实例变量隐式是对 this 对象的引用,在调用 之前不允许这样做super 构造函数完成后,您将无法调用另一个构造函数。

但是将实例变量传递给该对象的构造函数的愿望是不合逻辑的......本质上你是在说“请用它自己初始化这个对象”......在该对象尚未初始化的时候。这是一个先有鸡还是先有蛋的问题。您不能使用对象的值来初始化这些值。

关于java - 当我们使用 "this"调用另一个构造函数时,为什么要在实例变量中使用 static ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5576149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com