高手来看一下 关于一个final的问题

JAVAkuroro 2011-09-22 04:50:22
这个程序中CountInt类的中的b是final类型的为什么可以赋值一个可变的数。
import java.util.ArrayList;
import java.util.List;


public class FinalTest
{
public static void main(String[] args)
{
FilledList<CoutInt> foo = new FilledList<CoutInt>(CoutInt.class);
System.out.println(foo.create(14));
}
}
class CoutInt
{
private static int a;
private final int b = a++;
@Override
public String toString()
{
return Integer.toString(b);
}

}
class FilledList<T>
{
private Class<T> classtype;
public FilledList(Class<T> type)
{
this.classtype = type;
}
public List<T> create(int Elements)
{
List<T> result = new ArrayList<T>();
try{
for(int i=0;i<Elements;i++)
{
result.add(classtype.newInstance());
}
}catch(Exception ex)
{
throw new RuntimeException();
}
return result;
}


}
...全文
132 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyuhua0066 2011-09-22
  • 打赏
  • 举报
回复
好好研究下static和final的区别
liuyuhua0066 2011-09-22
  • 打赏
  • 举报
回复
a的值没变化 所以b的也不变
JAVAkuroro 2011-09-22
  • 打赏
  • 举报
回复
恩 这个分析不错 还有个问题请教 如果我在final后面加个static的话 a的值一直在改变 为什么b的值就不变了
[Quote=引用 12 楼 liuyuhua0066 的回复:]

b的值赋值后没有变
你每次new 不同的CoutInt ,不同的CoutInt的对象的b是不一样的
但是CoutInt的对象的b的值赋值后就没有再改变了
[/Quote]
zhudaoming 2011-09-22
  • 打赏
  • 举报
回复
final 的值是不变的,已第一次赋值的结果为准撒。
liuyuhua0066 2011-09-22
  • 打赏
  • 举报
回复
b的值赋值后没有变
你每次new 不同的CoutInt ,不同的CoutInt的对象的b是不一样的
但是CoutInt的对象的b的值赋值后就没有再改变了
JAVAkuroro 2011-09-22
  • 打赏
  • 举报
回复
顶下 求解啊
JAVAkuroro 2011-09-22
  • 打赏
  • 举报
回复
final这里修饰的是原始数据类型而不是引用类型的啊[Quote=引用 7 楼 likier 的回复:]

final声明的是引用,只要确保指向的对象不变,可以在声明时初始化,也可以在构造函数中初始化,之后引用的指向不变就可以,但是指向的对象的成员可以改变,可以用bufferstring测试一下,不知道我说明白了吗
[/Quote]
JAVAkuroro 2011-09-22
  • 打赏
  • 举报
回复
final修饰的变量不是不可变的常量么 a的值一直在变 那么b也会跟着变 我觉得和final的定义矛盾了啊 能不能解释下
liuyuhua0066 2011-09-22
  • 打赏
  • 举报
回复
final初始化的时候赋了值,以后不能改了吧。
[Quote=引用 5 楼 wangquanzheng 的回复:]
final只要定义的时候赋值,以后都可以用的。也可以改[/Quote]
kier 2011-09-22
  • 打赏
  • 举报
回复
final声明的是引用,只要确保指向的对象不变,可以在声明时初始化,也可以在构造函数中初始化,之后引用的指向不变就可以,但是指向的对象的成员可以改变,可以用bufferstring测试一下,不知道我说明白了吗
TKD03072010 2011-09-22
  • 打赏
  • 举报
回复
ls 很给力
安心逍遥 2011-09-22
  • 打赏
  • 举报
回复
final只要定义的时候赋值,以后都可以用的。也可以改
oO临时工Oo 2011-09-22
  • 打赏
  • 举报
回复
对 只要是在定义那行进行第一次任何形式的赋值都是可以的
qianshangding 2011-09-22
  • 打赏
  • 举报
回复
final 第一次赋值是就可以的。
oO临时工Oo 2011-09-22
  • 打赏
  • 举报
回复
先有a,再有b.所以是可以的
台城柳月 2011-09-22
  • 打赏
  • 举报
回复
b = a++;
因为a还没有被赋值呀

62,615

社区成员

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

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