黑马程序员技术交流社区

标题: String类内面的问题? [打印本页]

作者: 弘一    时间: 2013-12-17 18:45
标题: String类内面的问题?
我在查看String类源码的时候,发现了
private final char value[];
不是被final修饰的成员变量都是常量。应该在成员变量定义的时候需要进行赋值,这样才会有value的地址值这个常量的吗?
而我自己写则是会报错。
class Test
{
      //Test.java:5: 错误: 可能尚未初始化变量value
     private final char value[];
     public static void main(String[] args)
     {}
}

作者: 四五六七八    时间: 2013-12-17 19:38
final变量的初始化必须在构造函数执行完之前初始化
初始化位置
一是其定义处,也就是说在final变量定义时直接给其赋值,
二是在构造函数中。而且在Java1.1以前,只能是在定义时给值。
三是在初如化代码块中{} 或者 static{}
你所定义的final在默认构造方法执行完之后仍然没内赋值,所以出错
作者: litaojisuanji    时间: 2013-12-17 20:13
final修饰的是常量,但是赋值动作不一定是在定义时赋值的,
只要在构造函数完成之前赋值就可以了。
建议:
      你看看String源码的构造函数,在构造函数中肯定有给
final修饰的常量赋值动作。
作者: 影凡    时间: 2013-12-17 20:47
final关键字用于申明变量时,该变量一旦被设定,就不可以改变该变量的值。所以一般final关键字定义的变量必须在声明时对其进行赋值操作。所以你的问题应该是缺少赋值操作,编译时才会报错的。
作者: 弘一    时间: 2013-12-17 21:26
litaojisuanji 发表于 2013-12-17 20:13
final修饰的是常量,但是赋值动作不一定是在定义时赋值的,
只要在构造函数完成之前赋值就可以了。
建议:

对喔!谢谢啦!
作者: 冯国强    时间: 2013-12-17 22:09
final关键字:可以修饰类,方法,变量等。
  如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。
  如果变量和方法声明为final,可以保证他们在使用中不被改变。被声明的final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。而被final修饰的方法也同样只能使用,不能被覆盖。





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