当前位置: 首页 > news >正文

第7章 内部类与异常类

7.1 内部类

在一个类中定义另一个类,这样的类称为内部类,包含内部类的类称为内部类的外部类。

关系:

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

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

内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象,可以用protected和private修饰内部类。private修饰的内部类只能在外部类内部访问,protected修饰的内部类在同包和子类中可访问。

内部类的外嵌类的成员变量在内部类中有效,使得内部类和外嵌类的交互更加方便。内部类可以访问外嵌类的成员变量,外嵌类成员变量在内部类中有效

内部类对应的字节码文件的名字格式是“外嵌类名$内嵌类名”

内部类可以是final类。final修饰内部类表示该内部类不能被继承,和普通类被final修饰的作用类似。

内部类可以被修饰为static内部类,static内部类不能操作外嵌类中的实例成员变量(实例成员变量依赖于类的实例,而static内部类不依赖外嵌类的实例)

非静态内部类不能声明静态变量(类变量),静态内部类可以声明静态变量

非内部类不可以是static类

7.2 匿名类

没有显示地声明一个类的子类,但又想用子类创建一个对象

匿名类是一个子类,无名可用,不能用匿名类声明对象,但可以直接用匿名类创建一个对象

匿名类特点:

匿名类可以继承父类的方法,也可以重写父类的方法

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

匿名类可以访问外嵌类中的成员变量和方法,在匿名类的类体中不可以声明static成员变量和static方法(匿名类没有名字,也不是一个完整的类定义,它不能有静态成员变量和静态方法。静态成员属于类本身,而匿名类没有独立的类结构来承载静态成员。)

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

匿名类没有类名,不能像普通类那样声明对象,但可以在定义时直接创建对象

编译器会给匿名类一个名字匿名类没有显式的名字,编译器也不会给它分配一个可直接引用的名字。虽然编译器在内部会有一些标识处理匿名类,但从编程角度不能像普通类那样使用一个名字去引用它。

匿名类不能被继承,本质上是隐式的final类

匿名类必须在定义时同时创建实例,而抽象类不能被实例化,所以匿名类不能是抽象类

非匿名内部类和普通类一样,可以实现接口,实现接口中的抽象方法,具有类的常规特性。

非匿名内部类和普通类类似,可以有子类

7.3 异常类

7.3.1 try-catch语句

try{包含可能发生异常的语句
}
catch(ExceptionSubClass1 e){...
}
catch(ExceptionSubClass2 e){...
}

7.3.2 自定义异常类

throws关键字

在 Java 中,throw用于在代码中主动抛出一个异常对象,比如throw new RuntimeException("异常信息"); 。

而throws关键字用于方法声明处,声明该方法可能抛出的异常类型。

7.4 断言

7.5 应用举例

http://www.xdnf.cn/news/179551.html

相关文章:

  • 【蓝桥杯省赛真题57】Scratch穿越病毒区 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
  • Vue.js 核心特性解析:响应式原理与组合式API实践
  • 论文检索相关网站
  • ‌RISC-V架构的低功耗MCU多电压域优化设计
  • final static 中是什么final static联合使用呢
  • 【算法刷题】
  • MySQL 8.0 忘记登录密码 mysqld --init-file重置
  • AG32 MCU系列三合一芯片,MCU+ 2K cpld + 64Mbit PSRAM,一颗芯片同时满足多种需求。
  • 清华团队提出时序聚类数据库内高效方案,已被SIGMOD 2025接收
  • 【Tools】chezmoi 跨多台不同的机器管理 dotfiles 的工具
  • 缓存并发更新的挑战
  • Python生活手册-元组:保险柜与瑞士军刀
  • 基于javaweb的SpringBoot新闻发布系统设计与实现(源码+文档+部署讲解)
  • 业务中台与数据中台:企业数字化转型的核心引擎
  • 解决qnn htp 后端不支持boolean 数据类型的方法。
  • C语言-- 深入理解指针(4)
  • 学习spark总结
  • 基于SSM的“融资租赁管理系统”的设计与实现(源码+数据库+文档)
  • QT开发技术【QChart添加跟随鼠标的十字线】
  • 信号量函数
  • MySQL快速入门篇---增删改查(下)
  • Neowise Labs Contest 1 (Codeforces Round 1018, Div. 1 + Div. 2)
  • HTML基础完全解析
  • Astah Professional反向建模C++类图
  • 【记录解决问题】--vue select下拉框排除已选择option
  • MCP协议:AI生态的统一标准
  • LeetCode 24 两两交换链表中的节点
  • 半导体行业如何开展风险管理?有没有半导体风控案例参考?
  • 反序列化漏洞2
  • 贪吃蛇游戏demo