Java实例变量在两个语句中声明和初始化

ddf*_*fal 1 java variables initialization instance

嗨,我在java中初始化有问题,下面的代码给我编译错误:expected instanceInt = 100; 但我已经宣布了.如果这些东西与堆栈和堆的东西有关,请用简单的术语解释,我是java的新手,我对这些领域没有高级知识


public class Init { 

int instanceInt;  
instanceInt = 100;

   public static void main(String[] args) {

     int localInt;
     u = 9000;
     }

}  
Run Code Online (Sandbox Code Playgroud)

Col*_*ert 8

你不能在班级中间使用语句.它必须与您的声明在一个区块或同一行.


做你想做的通常的方法是:

  • 声明期间的初始化

    public class MyClass{
        private int i = 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    通常,如果要为字段定义默认值,则通常是个好主意.

  • 构造函数块中的初始化

    public class MyClass{
        private int i;
        public MyClass(){
            this.i = 0;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    如果要在字段初始化期间使用某些逻辑(if/loops),可以使用此块.它的问题是你的构造函数会相互调用一个,或者它们都具有基本相同的内容.
    在你的情况下,我认为这是最好的方式.

  • 方法块中的初始化

    public class MyClass{
        private int i;
        public void setI(int i){
            this.i = i;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    它不是真正的初始化,但您可以随时设置您的值.

  • 实例初始化程序块中的初始化

    public class MyClass{
        private int i;
        {
             i = 0;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    当构造函数不够时使用这种方式(请参阅构造函数块的注释),但通常开发人员倾向于避免使用此形式.


资源:

在同一主题上:


奖金:

这段代码是什么?

public class MyClass {
    public MyClass() {
        System.out.println("1 - Constructor with no parameters");
    }

    {
        System.out.println("2 - Initializer block");
    }

    public MyClass(int i) {
        this();
        System.out.println("3 - Constructor with parameters");
    }

    static {
        System.out.println("4 - Static initalizer block");
    }

    public static void main(String... args) {
        System.out.println("5 - Main method");
        new MyClass(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

答案