【发布时间】:2019-10-16 14:57:42
【问题描述】:
我已经声明了一个静态变量,并通过在 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
【问题讨论】:
-
但是为什么实例不能修改静态值??
-
为什么你认为你不能从类的实例中访问静态字段?
-
“为什么这没有给我运行时间或编译时间错误?”。为什么要这样?
-
static和final是两个独立的概念。你到底对什么感到困惑?
标签: java static-variables