内部类

1.成员内部类,可以看做是外部类的成员变量。
修饰:
private,protected,public, default都可以修饰。普通的只能是public和defalut。
访问:
内部类可以访问外部类的一切,因为反编译的时候可以看到,内部类会自动生成一个参数是外部类的构造函数,静态内部类除外,内部默认会有一个外部类的引用。
示例:
请求外部类的变量的时候,反编译看到是通过生成的外部类静态方法访问获得到的。内部了会出现OutClass2.this.i/OutClass2.access$000(this.this$0),access方法。参数是外部对象。this是当前内部类对象,this$0就是外部类对象。
限制:
不能创建静态方法及变量。因为静态是可以直接加载class访问,但是成员内部类需要生成外部类对象,才能创建内部类。
使用场景:
一般都是需要访问外部类变量或者方法,并且这个内部类的封装的业务是外部类的一部分。a需要b,b需要调用a的方法。

结论:
1.内部类访问变量,先找当前方法的局部变量,然后内部类变量,然后是外部变量
2.内部类访问变量的操作其实是方法对应方法的操作。
3.访问内部了的变量:this.i;
4.访问外部类变量:OutClass.this.i;

2.静态内部类,这个可以看做和外部类没有关系,和外部类一个平级的类。
修饰:同上
访问:
内部类没有外部了的引用,如果需要访问外部类的变量,请自己new外部类对象。但是可以访问外部类静态的。
限制:
可以看做是一个普通类。都可以创建。
使用场景:
a需要b,b不需要调用a的数据。单例模式就用到了这个。

3.局部内部类。
和成员内部类差不多,但是作用域是在方法或者代码块中,其他地方完全不能使用。
修饰:只能是默认或者abstract,final
使用场景啊:
一次性使用,临时使用。

4.匿名内部类
一般都用于接口回调。没有具体的名称。
修饰:么有。
访问:可以访问外部类。
限制:依赖已创建的接口,父类。匿名类中创建各种信息,不能创建构造函数,因为匿名类new的时候,已经自动new对应构造函数了。你在创建也没有用了,因为你是匿名类,你再创创建,也没有其他调用方使用。并且现在编译都会有问题了。就不用创建多个普通类。传递到内部类的变量需要是final。
使用场景:
对边变化比较大的策略,并且如果是仅仅个别地方用到。

风险:除了静态内部类,其他的内部类都会引用外部类的引用。如果外部类没有人用了。但是内部类还在使用,外部类就不会得到释放,就是有内存泄漏。因为:内部类都有外步类的引用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值