一.反射
(1)概念
Java反射是指运行时动态获取类信息 并且用这些信息来操作类或者对象等.通过反射
我们可以在运行时获取类的属性,方法,构造函数等信息, 并能动态的创建对象 调用方法 访问并修改并修改字段
反射提供了以下核心类
Class类:代表Java中的类或接口.通过Class类 Constructor类 Method类 Field类等
反射是Java重要的特征之一,它在很多框架和工具被广泛使用,就比如后面常用的Spring框架
(2)反射的原理
Java反射原理基于Java运行时数据区域和类的加载.当Java虚拟机(JVM)加载一个类时,它将字节码文件加载到内存中并且创建一个Class对象来表示类,Class对象中有类的完整信息
(3)反射的应用场景
1)框架和库:很多Java框架和第三库使用反射来实现动态加载.例如,Spring框架就是用反射实现依赖注入和AOP编程(注入和AOP编程后面聊 这里先知道就行)
2)序列化和反序列化:Java序列化和反序列化都使用了反射,因为反射教育在运行时动态查询和修改对象的字段(这点很重要)
3)单元测试:这个就是 测试框架用来发现和执行类的测试方法的
4)动态代理:用反射来实现代理对象的动态创建和方法调用的拦截
(4)反射的注意事项
1)性能开销:这个就是在性能上比普通Java代码开销大 所以如果性能要求很高的程序 应该尽量减少使用反射
2)范围权限:通过反射可以访问和修改类的私有类,这个很容易让程序崩溃 使用前一定要确定访问权限
3)异常处理 使用反射 可能抛出反射的异常 比如ClassNotFoundException 无法找到类这种,尽量根据编译器的提示来处理
总结:
反射很强 可以在程序运行时动态修改类的信息 甚至在创建对象 调用方法 都不用知道类的具体定义 但是一定要慎重使用 不可过度使用
二.异常
(1)概念
Java中 程序执行发生不正常或者不正确的行为称异常
(2)异常分类
Error:表示严重问题 通常是Java虚拟机或运行环境抛出的 应用程序通常不应该尝试处理这些错误
Excption:表示程序应该处理的异常 主要分为两种
1)Checked Excptions(受检异常): 比如IO异常和SQL异常 这些在编译时要求必须处理,如使用throws子句或者使用try-catch捕获并处理
2)Runtime Excptions(运行时异常):这种异常在编译时被忽略,运行时不需要显式捕获
常见的异常
1)算术异常
2)空索引异常
3)数组超过范围异常
4)编译就会提示的异常
这四个都相对简单 根据提示就可以自行解决 遇到报错不要慌 要以学习的心态对待异常
(3)异常处理关键词
try:用来监听可能抛出异常的代码块
catch:用于捕获并处理try中发生的异常
finally:无论是否有异常 这个都会被执行 通常用来清理缓存
throw:用于手动抛出异常
throws:用在方法签名中,用于声明方法可能抛出的异常
(4)异常处理原则
1)尽量捕获具体的异常类型,而不是使用通用的Exception类型捕获所有异常,以避免丢失有效信息
2)避免在finally块中使用return或者throw等终止方法的语句,防止影响正常传播
3)使用日志记录异常信息,而不是直接printStackTrace(),以便更好地管理和分析日志.
总结:
异常就是要多遇到 多处理 多认识 而不是遇到就害怕 出现异常很正常 每一次的自我处理异常对自身都是提升 并且通过try-catch或者throws可以给Java程序遇到问题时提供可控的错误处理方式