Java 类中的哪些变量构造函数可以访问?
Posted
技术标签:
【中文标题】Java 类中的哪些变量构造函数可以访问?【英文标题】:Which variables constructor can access in Java class? 【发布时间】:2016-02-20 23:19:30 【问题描述】:我正在研究 Java (OOP) 中的构造函数,但不知道构造函数可以访问什么类型的变量?下列哪些变量可以被构造函数访问?
-
任何方法定义的局部变量
私有实例变量
公共实例变量
一个静态变量
我创建了以下示例来详细说明我的问题:
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.类中声明的静态变量)?
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?
我用这个访问了私有和公共实例变量。引用,但 LASTNAME
和 id
变量给我错误(创建一个局部变量)。
【问题讨论】:
我认为您应该尝试编写一个构造函数,看看是否可以在其中使用这些变量。 作用域是作用域,构造函数只是另一种方法,没有特殊作用域 你的问题没有意义。如果静态变量和实例变量不能被构造函数访问,和/或它不能有局部变量,那么很难看出构造函数的实际用途,你不觉得吗?你真的考虑过吗? @EJP 感谢您的评论。这意味着,构造函数可以访问提到的所有四个变量。我之前对任何方法定义的局部变量都有疑问。 @JarrodRoberson 我修改了问题。 【参考方案1】:局部变量只能被声明局部变量的范围内的代码访问(即...
)。从方法外部访问它们是没有意义的,因为局部变量的存在与特定的方法调用相关:虽然该方法当前没有被执行,但它的局部变量不会根本存在;如果方法以递归方式调用自身或从多个线程执行,则每个方法调用都有自己独立的一组局部变量。
对于您的其他三个问题:是的,构造函数(和方法)总是可以访问任何实例和静态变量,如果它们在同一个类中声明。如果他们在不同的类,那么更复杂的access rules 进来玩。
如果您在分配给LASTNAME
的示例中收到错误,那是因为您将其声明为final
,这意味着该变量只能分配一次,并且由于它的值已经分配,您不能再次分配给它。但它仍然是“可访问的”,因为您可以读取它的值。或者将它设为static
非final
,然后你就可以读取并分配给它。
【讨论】:
以上是关于Java 类中的哪些变量构造函数可以访问?的主要内容,如果未能解决你的问题,请参考以下文章
如何限制开发人员使用反射访问Java中的私有方法和构造函数?