static和final应用的问题

littlely_ll 2017-08-30 12:37:19
public interface Generator<T>{T next();}


public class BasicGenerator<T> implements Generator<T>{
private Class <T> type;
public BasicGenerator(Class<T> type){this.type = type;}
public T next(){
try{
return type.newInstance();
}catch(Exception e){
throw new RuntimeException(e);
}
}
public static <T> Generator<T> create(Class<T> type){
return new BasicGenerator<T>(type);
}
}


public class CountedObject{
private static long counter = 0;
private final long id = counter++;
public long id(){return id;}
public String toString(){return "CountedObject " + id;}
}



public class BasicGeneratorDemo{
public static void main(String[] args){
Generator<CountedObject> gen = BasicGenerator.create(CountedObject.class);
for(int i = 0; i < 5; i++)
System.out.println(gen.next());
}
}


请问在运行中是怎么计数的,特别是在第三段代码中,id设置为final不是不能改变吗
...全文
233 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
soton_dolphin 2017-08-31
  • 打赏
  • 举报
回复
引用 5 楼 littlely_ll 的回复:
[quote=引用 3 楼 soton_dolphin 的回复:] [quote=引用 2 楼 littlely_ll 的回复:] [quote=引用 1 楼 soton_dolphin 的回复:] final 变量的值不能在被初始化以后改变
它不是先初始化吗,应该不能变了[/quote] 你那里看到id 改变数值了??[/quote] 运行的结果就是变化的,id不是等于counter++吗[/quote] 应该是每一个新产生的CountedObject 的实例id 是不同的,在你next()方法里面每一次循环都产生一个新的实例 type.newInstance();
littlely_ll 2017-08-31
  • 打赏
  • 举报
回复
引用 4 楼 qq_34362497 的回复:
final的意思是只能赋值一次不能被继承或修改,属于敞亮,而第三段代码中没加static并非类属性,如果添加final static的话是静态常量就不会发生改变了。static是静态变量属于类属性,每次创建他的值都会改变,再给id赋值一次,所以会改变。
还是不太明白
littlely_ll 2017-08-31
  • 打赏
  • 举报
回复
引用 3 楼 soton_dolphin 的回复:
[quote=引用 2 楼 littlely_ll 的回复:] [quote=引用 1 楼 soton_dolphin 的回复:] final 变量的值不能在被初始化以后改变
它不是先初始化吗,应该不能变了[/quote] 你那里看到id 改变数值了??[/quote] 运行的结果就是变化的,id不是等于counter++吗
littlely_ll 2017-08-30
  • 打赏
  • 举报
回复
引用 1 楼 soton_dolphin 的回复:
final 变量的值不能在被初始化以后改变
它不是先初始化吗,应该不能变了
soton_dolphin 2017-08-30
  • 打赏
  • 举报
回复
final 变量的值不能在被初始化以后改变
soton_dolphin 2017-08-30
  • 打赏
  • 举报
回复
引用 2 楼 littlely_ll 的回复:
[quote=引用 1 楼 soton_dolphin 的回复:] final 变量的值不能在被初始化以后改变
它不是先初始化吗,应该不能变了[/quote] 你那里看到id 改变数值了??

62,628

社区成员

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

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