关于java final赋值

北渔。 2013-05-13 07:19:05
 1 class FinalTest
{
public static final String staticValue1 = "静态变量1";
public static final String staticValue2;

static
{
staticValue2 = "静态变量2";
}

public final String value1 = "实例变量1";
public final String value2;
public final String value3;

{
value2 = "实例变量2";
}

public FinalTest()
{
value3 = "实例变量3";
}
}
上面的代码为什么没有报错,刚才测试了,不是说用final修饰的变量必须赋值的吗。
...全文
241 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
结贴是美德 2013-05-13
  • 打赏
  • 举报
回复
不是final也必须赋值啊。lz,final与非final的区别是,final变量不能重复赋值。 对于实例final变量,最晚在构造方法中赋值。 对于静态final变量,最晚在静态初始化块中赋值。
  • 打赏
  • 举报
回复
这些变量在实例初始化和构造器中可以被初始化
n27741 2013-05-13
  • 打赏
  • 举报
回复
//对象初始化块中被赋值,而且限于,所以正确,但不可再在构造器中复制 优先于构造器中初始化
n27741 2013-05-13
  • 打赏
  • 举报
回复
static final field 可以直接复制,或者在 static 块中初始化 final field 可以在 构造器中初始化或者 初始化块中初始化



class FinalTest
  {
	  //定义时赋值
      public static final String staticValue1 = "静态变量1";
	  //在 static 初始化块 中赋值 所以正确
      public static final String staticValue2;
       
      static
      {
          staticValue2 = "静态变量2";
      }
      
	  //在定义时赋值
     public final String value1 = "实例变量1";
	 //对象初始化块中被赋值,而且限于,所以正确,但不可再在构造器中复制
     public final String value2;
	 //在构造器中初始化,所以正确。
     public final String value3;
      
     {
         value2 = "实例变量2";
     }
      
     public FinalTest()
     {
         value3 = "实例变量3";
     }
 }
北渔。 2013-05-13
  • 打赏
  • 举报
回复
引用 1 楼 anshiny 的回复:
static
      {
          staticValue2 = "静态变量2";
      }
在静态初始化块中赋值了。
那这两个呢public final String value2;      public final String value3;
anshiny 2013-05-13
  • 打赏
  • 举报
回复
static
      {
          staticValue2 = "静态变量2";
      }
在静态初始化块中赋值了。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧