exception:程序本身可以处理的异常,可以通过catch来捕获
error:程序无法处理的错误,比如虚拟机运行错误、内存不够、类定义错误
Checked Exception :受检查异常 ,Java 代码在编译过程中,如果受检查异常没有被 catch
或者throws
关键字处理的话,就没办法通过编译
Unchecked Exception :不受检查异常 ,Java 代码在编译过程中 ,我们即使不处理不受检查异常也可以正常通过编译
不一定;就比如说 finally 之前虚拟机被终止运行的话,finally 中的代码就不会被执行;
程序所在的线程死亡
关闭 CPU
适用范围(资源的定义): 任何实现 java.lang.AutoCloseable或者 java.io.Closeable 的对象
关闭资源和 finally 块的执行顺序: 在 try-with-resources 语句中,任何 catch 或 finally 块在声明的资源关闭后运行
使用泛型参数,可以增强代码的可读性以及稳定性
编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型。比如 ArrayList<Persion> persons = new ArrayList<Persion>()
这行代码就指明了该 ArrayList
对象只能传入 Persion
对象,如果传入其他类型的对象就会报错
泛型类:
泛型接口:
泛型方法:
框架的灵魂,赋予了我们在运行时分析类以及执行类中方法的能力
通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性
代码更加灵活、为各种框架提供开箱即用的功能提供了便利
分析操作类的能力的同时,也增加了安全问题,比如可以无视泛型参数的安全检查;反射的性能也要稍差点,不过,对于框架来说实际是影响不大的
一种特殊的注释,主要用于修饰类、方法或者变量,提供某些信息供程序在编译或者运行时使用
Service Provider Interface ;专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口
SPI 将服务接口和具体的服务实现分离开来,将服务调用方和服务实现者解耦,能够提升程序的扩展性、可维护性。修改或者替换服务实现并不需要修改调用方
通过 SPI 机制能够大大地提高接口设计的灵活性
需要遍历加载所有的实现类,不能做到按需加载,这样效率还是相对较低
当多个 ServiceLoader
同时 load
时,会有并发问题
序列化: 将数据结构或对象转换成二进制字节流的过程
反序列化:将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的过程
序列化的主要目的是通过网络传输对象或者说是将对象存储到文件系统、数据库、内存中
对于不想进行序列化的变量,使用 transient 关键字修饰。
transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被 transient 修饰的变量值不会被持久化和恢复。
关于 transient 还有几点注意:
transient 只能修饰变量,不能修饰类和方法。
transient 修饰的变量,在反序列化后变量值将会被置成类型的默认值。例如,如果是修饰 int 类型,那么反序列后结果就是 0。
static 变量因为不属于任何对象(Object),所以无论有没有 transient 关键字修饰,均不会被序列化
著作权归所有 原文链接:https://javaguide.cn/java/basis/java-basic-questions-03.html