文档章节

内部类和外部类

人生如戏练好演技
 人生如戏练好演技
发布于 2016/09/19 21:48
字数 1115
阅读 14
收藏 0

内部类和外部类

内部类相当于外嵌类的属性。

分为四种:

①普通内部类

里面不能有静态方法和参数。

可以直接访问外嵌类中的静态方法,可以简介的访问实例方法。

②静态内部类(static)

静态内部类里面访问不到非静态方法和变量

即可以有静态方法和属性,也可以有实例方法和变量

③局部内部类(方法里的内部类)

局部内部类里面不能有静态方法和变量,

在局部内部类中访问外部累的局部变量必须声明成final。

④匿名内部类(接口和继承相关的内部类)

总结:Java支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类称为内部类的外嵌类。

关系:1、内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。

2、内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员。

3、内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。

4、内部类的外嵌类的成员变量在内部类中有效,使得内部类与外嵌类的交互更加方便。

Java编译器生成的内部类的字节码文件的名字和通常的类不同,内部类对应的字节码文件的名字格式是“外嵌类名$内部类名”,内部类可以被static修饰,类是一种数据类型,那么static内部类就是外嵌类的一种静态数据类型,这样一来,程序就可以在其他类中使用static内部类来创建对象了。但需要注意,static内部类不能操作外嵌类中的实例成员变量。

注:非内部类不可以是static类。

创建子类对象时,除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉类声明后的类体,称做匿名类,匿名类就是一个子类,由于无名可用,所以不可能用匿名类声明对象,但却可以直接用匿名类创建一个对象。

格式:new 类名(){

匿名类的类体

};

匿名类有如下特点:匿名类可以继承父类的方法也可以重写父类的方法。

使用匿名类时,必然在某个类中直接使用匿名类创建对象,因此匿名类一定是内部类。

匿名类可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以声明static成员变量和static方法。

若方法的参数是类类型,而且希望向方法传递该类的子类对象,但系统没有提供符合要求的子类,那么就可以考虑用匿名类。

由于匿名类是一个子类,但没有类名,所以在用匿名类创建对象时,要直接使用父类的构造方法。

Java允许直接使用 接口名和一个类体创建一个匿名对象,此类体被认为是实现了某接口的类去掉类声明后的类体,称作匿名类。

格式:new 接口名(){

实现接口的匿名类的类体

如果某个方法的参数是接口类型,那么可以使用接口名和类体组合创建一个匿名对象传递给方法参数,类体必须要重写接口中的全部方法。

注:匿名类放在方法参数中

一个没有名字的内部类,由匿名类所产生的对象常常被用作上转型对象或接口回调。

异常类:程序运行时可能出现的一些错误。Java使用throw

关键字抛出一个Exception子类的实例表示异常发生。

Java允许定义方法时声明该方法调用过程中抛出异常对象,即允许方法调用过程中抛出异常对象,终止当前方法的继续执行。

原理:将可能出现的异常代码和异常处理分开。

© 著作权归作者所有

人生如戏练好演技
粉丝 0
博文 22
码字总数 18838
作品 0
徐汇
Android工程师
私信 提问
Java的内部类

类是java中定义的一个独立的程序单元,在某种情况下也可以把一个类放在另外一个类的内部定义,这定义在内部的类就叫内部类或嵌套类。 1.内部类提供了更好的封装,把一个内部类隐藏在外部类之...

西红柿的眼泪
2016/07/09
53
0
JAVA内部类是怎么玩儿的

内部类一共分为:成员内部类,局部内部类,静态嵌套类,匿名内部类。 1. 成员内部类 最普通的内部类 成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private...

牧师-Panda
2016/09/08
21
0
黑马程序员---面向对象之内部类

-------------------------android培训、java培训、期待与您交流! ------------------------- Java中的内部类有四种:一般内部类、静态内部类、局部内部类、匿名内部类。 一、一般内部类 定...

长平狐
2013/07/01
91
0
Java中的内部类总结

内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为...

zhangyujsj
2016/01/04
8
0
内部类, 静态内部类, 局部类, 匿名内部类的解析和区别

众所周知,外部顶级类的类名需和类文件名相同,只能使用public和default。而内部类是指在外部类的内部再定义一个类,类名不需要和文件名相同。内部类可以是静态static的,也可用public,def...

翻滚吧李博
2017/12/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HashMap是如何解决冲突,扩容机制的

hashmap中的key值是唯一的,因此我们会采用数组+链接的方式解决这个问题 本思想是将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查...

鬼才王
10分钟前
1
0
音乐+区块链

当加密货币在2017年第一次进入主流媒体时,大家就开始猜测这一新技术将会在哪一个领域先绽放。其中一个猜测的候选行业就是音乐产业,一个长久以来始终在等待平等的行业,有许多音乐家在苦苦挣...

汇智网教程
13分钟前
1
0
Java数据结构(下)

哈希表(Hashtable) 字典(Dictionary) 属性(Properties) 1.Hashtable(哈希表) 哈希表提供了一种在用户定义键结构的基础上来组织数据的手段。在地址列表的哈希表,选择键可以根据邮编存...

Firefly-
21分钟前
4
0
Redis的五大数据类型及常用命令

一、与数据库相关的命令 Redis启动后默认16个数据库,类似数组下表从零开始,初始默认使用零号库 切换数据库命令 select 数据库下标 查看当前数据库的key的数量 Dbsize 清空当前库 flushdb ...

慎思慎行
26分钟前
1
0
Java格式化解析时间

System.out.println(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").format(LocalDateTime.now(ZoneOffset.UTC)));DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBu......

爱吃窝窝头
54分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部