黑马程序员技术交流社区

标题: 成员变量初始化问题,求解! [打印本页]

作者: 悠然丶    时间: 2014-4-19 20:44
标题: 成员变量初始化问题,求解!
class Something {
    final int i;  
    public void doSomething() {
         System.out.println("i = " + i);
    }
}
//i 是成员变量不是说,可以不用显示初始化么.怎么就出错了求解?
作者: 左拉    时间: 2014-4-19 20:49
final数据

   许多编程语言都有某种方法,来向编译器告知一块数据是恒定不变的。有时数据的恒定不变是很有用的,例如:

1,一个编译时恒定不变的常量

2,一个在运行时初始化,而你不希望它被改变。

   对于编译期常量的这种情况,编译器可以将该常量值代入任何可能用到它的计算式中,也就是说,可以在编译期就执行计算式,这减轻了一些运行时的负担。在java中,这类常量必须是基本类型,并且以final表示。在对这个常量定义时,必须进行赋值。

   一个即是static又是fianl的域只占一段不能改变的存储空间。

   当final应用于对象引用时,而不是基本类型时,其含义有些让人疑惑。对基本类型使用fianl不能改变的是他的数值。而对于对象引用,不能改变的是他的引用,而对象本身是可以修改的。一旦一个final引用被初始化指向一个对象,这个引用将不能在指向其他对象。java并未提供对任何对象恒定不变的支持。这一限制也通用适用于数组,它也是对象。


final来定义数据时必须赋值,哪怕你想让它为默认值,也要写上i=0;哪怕是空对象,也要写上null
作者: xtxiaolu    时间: 2014-4-19 20:53
成员变量被final修饰了!被final修饰的成员变量不能被,内部类调用
作者: 悠然丶    时间: 2014-4-19 21:03
左拉 发表于 2014-4-19 20:49
final数据

   许多编程语言都有某种方法,来向编译器告知一块数据是恒定不变的。有时数据的恒定不变是很 ...

好吧,我懂了..谢谢
作者: 四川男人    时间: 2014-4-19 21:04
final修饰符修饰的变量是常量,需要赋初值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2