这是否违反了静态变量的规则?

问题描述 投票:0回答:1

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

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 static-variables
1个回答
0
投票

来自Java Documentation/Tutorials

实例方法可以直接访问类变量和类方法。因此,这完全合法,

public class FinalKeyWord {

    static int a = 5;

    void change() {
        a= 10;
    }

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

并且将打印,

5
10
© www.soinside.com 2019 - 2024. All rights reserved.