Конструктор используется для создания экземпляра вашего класса.
Если вы не заботитесь о том, чтобы значение редактировалось несколькими местами кода и влияло на всех, тогда вы можете сделать value
a static
и использовать его без конструктора.Очень важно понимать различия между переменными экземпляра и статическими переменными, потому что есть места, где статический смысл имеет смысл.
В вашем случае вы создаете экземпляр класса ExampleConstructor
, вызывая его конструктор и присваивая емуэто переменная constructor
.Затем изменив «переменную экземпляра» value
на 10. Вам не нужно передавать значения в конструктор, вы можете иметь пустой конструктор и установить значение после создания экземпляра объекта.
Если вы сделаетечлен value
a static
, например static int value;
, и использование его без конструктора, например ExampleConstructor.value
, все работает.Но проблема в том, что если другой фрагмент кода задает ExampleConstructor.value
, чтобы сказать 2828, тогда каждый фрагмент кода после этой строки получит 2828, когда они напечатают ExampleConstructor.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;
}
}