Checked Exception和Unchecked Exception有啥区别
咋用try-with-resources代替try-catch-finally
Java异常类层次结构图
Exception和Error有啥区别
- Exception:程序本身可以处理的异常,可以通过catch来进行捕获。
- Error:Error属于程序无法处理的错误,如果出现异常线程就直接结束。
Checked Exception和Unchecked Exception有啥区别
- Checked Exception就是编译异常(常见的有SQL异常,超时异常,找不到方法异常)
- Unchecked Exception就是运行异常(常见的有算术异常,数组下标越界异常,空指针异常)
Throwable类常用方法有哪些
- String getMessage():返回异常发生时的详细信息。
- String toString():返回异常发生的简要描述。
- String getLocalizedMessage():返回异常对象的本地化信息。
- void printStackTrace():在控制台上打印Trowable对象封装的异常信息。
try-catch-finally如何使用
将可能出现异常的放在try代码块中,对异常的处理放在 catch代码块中,finally放最后肯定执行的(除了cpu关闭,所在线程提前死亡或者JVM提前死亡)。
咋用try-with-resources代替try-catch-finally
- 适用范围(资源的定义): 任何实现 java.lang.Closeable或者 java.io.Closeable 的对象
- 关闭资源和 finally 块的执行顺序:在 -try-with-resources 语句中,任何 catch 或 finally 块在声明的资源关闭后运行。
异常使用有哪些需要注意的地方
- 1.尽量不要捕获类似Exception这样通用的异常,而应该捕获特定的异常。
- 2.只在需要try-catch的地方try-catch,try-catch的范围能小则小
- 3.不要把异常定义为静态变量,因为这样会导致异常栈信息错乱。
- 4.不要延迟处理异常
啥是泛型?有啥作用
Java泛型是JDK5中引入的一个新特性 作用很直接,就是能把运行时异常转为编译时异常
泛型的使用方式有哪几种
泛型一般有三种使用方式
- 泛型类
- 泛型接口
- 泛型方法
何为反射
Java的反射机制就是指在运行获取类的结构信息(如方法,字段,构造函数)并操作对象的一种机制。
反射的优缺点
优点
- 反射可以让我们的代码更加灵活、为各种框架提供开箱即用的功能提供了便利。
缺点
- 不过,反射让我们在运行时有了分析操作类的能力的同时,也增加了安全问题,比如可以无视泛型参数的安全检查(泛型参数的安全检查发生在编译时)。
- 另外,反射的性能也要稍差点,不过,对于框架来说实际是影响不大的。
相关阅读Java Reflection: Why is it so slow?
反射的应用场景
主要运用在框架的开发和动态代理的实现
啥是注解
- 1.注解其实就是一个标记,可以标记在类上、方法上、属性上等,标记自身也可以设置一些值。
- 2.有了标记之后,就可以在解析的时候获取标记,然后做特别处理。
- 3.注解的使用可以通过编译时、类加载时或者运行时的反射机制来实现特殊的处理逻辑。
注解的解析方法有哪几种
-
编译期直接扫描: 比如某个方法使用@Override 注解,编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。
-
运行期通过反射通过反射处理: 像框架中自带的注解(比如 Spring 框架的 @Value、@Component)都是通过反射来进行处理的。
啥是SPI
SPI就是我调用你实现的接口(其他的不用管),简单来说就是用就完了。
SPI和API有啥区别
-
调用方直接调用实现方接口实现服务就是API
-
实现方实现实现方提供的接口从而提供服务就是SPI
SPI的优缺点
- 需要遍历加载所有的实现类,不能做到按需加载,这样效率还是相对较低的。
- 当多个 ServiceLoader 同时 load 时,会有并发问题。
啥是序列化?啥是反序列化?
- 序列化就是将对象转化为能在网络中传输的,通常是二进制字节流,也可以是JSON,XML等文本格式。
- 反序列化就是将在网络中传输的转化为对象的过程。
如果有些字段不想进行序列化咋办
可以用transient关键字修饰
- transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;
- 当对象被反序列化时,被 transient 修饰的变量值不会被持久化和恢复。
常见的序列化协议有哪些
- JDK 自带的序列化方式一般不会用 ,因为序列化效率低并且存在安全问题。比较常用的序列化协议有 Hessian、Kryo、Protobuf、ProtoStuff,这些都是基于二进制的序列化协议。
- 像 JSON 和 XML 这种属于文本类序列化方式。虽然可读性比较好,但是性能较差,一般不会选择。
为啥不推荐使用JDK自带的序列化
- 不能兼容其他的语言
- 性能差
- 存在安全问题
Java IO流了解吗
- Java IO流简单来说就是输入和输出,输入到计算机内存中进行处理,而输出就是输出到外部存储器进行存储(比如磁盘等之类的外部存储器)
- Java IO流主要有四个抽象类,分别是InputStream/Reader:所有的输入流的基类,前者是字节输入流,后者是字符输入流, OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流。
I/O流为啥要分为字节流和字符流呢
- 部分场景需要对字符进行操作,用字符流更加高效
- 如果我们不知道编码类型的话使用字节流的过程中很容易出现乱码问题。
啥是语法糖
编程语言为了方便程序员开发程序而设计的一种特殊语法。
Java有哪些常见的语法糖
lambda表达式,泛型,自动拆装箱,内部类,增强for循环等等。