Java class 中构造函数可以访问哪些变量?
Which variables constructor can access in Java class?
我正在研究 Java (OOP) 中的构造函数,但无法弄清楚构造函数可以访问什么类型的变量?构造函数可以访问以下哪些变量?
- 任意方法定义的局部变量
- 私有实例变量
- 一个public实例变量
- 静态变量
我创建了以下示例来详细说明我的问题:
public class constructorAccess {
public int marks; // 3. Public instance variable
private String firstName; // 2. Private instance variable
static final String LASTNAME = "Smith"; // 4. Static variable
public static void studentId(){
int id; // 1. Local variable inside method
id = 5;
System.out.println(id);
}
public constructorAccess(int marks, String firstName) {
this.marks = marks;
this.firstName = firstName;
}
}
是否可以从 constructorAccess 访问 id
(1. studentId 方法中声明的局部变量)和 LASTNAME
(4. class 中声明的静态变量)?
public constructorAccess(int marks, String firstName) {
this.marks = marks;
this.firstName = firstName;
// How can I use id variable here from studentId method?
// How can I use LASTNAME static variable here?
}
我用它访问了私有和 public 实例变量。参考,但 LASTNAME
和 id
变量给我错误(创建局部变量)。
局部变量只能由声明局部变量的范围内的代码访问(即 {
...}
对)。从方法外部访问它们是没有意义的,因为局部变量的存在与特定方法相关call:当方法当前未被执行时,其局部变量根本不存在;如果该方法递归调用自身或从多个线程执行,则每个方法调用都有自己独立的局部变量集。
关于您的其他三个问题:是的,如果构造函数(和方法)在同一个 class 中声明,则它们始终可以访问任何实例和静态变量。如果它们在不同的 classes 中,那么更复杂的 access rules 进来玩。
如果您在分配给 LASTNAME
的示例中收到错误,那是因为您将它声明为 final
,这意味着变量只能被分配一次,因为它的值已经已分配,您不能再次分配给它。但它仍然是 "accessible" 因为你可以 读取 它的值。或者将其设为 static
非 final
,然后您既可以读取又可以分配给它。
我正在研究 Java (OOP) 中的构造函数,但无法弄清楚构造函数可以访问什么类型的变量?构造函数可以访问以下哪些变量?
- 任意方法定义的局部变量
- 私有实例变量
- 一个public实例变量
- 静态变量
我创建了以下示例来详细说明我的问题:
public class constructorAccess {
public int marks; // 3. Public instance variable
private String firstName; // 2. Private instance variable
static final String LASTNAME = "Smith"; // 4. Static variable
public static void studentId(){
int id; // 1. Local variable inside method
id = 5;
System.out.println(id);
}
public constructorAccess(int marks, String firstName) {
this.marks = marks;
this.firstName = firstName;
}
}
是否可以从 constructorAccess 访问 id
(1. studentId 方法中声明的局部变量)和 LASTNAME
(4. class 中声明的静态变量)?
public constructorAccess(int marks, String firstName) {
this.marks = marks;
this.firstName = firstName;
// How can I use id variable here from studentId method?
// How can I use LASTNAME static variable here?
}
我用它访问了私有和 public 实例变量。参考,但 LASTNAME
和 id
变量给我错误(创建局部变量)。
局部变量只能由声明局部变量的范围内的代码访问(即 {
...}
对)。从方法外部访问它们是没有意义的,因为局部变量的存在与特定方法相关call:当方法当前未被执行时,其局部变量根本不存在;如果该方法递归调用自身或从多个线程执行,则每个方法调用都有自己独立的局部变量集。
关于您的其他三个问题:是的,如果构造函数(和方法)在同一个 class 中声明,则它们始终可以访问任何实例和静态变量。如果它们在不同的 classes 中,那么更复杂的 access rules 进来玩。
如果您在分配给 LASTNAME
的示例中收到错误,那是因为您将它声明为 final
,这意味着变量只能被分配一次,因为它的值已经已分配,您不能再次分配给它。但它仍然是 "accessible" 因为你可以 读取 它的值。或者将其设为 static
非 final
,然后您既可以读取又可以分配给它。