我需要了解构造函数和实例变量。我的问题是构造函数是在第1行中初始化的,而我可以通过在第2行中创建实例变量来实现。为什么我需要使用构造函数来初始化值,而我可以使用实例变量来初始化值?
class ExampleConstructor{
int value;
ExampleConstructor(int value){
this.value=value;
}
}
public class Main{
public static void main(String[] args){
ExampleConstructor constructor=new ExampleConstructor(100);/*line 1*/
System.out.println(constructor.value);
constructor.value=10;/*line 2*/
System.out.println(constructor.value);
}
}
答案 0 :(得分:1)
也许看看这个网站。
我发现这很有用。
答案 1 :(得分:0)
有时候会更好。您的第2行更像是setter之类的builder.setValue(2);
现在来看:
import numpy as np
df['profitable'] = np.where(df['revenue'] > df['budget'], 1, 0)
一行中有四行。
我们也无法访问此类字段,我们应该使用getter和setter。
当您像这样调用构造函数时,只需在创建对象时将值分配给该字段即可。使用设置器时,您可以随时访问字段。
抱歉我的英语。希望你能理解。
答案 2 :(得分:0)
有时您需要确保变量在一定范围内。例如,当您将RandomObject
与字段probability
一起使用时,您需要确保该概率介于0和1之间。第二个原因,有时我们想确保该字段不能被更改(以防止错误)。从课堂之外。因此,我们不能从类外部分配值,因此我们需要使用构造函数(或方法)进行赋值。第三件事是有时我们使用相同的参数来计算几个字段(例如area
和side
)。还有很多其他原因,例如,防止代码重复,使代码更易于阅读或提及先前的封装。
答案 3 :(得分:0)
构造函数用于创建类的实例。
如果您不关心值会被多个代码所编辑并影响每个人,那么可以将value
设为static
,并在不使用构造函数的情况下使用它。了解实例变量和静态变量之间的差异非常重要,因为在某些地方静态是有意义的。
在您的情况下,您正在通过调用类ExampleConstructor
的构造函数并将其分配给变量constructor
来创建实例。然后将“实例变量” value
更改为10。您不必将值传递到构造函数中,可以有一个空的构造函数,并在实例化对象后设置该值。
如果将成员value
设为static
(例如static int value;
),并在没有构造函数(例如ExampleConstructor.value
)的情况下使用它,则它会起作用。但是问题是,如果另一段代码将ExampleConstructor.value
设置为2828,则该行之后的每一段代码在打印ExampleConstructor.value
时都会得到2828。
如果您不希望发生这种情况,那么更改一个地方的代码会影响到其他地方。然后,应将成员value
定义为实例变量,并使用构造函数实例化对象并使用实例变量。
IMO,您对类和变量的命名很容易引起读者的困惑。
检查下面的代码块,以获得更好的解释。
public class HelloWorld{
public static void main(String []args){
System.out.println("Printing static value from TestClass.");
// Observe that the TestClass is not being instantiated to operate on staticValue;
System.out.println("TestClass.staticValue: " + TestClass.staticValue);
changeStaticValue();
System.out.println("\nPrinting static value from TestClass after editing.");
System.out.println("TestClass.staticValue: " + TestClass.staticValue);
TestClass instance1 = new TestClass();
TestClass instance2 = new TestClass(123);
System.out.println("\nPrinting instance value of both instances right after instantiation.");
System.out.println("instance1.instanceValue: " + instance1.instanceValue);
System.out.println("instance2.instanceValue: " + instance2.instanceValue);
instance1.instanceValue = 888;
instance2.instanceValue = 999;
System.out.println("\nPrinting instance values after editing.");
System.out.println("instance1.instanceValue: " + instance1.instanceValue);
System.out.println("instance2.instanceValue: " + instance2.instanceValue);
}
private static void changeStaticValue()
{
TestClass.staticValue = 11111;
}
}
class TestClass
{
public static int staticValue;
public int instanceValue;
public TestClass()
{
}
public TestClass(int instVal)
{
this.instanceValue = instVal;
}
}