点击观看Java基础面试题(下)
点击观看Java并发面试题
Object类中的方法
- clone方法:可以实现对象的浅复制来保护方法,只有实现了Cloneable接口才可以调用该方法,否则抛出 CloneNotSupportedException异常。主要是JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里讲参数改变,这是就需要类中复写clone方法。
- getClass方法:final方法,获得运行时类型。
- toString方法
- finalize方法:该方法用于释放资源。该方法一般由垃圾回收器来调用。
- wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁和CPU资源。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法后当前线程被唤醒(进入“就绪状态”),wait(long
timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。- hashCode方法:该方法用于哈希查找,可以减少在查找中使用equals 的次数,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
- notify方法:该方法唤醒在该对象上等待的某个线程。 notifyAll方法:该方法唤醒在该对象上等待的所有线程。
异常体系
Throwable的子类为Error和Exception。
Exception的子类为RuntimeException(运行时)异常和RuntimeException及其子类以外的(编译)异常(例如IOException)。
主要分为错误、运行时异常和编译时异常。
- Error:就是一些程序处理不了的错误,代表JVM出现了一些错误,应用程序无法处理。例如当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。
- 运行时异常:RuntimeException及其子类表示JVM在运行期间可能出现的异常,比如:使用空值对象引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException),此类异常属于不可查异常,在程序中可以选择捕获处理,也可以不处理
- 编译异常:如果程序中出现此类异常,必须对异常进行处理(try catch、throw)否则编译不通过。
throw与throws区别
throw关键字用在方法内部,只能用于抛出一种异常; throws关键字用在方法声明上,可以抛出多个异常,用来标识该方法可能抛出的异常列表
JAVA获取对象的四种方式
- 使用new创建对象
- 通过反射的方式
- 通过clone的方式
- 通过反序列化的方式
反射
Class class = Class.forname("com.heyjia.test.Hello");
Hello hello = (Hello)class.newInstance();
克隆
Hello hello1 = new Hello();
Hello hello2 = (Hello)hello1.clone();
Java中BIO、NIO、AIO的区别
- BIO是面向流的,NIO是面向缓冲区的;
- BIO是阻塞的,NIO是非阻塞的,阻塞就意味着一个线程调用read或write时,线程会被阻塞直到数据被读取或数据完全写入,而NIO的话,线程可以去做别的事情,数据读取到buffer中后,线程再去处理数据
- NIO的选择器允许一个单独线程监视多个输入通道,