java编程 为什么static final常量量能被修改?

请问这段代码为什么构造方法里嘚string会报错而去掉string定义时的static和final中的任何一个都可以通过?static和final为什么不能同时存在还请指点

看一下final的解释,有很多不错的解释
是开辟了2個内存空间,在栈中的string引用在堆中的final其中string是始终指向堆中的final这个地址的引用,不能改变但是堆中的final却可以改变。

1.首先认识一下final, 一个final修飾的叫”终态”, 而这种终态很特殊, 它指的是:”当这个变量被赋值之后成为终态”. 那么,当一个被赋值之后的final修饰变量, 将不可再被赋新值. (先理解)

2.而static表示静态变量, 要知道JAVA如何为一个类创建内存空间–类有占内存,类产生的实例(对象)占内存,方法有占内存,变量有占内存, 当static修饰时, 这个变量會在类分配内存时就被分配内存了, 所以可以不用产生对象就使用静态变量.

3.试试. 首先,你只使用final修饰你的string, 你会发现不会报错, 因为这是一个”还沒有被赋值的非静态的终态变量(在类分配内存时不会分配内存)接下来改一下,写:private final String string = “sss”; 你会发现报错了,原因自己想.
接下来, 看你发出来的代码, 又被static修饰,又被final修饰,首先它是一个静态变量, 那么在类分配时就会分配内存, 实际上这个String就被初始化了,既然初始化了, 那么也就有值了, 而一个终态被賦值变量将不能再被赋值, 那么自然就报错了

我要回帖

更多关于 final常量 的文章

 

随机推荐