?求高人指点

yaoho_11 2007-10-10 04:28:39
关于final 的一个问题:
class K{
static final long tooth=343L;
static long doIt(long tooth){
System.out.println(++tooth + "");
return ++tooth;
}
public static void mai(String []args){
System.out.println(tooth + "");
final long tooth=340L;
new K().doIt(tooth);
System.out.println(tooth );
}
}

结果为343 341 340
我以为会编译错误的,哪位高人指点一下,尽量详细点,谢谢
...全文
64 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaoho_11 2007-10-18
  • 打赏
  • 举报
回复
知道了
感谢5楼
感谢各位高人!!
哈哈
谢谢大家
mjy59607256 2007-10-16
  • 打赏
  • 举报
回复
你打错了吧
mjy59607256 2007-10-16
  • 打赏
  • 举报
回复
你写错了吧
阿杜S考特 2007-10-16
  • 打赏
  • 举报
回复
1 class K{
2 static final long tooth=343L;
3 static long doIt(long tooth){
4 System.out.println(++tooth + "");
5 return ++tooth;
6 }
7 public static void main(String []args){
8 System.out.println(tooth + "");
9 final long tooth=340L;
10 new K().doIt(tooth);
11 System.out.println(tooth );
12 }
13 }
结果为343 341 340
首先,你的第7行main()中漏了个“n”
其次,调用一个类的静态方法,可以直接用类名.静态方法();所以第10行一般可以写为K.doIt(tooth);但是像你这么写也是可以的
程序从第8行开始执行,首先打印类K的静态成员tooth = 343L;然后执行到第9行,定义了一个局部变量tooth = 340L;执行第10行,调用doIt()方法传入参数340L,然后执行第4行,先把传入的参数自加1,然后打印自加后的形参为341,然后再将形参自加1,变成342后返回,但没有把返回的值打印或赋值;最后执行11行,打印tooth,注意这里的tooth是main()中定义局部变量tooth = 340;doIt()方法并没有对局部变量修改;但为什么不是类的成员变量呢?记住当局部变量和全局变量重名时,局部变量优先于全局变量,直到离开了局部变量的作用域,才用全局变量。
yaoho_11 2007-10-16
  • 打赏
  • 举报
回复
不会抛出异常的,那句只是一个普通语句,不赋给任何变量,系统直接可以当作垃圾回收
fang00y 2007-10-15
  • 打赏
  • 举报
回复
new K().doIt(tooth); //这个就不用解释了,doIt方法内打印341
他是有返回值的!为什么没有报错???
fang00y 2007-10-15
  • 打赏
  • 举报
回复
要不就是你打错了!
不能用的会抛异常的!!
shdxu 2007-10-11
  • 打赏
  • 举报
回复
public static void main(String []args){
System.out.println(tooth + ""); //这个tooth是class K中的类变量,即K.tooth,所以打印343
final long tooth=340L;
new K().doIt(tooth); //这个就不用解释了,doIt方法内打印341
System.out.println(tooth ); //上面doIt方法并不能改变tooth的值,所以打印340
}

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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