黑马程序员技术交流社区

标题: final问题啊 不懂 求解答 [打印本页]

作者: 2528870651    时间: 2014-3-29 13:08
标题: final问题啊 不懂 求解答
本帖最后由 2528870651 于 2014-4-1 08:55 编辑
  1. class Outer
  2. {
  3.         int x= 3;
  4.         void method(final int a)   //这里a是局部变量,存储在栈里
  5.         {
  6.                 final int y= 4;
  7.                 class Inner
  8.                 {
  9.                         void  function()
  10.                         {
  11.                                 System.out.println(a);
  12.                         }
  13.                 }
  14.                         new Inner().function();
  15.                
  16.         }
  17. }

  18. class InnerClassDemo
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 new Outer().method(7);     //这里上课的时候讲了
  23.                 new Outer().method(8);
  24.         }
  25. }



  26. class FinalTest
  27. {
  28.         private final int num ;
  29.         public void setNum(int num)
  30.         {
  31.                 this.num = num;   //这里呢???在上面,num虽然被final修饰,可是num还没赋值啊 ,怎么也会编译失败??
  32.         }
  33.         public int getNum()
  34.         {
  35.                 return num;
  36.         }
  37.         public static void main(String[] args)
  38.         {
  39.                 FinalTest a1 = new FinalTest();
  40.                 a1.setNum(1);
  41.                 System.out.println(a1.getNum());
  42.                 FinalTest a2 = new FinalTest();
  43.                 System.out.println(a2.getNum);

  44.         }
  45. }
  46. //谁能具体的说一下,这有什么区别吗??
复制代码

作者: 136616244    时间: 2014-3-29 13:33
被final修饰的变量只能被赋值一次,你提供了修改Num的方法,而方法可以被多次调用,Num就可以被多次赋值

作者: 橡皮-leo    时间: 2014-3-29 13:50
本帖最后由 橡皮-leo 于 2014-3-30 21:45 编辑
  1. private final int num ; //<font color="#ff0000">final修饰的成员变量是是一个常量,必须要给一个初始值的,并且是不可改变的</font>
  2.         public void setNum(int num)
  3.         {
  4.                 this.num = num; //<font color="#ff0000">这句this.num = num;违背了规则,所以编译失败</font>。
  5.         }
复制代码

作者: ehuashao    时间: 2014-3-30 21:37
  1. class FinalTest
  2. {
  3.         private final int num ;
  4.         public void setNum(int num)
  5.         {
  6.                 this.num = num;   //这里呢???在上面,num虽然被final修饰,可是num还没赋值啊 ,怎么也会编译失败??
  7.         }
  8.         public int getNum()
  9.         {
  10.                 return num;
  11.         }
  12.         public static void main(String[] args)
  13.         {
  14.                 FinalTest a1 = new FinalTest();
  15.                 a1.setNum(1);
  16.                 System.out.println(a1.getNum());
  17.                 FinalTest a2 = new FinalTest();
  18.                 System.out.println(a2.getNum);

  19.         }
  20. }
复制代码

你的这段代码,成员变量由final修饰:
第一必须被赋初始值。
第二不能被动态复制或改变
这段代码
  1. class Outer
  2. {
  3.         int x= 3;
  4.         void method(final int a)   //这里a是局部变量,存储在栈里
  5.         {
  6.                 final int y= 4;
  7.                 class Inner
  8.                 {
  9.                         void  function()
  10.                         {
  11.                                 System.out.println(a);
  12.                         }
  13.                 }
  14.                         new Inner().function();
  15.                
  16.         }
  17. }
复制代码

final修饰形式参数,只是修饰了形参的地址,也就是形参的地址是不会改变的,但值是可以改变的。




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