说说你对泛型的理解
原因:java集合有个缺点,把一个对象存入集合中后,集合就会“忘记”这个对象的数据类型,当再次取出该对象时,该对象的编译类型就变成了Object类型
所以说从Java 5开始,Java引入了“参数化类型”的概念,允许程序在创建集合时指定集合元素的类型,Java的参数化类型被称为泛型(Generic)
什么是泛型擦除
ArrayList<String>和ArrayList<Integer>在编译时是不同的类型,但是在编译完成后都被编译器简化成了ArrayList,这一现象,被称为泛型的类型擦除
List<? super T>与List<? extends T>有什么区别?
? 是类型通配符,List<?> 可以表示各种泛型List的父类,意思是元素类型未知的List;
List<? super T> 用于设定类型通配符的下限,此处 ? 代表一个未知的类型,但它必须是T的父类型;
List<? extends T> 用于设定类型通配符的上限,此处 ? 代表一个未知的类型,但它必须是T的子类型。
说一说你对Java反射机制的理解
在运行状态中,对于一个类,可以知道这个类的所有方法和属性。对于一个对象,可以调用它的所有方法和属性,这种动态获取类的信息和动态调用对象的方法和属性的功能叫反射机制。
Java反射在实际项目中有哪些应用场景?
JDBC创建数据库连接前,需要通过反射机制加载数据库的驱动程序
AOP中通过反射机制,创建目标对象的代理类
框架注解的对象获取使用了反射机制
说说java4种引用方式。
强引用:程序创建一个对象,并把这个对象赋给一个引用变量,程序通过该引用变量来操作实际的对象,强引用是必须的,不会被垃圾回收器回收
软引用:软引用是有用但不是必须的,只有在内存不足的时候才会回收该对象。
弱引用:弱引用也不是必须的,弱引用对象在jvm进行垃圾回收时,总会被回收
虚引用:虚引用主要用于跟踪对象被垃圾回收的状态,虚引用不能单独使用,虚引用必须和引用队列联合使用,如果一个对象跟虚引用关联,则跟没有引用一样,随时都有可能被回收。
遇到过异常吗,如何处理?
在Java中处理异常有三步:捕获异常、处理异常、回收资源
捕获异常:将业务代码放在try代码块中,当发生异常是,系统会为异常创建一个异常对象,然后由JVM在try代码块后寻找能够处理它的carch块,并将异常对象交给carch块处理。
处理异常:在carch中处理异常,应该先记录日志,便于以后追溯这个异常,根据异常的类型、结合当前业务情况,进行相应的处理。
回收资源:将关闭资源写在finally块内,无论是否产生异常,都会执行finally块内的代码。