我已经声明了一个静态变量,并且正在通过在每次实例化对象时都会调用的Initializer块中调用它来通过非静态方法更改其值。为什么这不给我运行时间或编译时间错误?

public class FinalKeyWord {

    final int age;
    static int name;

    {
        ran();
        displayName();
    }


    public FinalKeyWord() {
        this.age = 10;
    }

    public FinalKeyWord(int a){
        this.age = a;
    }

    void ran(){
        Random r = new Random();
        int rand = r.nextInt(6);
        System.out.println(rand);
        name = rand;
    }

    public void displayAge() {
        System.out.println("This is final " + age);
    }

    public void displayName() {
        System.out.println("This is static " + name);
    }

    public static void main(String[] args) {

        FinalKeyWord a = new FinalKeyWord();
        //a.displayAge();
        //a.displayName();
        FinalKeyWord a2 = new FinalKeyWord(35);
        //a2.displayName();

    }

}


输出:

    This is static 2 \n
    This is is static 3

最佳答案

静态变量并不意味着您以后不能更改其值,这意味着它在内存中为该类的所有实例分配了一次,因此,无论何时创建新对象,它都将指向该对象中的同一块此变量的内存不同于普通变量或实例变量,在普通变量或实例变量中,每当创建此类的新对象时,都会在该变量中保留一个新的块。

关于java - 这不是违反静态变量的规则吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58416289/

10-12 04:16
查看更多