final没赋值,用构造方法赋值,为什么还报错?
为什么还报错
为什么还报错
2016-04-08
楼上说的不对,Java里面final可以进行留白,并且在构造方法里面赋值。
public class Test { private final int testNum; public Test(int test) { this.testNum = testNum; } }
或者
public class Test { private final int testNum; public Test() { testNum = 10; } }
都是可以的。问题里不可以是因为并没有使用构造方法而是在方法里面赋值,这是不可以的。
楼上说的例子里面,因为有了static关键字,所以这个量是属于类的,就必须要在初始化的时候赋值,不能留白。而没有关键字的static的时候,量是在对象初始化的时候才初始化,所以可以在构造方法里面赋值。
Java中final的设计就是这样的,只能在定义的时候赋值,不能在其他地方赋值或修改(区别于“只能赋值一次”)
final的用处多数在于,当你需要一个确定的值表达某个含义的时候,用final修饰它,一方面防止错误操作(比如不小心把这个值修改了),另一方面起到说明文档的作用,告诉其他程序员这个值是表达某个特定意义的常量。
比如我们可以使用final修饰圆周率PI
static final double PI = 3.1415926;
然后可以方便地使用PI来做计算
double getArea (double radius) { return (PI * radius * radius); }
因为对于final修饰的值,是对于每个该类下的对象都是确定且一致的,所以通常有final就也有static。
最后,一般final修饰的常量,命名用大写字母,用下划线分隔单词的命名方式,例如
static final MY_INT_CONSTANT = 1024;
以上
举报