构造函数和实例变量之间的差异



我需要了解构造函数和实例变量。我的问题是构造函数在第 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);
}
}

有时更好。你的第 2 行更像是 setter,例如 constructor.setValue(2);

现在看看:

MyConstructor myConstructor  = new MyConstructor(2,3,5,"This is my cons");
//or
myConstructor.int1 = 2;
myConstructor.int2 = 3;
myConstructor.int3 = 5;
myConstructor.string1 = "This is my cons";

一行中有四行。

此外,我们也不能进入这样的领域,我们应该使用getters和setter。

当你像这样调用构造函数时,你只需在创建对象时为字段赋值。当您使用资源库时,您可以随时访问字段。

为我的英语而战。希望你能理解。

有时您需要确保变量在某个范围内。例如,当你得到字段probabilityRandomObject时,你需要确保概率在0到1之间。第二个原因,有时我们希望确保该字段不能从类外部更改(以防止错误)。因此,我们不能从类外部赋值,所以我们需要使用构造函数(或方法)来完成。第三件事是,有时我们使用相同的参数来计算几个字段(例如。areaside)。还有很多其他原因,例如防止代码重复,使代码更易于阅读或前面提到的封装。

构造函数用于创建类的实例。

如果您不关心值被多个代码位置编辑并影响每个人,那么您可以将value设为static并在没有构造函数的情况下使用它。了解实例变量和静态变量之间的差异非常重要,因为在某些地方,静态是有意义的。

在您的情况下,您将通过调用其构造函数并将其分配给变量constructor来创建类ExampleConstructor的实例。 然后将"实例变量"value更改为 10。 您不必将值传递到构造函数中,您可以有一个空的构造函数并在实例化对象后设置值。

如果你把成员valuestatic,比如static int value;,在没有构造函数的情况下使用它,比如ExampleConstructor.value,它可以工作。 但问题是,如果另一段代码将ExampleConstructor.value设置为 2828,那么该行之后的每一段代码在打印时都会得到 2828ExampleConstructor.value

如果你不希望这种情况发生,那么代码的一个地方就会影响其他任何地方。然后,应将成员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;
}
}

相关内容

  • 没有找到相关文章

最新更新