【问题标题】:Why we can't declare variables in class constructor in java?为什么我们不能在java的类构造函数中声明变量?
【发布时间】:2021-06-11 09:13:56
【问题描述】:

如果构造函数是在创建对象时隐式调用的函数,那么我们应该在构造函数中声明变量,但它会报错。

class A{
    
    public A(){
        int a =5;
    }
}


public class assignment2 {
    public static void main(String[] args) {
       A obj = new A();
       System.out.println(obj.a);
    }
}

错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        a cannot be resolved or is not a field

        at ass2.main(ass2.java:14)

【问题讨论】:

  • 当然可以。它只存在于该构造函数中,而不存在于它之外。

标签: java oop constructor


【解决方案1】:

在构造函数int a(在您的情况下)中声明变量仍将在构造函数中本地工作。 a 变量将在构造函数完成他的工作时被销毁。所以你不能从其他地方访问这个变量。

创建一个字段并使您的代码工作。在构造函数之外进行声明。然后你可以在构造函数中初始化它..

【讨论】:

    【解决方案2】:

    它只是一个成员变量,不属于obj,你应该将a声明为局部变量:

    public class Test{
        public int a = 5;
        public Test() {
            
        }
    }
    
    

    【讨论】:

      【解决方案3】:

      变量int a 不是一个字段,但正如你所说,变量和构造函数将完成后立即无法访问它,并且绝对不是obj.a

      如果你想以这种方式使用它,你应该将它的定义移到构造函数之外(所以基本上创建 field a

      What is the difference between field, variable, attribute, and property in Java POJOs?

      【讨论】:

        【解决方案4】:
        class A{
            public int a;
        
            public A(){
                this.a =5;
            }
        }
        

        有关声明构造函数的更多信息,请参阅:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-09
          • 2010-10-15
          • 2021-12-21
          • 2012-11-23
          相关资源
          最近更新 更多