A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卟離不棄 中级黑马   /  2015-3-22 11:00  /  1134 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
* 局部内部类: 即在方法中定义的内部类,与局部变量类似,
* 在局部内部类前不加修饰符public或private,其范围为定义它的代码块。
*
* 注意:局部内部类中不可定义静态变量,可以访问外部类的局部变量(即方法内的变量),
* 但是变量必须是final的。
*
* 注意:
* 在类外不可直接生成局部内部类(保证局部内部类对外是不可见的)。要想使用局部内部类时需要生成对象,
* 对象调用方法,在方法中才能调用其局部内部类。通过内部类和接口达到一个强制的弱耦合,
* 用局部内部类来实现接口,并在方法中返回接口类型,使局部内部类不可见,屏蔽实现类的可见性。
*
*/
public class Outer {
        private int s = 100;
        private int out_i = 1;
       
       
        public void f(final int k){
                final int s = 200;
                int i = 1;
                final int j = 10;
               
                //定义在方法内部
                class Inner{
                        int s = 300;//可以定义与外部类同名的变量
                        //static int m = 20;//不可以定义静态变量,因为此变量在方法内,而此方法非静态,因此变量m不可能在类的加载时完成加载
                       
                        Inner(int k){
                                inner_f(k);
                        }
                        int inner_i = 100;
                        void inner_f(int k){
                                System.out.println(out_i);//如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量
                                System.out.println(k);
                                //可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的.因为内部类中的成员是加载到堆内存中,而局部变量加载到栈内存中
                                //随方法结束而结束,而内部类中的对象当还在被引用就不会变垃圾.因此被局部内部类使用的局部变量就必须用final修饰.
                            System.out.println(j);
                                System.out.println(s);//如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量
                                System.out.println(this.s);//用"this.变量名" 访问的也是内部类变量
                                System.out.println(Outer.this.s);//用外部"外部类类名.this.变量名" 访问的是外部类变量
                        }
                }
               
          new Inner(k);
        }
}

public class OuterDemo {
        public static void main(String[] args) {
                Outer outer = new Outer();
                outer.f(50);
        }
}

1 个回复

倒序浏览
总结的很详细,支持
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马