网站首页 > java教程 正文
内部类,嵌套在另一个类的里面,所以也称为 嵌套类。
内部类分为以下四种:
静态内部类
匿名内部类
成员内部类
局部内部类
1. 静态内部类
静态内部类,在类中用static声明的内部类。因为是static,所以不依赖于外围类对象实例而独立存在,静态内部类的可以访问外围类中的所有静态成员,包括private的静态成员。同时静态内部类可以说是所有内部类中独立性最高的内部类,其创建对象、继承(实现接口)、扩展子类等使用方式与外围类并没有多大的区别。
经典使用方式:
1) 单例模式
2) 接收json参数
2. 匿名内部类
匿名内部类是一个没有给定名字的内部类,在创建这个匿名内部类后,便会立即用来创建并返回此内部类的一个对象引用。匿名内部类用于隐式继承某个类(重写里面的方法或实现抽象方法)或者实现某个接口。
匿名内部类和lambda表达式有一些联系,对lambda表达式有兴趣的可以参考《5分钟学会java8的lambda表达式》
经典使用方式:
1)线程使用
3. 成员内部类
定义在类的内部,而且与成员方法、成员变量同级,即也是外围类的成员之一,因此成员内部类与外围类是紧密关联的。这种紧密关联指的是,成员内部类的对象的创建必须依赖于外围类的对象(即没有外围类对象,就不可能创建成员内部类)。因此,成员内部类有以下3个特点:
成员内部类可以访问外围类的所有成员,包括私有成员;
成员内部类是不可以声明静态成员(包括静态变量、静态方法、静态成员类、嵌套接口),但有个例外---可以声明 static final的变量, 这是因为编译器对final类型的特殊处理,是直接将值写入字节码;
成员内部类对象都隐式地保存了一个引用,指向创建它的外部类对象;或者说,成员内部类的入口是由外围类的对象保持着(静态内部类的入口,则直接由外围类保持着)
4. 局部内部类
在方法、构造器、初始化块中声明的类,在结构上类似于一个局部变量。因此局部内部类是不能使用访问修饰符。对于类的全局成员,局部内部类定义在实例环境中(构造器、对象成员方法、实例初始化块),则可以访问外围类的所有成员;但如果内部类定义在静态环境中(静态初始化块、静态方法),则只能访问外围类的静态成员。
局部内部类和匿名内部类在各个方面都是相同的,只是一个定义了名称,一个是匿名。可以相互参考。
最后,成员内部类一般使用较少,因为会引起代码阅读难度;局部内部类在大部分情况下可以使用匿名内部类代替,所以这两种内部类使用频率很少。实际工作中,活用静态内部类和匿名内部类即可。
- 上一篇: 干货分享:Java的内部类真的那么难以理解?
- 下一篇: Java基础——内部类(内部类 java)
猜你喜欢
- 2024-09-27 内部类Java(内部类和静态内部类的区别)
- 2024-09-27 你好,我是java中的内部类(java中的内部类包括)
- 2024-09-27 Java基础:Java 内部类和静态内部类的区别
- 2024-09-27 java - 普通内部类和静态内部类的区别
- 2024-09-27 JAVA内部类的经典总结(java内部类分别有哪几种?)
- 2024-09-27 Java内部类(java内部类的作用)
- 2024-09-27 Java内部类浅析(java内部类详解)
- 2024-09-27 如何在 Java 中定义一个内部类?(java用内部类声明对象)
- 2024-09-27 Java 内部类和异常类(详细版)(java第七次实验 内部类与异常类)
- 2024-09-27 Java学习:内部类的概念于分类(java内部类分别有哪几种?)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)