【问题标题】:Which variables constructor can access in Java class?Java 类中的哪些变量构造函数可以访问?
【发布时间】:2016-02-20 23:19:30
【问题描述】:

我正在研究 Java (OOP) 中的构造函数,但不知道构造函数可以访问什么类型的变量?下列哪些变量可以被构造函数访问?

  1. 任何方法定义的局部变量
  2. 私有实例变量
  3. 公共实例变量
  4. 一个静态变量

我创建了以下示例来详细说明我的问题:

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?
}

我用这个访问了私有和公共实例变量。引用,但 LASTNAMEid 变量给我错误(创建一个局部变量)。

【问题讨论】:

  • 我认为您应该尝试编写一个构造函数,看看是否可以在其中使用这些变量。
  • 作用域是作用域,构造函数只是另一种方法,没有特殊作用域
  • 你的问题没有意义。如果静态变量和实例变量不能被构造函数访问,和/或它不能有局部变量,那么很难看出构造函数的实际用途,你不觉得吗?你真的考虑过吗?
  • @EJP 感谢您的评论。这意味着,构造函数可以访问提到的所有四个变量。我之前对任何方法定义的局部变量都有疑问。
  • @JarrodRoberson 我修改了问题。

标签: java oop constructor access-modifiers


【解决方案1】:

局部变量只能被声明局部变量的范围内的代码访问(即{...})。从方法外部访问它们是没有意义的,因为局部变量的存在与特定的方法调用相关:虽然该方法当前没有被执行,但它的局部变量不会根本存在;如果方法以递归方式调用自身或从多个线程执行,则每个方法调用都有自己独立的一组局部变量。

对于您的其他三个问题:是的,构造函数(和方法)总是可以访问任何实例和静态变量,如果它们在同一个类中声明。如果他们在不同的类,那么更复杂的access rules 进来玩。

如果您在分配给LASTNAME 的示例中收到错误,那是因为您将其声明为final,这意味着该变量只能分配一次,并且由于它的值已经分配,​​您不能再次分配给它。但它仍然是“可访问的”,因为您可以读取它的值。或者将它设为staticfinal,然后你就可以读取并分配给它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多