面试题提纲
1、关键字,private protected public static final 组合着问
访问控制符
同一个类中 | 同一个包中 | 不同包中的子类 | 不同包非子类 | |
---|---|---|---|---|
private | yes | |||
默认(包可访问) | yes | yes | ||
protected | yes | yes | yes | |
public | yes | yes | yes | yes |
其他修饰符
基本含义 | 修饰类 | 修饰成员 | 修饰局部变量 | |
---|---|---|---|---|
static | 静态的、非实例的、类的、 | 只能修饰内部类 | yes | |
final | 最终的、不可改变的 | yes | yes | yes |
abstract | 抽象的、不可实例化的 | yes | yes |
2、Object类里面有哪几种方法
九种方法
getClass():获取类对象
hashCode():获取hashCode的值
equals():比较对象的值和地址是否相等
notify():随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
notifyall():解除所有那些在该对象上调用wait方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
wait():导致线程进入等待状态,直到它被其他线程通过notify()或者notifyAll唤醒。该方法只能在同步方法中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
finalize():对象回收时调用
equals 和 hashCode方法,重写equals的原则()
其实当 equals 方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码
3、什么是向上转型
JAVA中的一种调用方式。向上转型是对A的对象的方法的扩充,即A的对象可访问B从A中继承来的和B复写A的方法。
Student extends Person
Person person = new Student()
向下转型是不安全的,容器出现错误,一种强转的过程
4、Exception和Error
Exception:出现的异常,java.lang.NullPointerException
Error: 出现错误
5、反射的用途
反射最重要的用途就是开发各种通用框架
6、HashMap实现原理(数组+链表),查找数据的时间复杂度
HashMap的实现原理--链表散列
1、底层有一个hash表,查询的速率快
2、HashMap集合是一个无序的集合。
LinkHashMap
LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
LinkHashMap集合是一个有序集合
7、List有哪些子类,各有什么区别
有序、带索引、可重复
1、Vector: 同步的
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
2、ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
3、LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
8、Java泛型机制,泛型机制的优点,以及类型变量
好处:
1、避免异常
2、把运行期异常,提升为编译期异常
3、集合中存储的元素类型统一了
4、从集合中取出的元素类型是泛型指定的类型,不需要进行大量的“向下转型”
弊端:
泛型是什么类型就是什么,只可以存储什么数据
导致集合中存储的元素缺乏多样性