[英]Not figuring out how the static variable is working in this case
如果这个问题很简单,我想事先了解一下静态变量是如何工作的。
我有一个Employee类,它具有2个公共静态变量,其类型均为String且初始值为null。
public class Employee {
public static String FIRST_NAME = null;
public static String LAST_NAME = null;
}
我还有另一个Job类,它有1个类型为Employee且初始值为null的公共静态变量。
public class Job {
public static Employee EMPLOYEE = null;
}
我创建一个单独的类以打印出初始值。
public class Testing {
public static void main(String[] args) {
System.out.println("Employee.FIRST_NAME=" + Employee.FIRST_NAME);
System.out.println("Employee.LAST_NAME=" + Employee.LAST_NAME);
System.out.println("Job.EMPLOYEE=" + Job.EMPLOYEE);
System.out.println("Job.EMPLOYEE.FIRST_NAME=" + Job.EMPLOYEE.FIRST_NAME);
System.out.println("Job.EMPLOYEE.LAST_NAME=" + Job.EMPLOYEE.LAST_NAME);
}
}
这是输出:
Employee.FIRST_NAME =空
Employee.LAST_NAME =空
Job.EMPLOYEE =空
Job.Employee.FIRST_NAME =空
Job.Employee.LAST_NAME =空
然后,我将值分配给Employee类的静态变量。 然后我再次打印出两个类的所有值。
public class Testing {
public static void main(String[] args) {
Employee.FIRST_NAME = "John";
Employee.LAST_NAME = "Doe";
System.out.println("Employee.FIRST_NAME=" + Employee.FIRST_NAME);
System.out.println("Employee.LAST_NAME=" + Employee.LAST_NAME);
System.out.println("Job.EMPLOYEE=" + Job.EMPLOYEE);
System.out.println("Job.EMPLOYEE.FIRST_NAME=" + Job.EMPLOYEE.FIRST_NAME);
System.out.println("Job.EMPLOYEE.LAST_NAME=" + Job.EMPLOYEE.LAST_NAME);
}
}
这是输出:
Employee.FIRST_NAME =约翰
Employee.LAST_NAME = Doe
Job.EMPLOYEE =空
Job.Employee.FIRST_NAME =约翰
Job.Employee.LAST_NAME = Doe
为什么Job.EMPLOYEE
为空?
感谢您阅读我的问题。
我希望代码只是一个例子。 如果不是这样:您不应以这种方式使用静态变量,因为它们对于同一运行时中的所有类实例都是全局的(实际上,对于所有类/子类实例而言,它是一个变量)。 Job.EMPLOYEE仍为null,因为您尚未为其分配值。
您的类中的变量不应为静态。 static表示该类的所有实例只有一个值。 即每个实例将具有相同的值。
您应该使变量为非静态(只需删除static关键字)。
您还应该将它们设为私有,并为它们提供访问器方法,例如getter和setter。 您还可以创建一个接受名字和姓氏的构造函数,这将为您创建该类的对象。
例如:
public class Employee {
private String firstName = null;
private String lastName = null;
public Employee(String firstName, String lastName)
{
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getLastName()
{
return lastName ;
}
public void setLastName(String lastName)
{
this.lastName = lastName ;
}
}
然后,您可以创建Employee对象,如下所示:
Employee employee1 = new Employee("Joe", "Bloggs");
Employee employee2 = new Employee("John", "Smith");
您可以像这样访问对象的变量:
System.out.println("Employee 1 first name: " + employee1.getFirstName());
System.out.println("Employee 1 last name: " + employee1.getLastName());
您可以像这样编辑对象的变量:
employee1.setFirstName("Adam");
然后对Job类执行相同的操作,并使用Job类的setEmployee方法将Job对象的Employee变量设置为等于您创建的Employee对象。
静态变量在您首次访问代码中的类时被初始化。 流程如下:
-Main方法运行并从第一行开始
-员工类设置了名字和姓氏变量
-第一和第二条打印行语句访问这些变量
-未设置employee变量,因此该值为null
-Job.EMPLOYEE为null,但是通过调用静态变量,您正在调用Employee.FIRST_NAME,该变量是静态的,因此它返回Employee类上的静态变量(不建议这样做,因为很多其他人都非常清楚地指出了这一点。)您可能已经期望了NullReferenceException ,但是您要进行的调用是在类上,而不是在实例上。
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.