书上说final double PI = 3.1415926;这样写则PI虽然不能通过赋值来改变,但在构造方法中还是可以被改变,如果写成static final double PI = 3.1415926,则怎样都不能改变她得值了,构造方法也不行。
我想问的就是为什么final修饰的常量也可以在构造方法里面改变呀?都final了还怎么改变?为什么加了一个static就怎么都不会改变了呢?先谢过各位了。
------解决方案--------------------
final double PI = 3.1415926589793d;
PI = 2.1d;
System.out.println(PI);
------解决方案--------------------
final关键字修饰的变量,是常量除了初始化之外,不可以被再次赋值;Static修饰的变量是全局变量,如果为引用型,该引用不能指向其他的对象,但是该引用指向的对象本身是可以改变其值的。也就是说如果是基本类型的,那么它的值不能再改变;如果是对象,则引用不可变,而对象本身还是可以改变的。
------解决方案--------------------
该变不了的
如果有private final int i;
这样在声明是没有初始化,则可以在构造函数中进行初始化
如果有private final int i=0;
就不能在构造函数中初始化啦
static final是常量了,必须在声明时就初始化
------解决方案--------------------
1.在构造方法中可以改变的意思是,构建对象时必须初始化这样的实例域,初始化之后就不能再对它修改了。
2.加static之后就是静态的,是属于类的,是在类初始化时对其赋值,所以构造方法肯定管不到静态的东西。