java开发中嵌套类的详解及实例

发布时间 - 2026-01-11 02:25:03    点击率:

 java开发中嵌套类的详解

在java语言规范里面,嵌套类(Nested Classes)定义是:

A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class that is not a nested class.

说的简单一点,就是定义在类里面的类。一般把定义内部类的外围类成为包装类(enclosing class)或者外部类

嵌套类分类

根据nested class定义的地方,可以分为member nested class,local nested class , anonymous nested class

  1. member nested class(成员嵌套类) :成员嵌套类 作为 enclosing class 的成员定义的,成员嵌套类有enclosing class属性
  2. local nested class (局部嵌套类): 局部嵌套类定义在 enclosing class 的方法里面,局部嵌套类有enclosing class 属性和enclosing method 属性
  3. anonymous nested class(匿名嵌套类):匿名嵌套类没有显示的定义一个类,直接通过new 的方法创建类的实例。一般回调模式情况下使用的比较多

 member nested class 可以使用public,private,protected访问控制符,也可以用static,final关键字

local nested class 可以使用final关键字

anonymous nested class 不使用任何关键字和访问控制符

来自Java编程思想:

如果不需要内部类对象与外围类对象之间有联系,那么可以将内部类声明为static。这通常称为嵌套类。要想理解static应用于内部类时的含义,就必须记住,普通的内部类对象隐式地保存了一个引用,指向创建它的外围类对象。然而,当内部类时static的时候,就不是这样了。嵌套类意味着:

要创建嵌套类的对象,并不需要其外围对象。

不能从嵌套类的对象中访问非静态的外围类对象。

嵌套类与普通的内部类还有一个区别。普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段(这就是为什么单例设计模式中,内部类为什么必须是静态的原因了),也不能包含嵌套类,但是嵌套类可以包含所有这些东西!

下面是懒汉式单例模式的代码:

package com.easyliu.staticinnerclass; 
 
/** 
 * 懒汉式单例 
 * @author EasyLiu 
 * 
 */ 
public class Singleton { 
  private Singleton() { 
    System.out.println("Singleton-init"); 
  } 
 
  /** 
   * 
   * @author EasyLiu 嵌套类(静态类) 
   * 
   */ 
  private static class SingletonHolder { 
    private final static Singleton INSTANCE = new Singleton(); 
  } 
 
  public static Singleton getInstance() { 
    return SingletonHolder.INSTANCE; 
  } 
 
  public static void main(String[] args) { 
    //测试Singleton会初始化几次 
    Singleton.getInstance(); 
    Singleton.getInstance(); 
    Singleton.getInstance(); 
    Singleton.getInstance(); 
    Singleton.getInstance(); 
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 嵌套类  # 嵌套类的详解  # 嵌套类实例  # 详解Java 中的嵌套类与内部类  # 深入理解Java嵌套类和内部类  # java 嵌套类的详解及实例代码  # Java嵌套类和内部类详解  # Java开发岗位面试被问到嵌套类怎么办  # 可以使用  # 访问控制  # 放在  # 不需要  # 是这样  # 就不  # 这就是  # 可以用  # 几次  # 希望能  # 要想  # 能有  # 还有一个  # 应用于  # 谢谢大家  # 比较多  # 回调  # 可以分为  # 象中  # 存了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  如何在服务器上三步完成建站并提升流量?  python中快速进行多个字符替换的方法小结  如何快速搭建支持数据库操作的智能建站平台?  LinuxShell函数封装方法_脚本复用设计思路【教程】  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  利用vue写todolist单页应用  如何用JavaScript实现文本编辑器_光标和选区怎么处理  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  Android实现代码画虚线边框背景效果  如何确认建站备案号应放置的具体位置?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  简历没回改:利用AI润色让你的文字更专业  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel如何与Pusher实现实时通信?(WebSocket示例)  JS实现鼠标移上去显示图片或微信二维码  如何解决hover在ie6中的兼容性问题  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  如何彻底删除建站之星生成的Banner?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  php json中文编码为null的解决办法  Laravel如何自定义分页视图?(Pagination示例)  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel如何创建自定义Facades?(详细步骤)  高端建站如何打造兼具美学与转化的品牌官网?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Thinkphp 中 distinct 的用法解析  微信小程序 canvas开发实例及注意事项  如何快速查询网址的建站时间与历史轨迹?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何挑选最适合建站的高性能VPS主机?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何在IIS中新建站点并配置端口与物理路径?  如何在宝塔面板中修改默认建站目录?  如何快速生成高效建站系统源代码?  网站优化排名时,需要考虑哪些问题呢?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Java垃圾回收器的方法和原理总结  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel如何使用Eloquent进行子查询