黑马程序员技术交流社区

标题: 内部类访问外部局部变量 [打印本页]

作者: 夏的四季    时间: 2014-3-24 10:12
标题: 内部类访问外部局部变量
本帖最后由 夏的四季 于 2014-3-24 15:51 编辑
  1. class Outer
  2. {
  3.         int x =1;//外部成员变量

  4.         void show()
  5.         {
  6.                 final int x = 2;//外部类的局部变量
  7.                 class Inter
  8.                 {
  9.                         int x=3;//内部局部类中的成员变量
  10.                         void show_1()
  11.                         {
  12.                                 System.out.println("局部内部类访问外部类:::"+Outer.this.x);//局部内部类可以直接访问外部类
  13.                                 
  14.                                 /*
  15.                                         问:怎么访问外部类的局部变量x= 2呢?
  16.                                 */
  17.                                 
  18.                         }
  19.                         
  20.                 }
  21.                 new Inter().show_1();
  22.         }
  23. }
复制代码



作者: 黄陂酷歌    时间: 2014-3-24 13:09
  1. class Outer{
  2.         int x = 3;
  3.         private class Inner{
  4.                 int x = 2;
  5.                 void function(){
  6.                         int x = 1;
  7.                         System.out.println("innner"+x);
  8.                         System.out.println("innner"+this.x);
  9.                         System.out.println("innner"+Outer.this.x);
  10.                 }
  11.         }
  12.         void method(){
  13.                 Inner in = new Inner();
  14.                 in.function();
  15.         }
  16. }
  17. class InnerClassDemo{
  18.         public static void main(String[] args) {
  19.                 Outer out = new        Outer();
  20.                 out.method();
  21.         }
  22. }
复制代码

如上代码,结果为1,2,3
原因  就近原则,当没有明确标出x所属对象获方法就就近当表明了所属对象或方法就是对应对象或方法的了
作者: 宋超2356    时间: 2014-3-24 14:01
楼上回复跟lz问的不是一个事啊~lz问的是内部类访问已带有final的外部类的方法中的局部变量...
我觉得访问不到外部类的局部变量x,等着看大神解答....
作者: yanzhendong    时间: 2014-3-24 14:08
通过.this关键字获取那个类的句柄,.this只对内部类有效,
作者: 也许依然    时间: 2014-3-24 15:05
我感觉不能访问到,请指点
  1. public class Test3 {

  2.         public static void main(String[] args){
  3.                 // TODO Auto-generated method stub
  4.                 new Outer().show();
  5.         }

  6. }

  7. class Outer{
  8.         int x = 1;
  9.         void show(){
  10.                 final int x =2;
  11.                 //System.out.println(x);
  12.                 class Inner{
  13.                         int x = 3;
  14.                        
  15.                         void show_1(){
  16.                                 //访问的是类Inner中的变量x=3
  17.                                 System.out.println(x);
  18.                                 //this指的是new Inner 同样打印的是类Inner中的x=3
  19.                                 System.out.println(this.x);
  20.                                 //打印的是Outer中的变量x=1
  21.                                 System.out.println(Outer.this.x);
  22.                                
  23.                                 //要访问final int x = 2;
  24.                                 //是函数嵌套中变量的调用,和如下函数之间的访问一样
  25.                                 /*public static void main(String[] args) {

  26.                                         void function1(){
  27.                                                 int x = 1;
  28.                                                 void function2(){
  29.                                                         int x = 2;
  30.                                                         System.out.println(x);
  31.                                                 }
  32.                                         }*/
  33.                                 //输出的是最近作用域的x值       
  34.                         }
  35.                 }
  36.                 new Inner().show_1();
  37.         }
  38. }
复制代码





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