安卓学习笔记1_内部类

@TOC加粗样式

安卓学习笔记1_内部类

最近开始学习安卓,所以把安卓学习过程中遇到的知识记录一下

笔记

我在button按钮的设置点击监听器这里,使用匿名内部类的方法创建了监听器实例,这个匿名内部类既是匿名内部类,又是局部内部类.
所以如果要把Edit editText = findViewById(R.id.edit_text)放在内部类外面的话,有两种方式.
第一种就是放在onCreate()方法中, 这时候需要给editText对象增加final修饰符.
第二种是将editText放在的声明放在成员变量的位置,那么内部类内部就可以直接调用(正式开发的时候采用第二种 ).

在这里插入图片描述
由于静态内部类,成员内部类,匿名内部类和局部内部类的概念有一些交集.
所以,打算乘此机会对其进行一下总结:

其一:为什么要使用内部类呢?

首先,一般使用最多的是成员内部类和静态内部类.一般这两个内部类是用来辅助外部类而使用的.
比如说外部类要新增功能最简单的方式就是实现一个接口.
但是仅仅是自己需要使用的时候,内部类也可以做到这些.,一般不需要做为接口给外部使用.这时候,直接写一个内部类就可以了.
比如,在安卓中有一个AlertDialog类,他的作用是在当前界面弹出一个置顶于所有界面元素之上的对话框.
这个类的内部就有一个public static class Builder {}的静态内部类.
该静态内部类的作用是: Creates a builder for an alert dialog
实际上由于AlertDialog的构造方法是被保护的,所以我们在不同包下,不能直接调用AlertDialog的构造方法进行实例化.
所以我们通过其静态内部类的Builder类辅助用来dialog对象的实例化.而Builder也可以对AlertDialog类中的成员常量AlertController的内部封装变量进行更改.
所以,这里的Builder类就是起一个辅助外部类的作用.

具体为什么AlertDialog要使用protected对其构造方法进行保护,我以后对源码进行解读之后.有必要在对AlertDialog的源码进行分析.

下图是AlertDialog类中的静态内部类Builder
在这里插入图片描述

其二:内/外部类的访问分析

1:成员内部类

成员内部类,就是在一个类的成员 变量/方法 的位置直接定义一个类.
他和普通类成员没有区别.
要注意的是成员内部类是绝对不能在定位为static的.如果定义了static,就变成了静态内部类了.
普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象;而静态内部类是没有这个引用的

与外部类的交流:
1:内部类访问外部类:可以直接访问外部类的所有成员
2:外部类访问内部类:需要先对内部类进行实例化才能访问.

2:静态内部类

当成员内部类加了static,就变成了静态内部类.静态内部类和外部类的关系不大.如果你不需要内部类对象与其外围类对象之间有联系,就可以使用静态内部类.

与外部类的交流:
1:内部类访问外部类:只能访问外部类静态成员.
2:外部类访问内部类:有两种情况
*访问内部类的静态成员,直接调用类名.成员名;
*访问问内部类的非静态成员,需要实例化之后才可以.

这里做为延伸,介绍一下静态内部类的类加载机制.
一般来说,一个类的静态成员都会随着类的加载而加载.但是静态内部类不同,他是不随着外部类的加载而加载的.

3:局部内部类

局部内部类,就是定义在方法中的内部类.一般用来实例化需要重写方法的类对象时使用.
一般使用较少.

1:由于他和局部变量是同一个级别,生命周期也和该方法中的局部变量生命周期类似.
2:局部内部类本身不能被访问限定符修饰(但是其内部成员可以被修饰).
3:局部内部类的实例化只能在其内部进行,不能在外部对其进行实例化.

与外部类的交流:
1:内部类访问外部类:可以访问所在方法的所有final常量,也可以访问外部类的所有成员.
2:外部类访问内部类:一般访问不了,但是好像用反射强行访问是可以的

4:匿名内部类

匿名内部类,一般用来创建一个实例.实例完一次就扔的时候,就可以使用匿名内部类了.

1:匿名内部类中不能有任何静态的成员(因为匿名内部类的使用一般是用来快速实例化的,所以他也就不是静态的,当然不能有静态成员).
2:匿名内部类不能被public,public,protected,private,static修饰(显然啊,连类名都没有,直接实例化了)
3:因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

与外部类的交流:
1:内部类访问外部类:可以访问所在方法的所有final常量,也可以访问外部类的所有成员.
2:外部类访问内部类:一般访问不了,但是好像用反射强行访问是可以的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值