黑马程序员技术交流社区

标题: 在show方法中如何访问到final int num中的num局部变量 [打印本页]

作者: 泡沫之夏    时间: 2013-8-26 21:10
标题: 在show方法中如何访问到final int num中的num局部变量
class Outer{
private int num  = 10;
public void function(final int num){
  class Inner{
   int num = 20;
   public void show(int num){
    System.out.println("num = " + num);
   }
  }
}
}
作者: 张洪慊    时间: 2013-8-26 22:11
临时想到这种:
  1. class Outer{
  2.          private int num  = 10;
  3.          public void function(final int num){
  4.                 final int finalLocalNum=num;//function中的final修饰的number可以直接被Inner中的
  5.                 class Inner{                //方法访问,但是你show的形参也是num,它访问的是show中的num
  6.                                                 //那么通过折中的方法再定义一个变量区别num
  7.                 private int num = 20;
  8.            
  9.            public void show(int num){
  10.              System.out.println("num = " + num);//30
  11.              System.out.println("finalLocalNum = " +finalLocalNum);//取到final int num的值
  12.              //让我回顾一下
  13.              System.out.println("Inner's num = " + this.num);//20  访问Inner成员变量
  14.              System.out.println("Outer's num= "+Outer.this.num);//10 Outer成员变量
  15.             }
  16.            }
  17.            new Inner().show(30);
  18.          }
  19.          
  20. }
  21. class Test{
  22.         public static void main(String[] args){
  23.                
  24.                 new Outer().function(50);
  25.         }
  26. }
复制代码
建议不要搞这么多同名变量,后期再用时自己都分不清了,自找麻烦- -~~
作者: 唐升    时间: 2013-8-27 00:23
该内部类是定义在局部的,这种情况下内部类可以直接访问外部类成员,但不可以访问它所在的局部变量(被final 修饰的局部变量除外)。你定义的final int num实在想不出有什么意义。
作者: 王广亚    时间: 2013-8-27 00:37
内部类定义在局部时,
1,不可以被成员修饰符修饰
2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
        但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。


  1. public class Outer{
  2.         private int num  = 10;//在下面输出语句中用Outer.this.num访问这里的num;
  3.         public void function(final int num){//如果再这里你还要非用num定义一个同名变量的话可能就没法访问了。如果定义的不是num,在下面输出语句中用变量名可以访问他;
  4.           class Inner{
  5.                    int num = 20;//在下面输出语句中用this.num访问这里的num;
  6.                    public void show(int num){//在下面输出语句中用 num访问这里的num;
  7.                            System.out.println("num = " + Outer.this.num);
  8.                    }
  9.           }
  10.           new Inner().show(30);
  11.         }
  12.         public static void main(String[] args){
  13.                 new Outer().function(45);
  14.                
  15.         }
  16. }
复制代码

作者: 影响力147753321    时间: 2013-8-28 09:52
final变量在方法中,要调用者传入一个常量,这个常量可以任意的,由调用者决定,要想拿到其值,必先取得其引用地址,就要用一个引用变量来存其地址。而地址是动态的,所以你想在此类中访问到final变量应该办不到。

作者: 以防万一    时间: 2013-8-31 14:20
{:soso_e176:}
亲,请问下问题是否解决?
如果已解决请及时将未解决改为已解决
如果未解决请回帖追问
三天未回复的将视为已解决

详情参考: 如何更改分类

保持队形,谢谢合作{:soso_e121:}





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