面试题:Java基础
图
收集常见的面试题,重面试题的角度对Java基础相关的知识进行加深,包含基础语法、基础定义、基础理论等知识

final在Java中有什么作用?

  • final修饰类,表明此类不能被继承
  • final修饰方法,表示此方法不能被子类重写
  • final修饰变量,表示不可修改

普通类和抽象类有哪些区别?

  • 抽象类必须用abstract来修饰,且不能被实例化
  • 抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类
  • 有抽象方法的类一定是抽象类
  • 抽象方法不能声明为静态、不能被static、final修饰

Java中IO流分为几种?

  • 按流划分,可以分为输入流和输出流(inputStream、outputStream)
  • 按单位划分,可以分为字节流和字符流(reader、writer)

BIO、NIO、AIO有什么区别?

  • BIO:同步阻塞,一个连接一个线程
  • NIO:同步非阻塞,一个请求一个线程
  • AIO:异步非阻塞,一个有效请求一个线程

Java实现序列化的作用?

Java序列化需要实现Serializable接口或者Externalizable接口

  • 方便在远程调用时对象的解码与编码
  • 为了在程序中能直接以对象的形式进行保存、直接进行调用

平常实体类没有实现Serializable接口,为何也能存进数据库?

是因为在声明变量的时候,如String、int、Boolean时,数据类型已经实现了序列化

其他:子类实现序列化而父类没有实现序列化,在序列化子类时,子类的属性状态会被写入而父类的属性状态不会被写入

什么情况下需要克隆?

想对一个对象进行复制,而又需要保留原有对象

如何实现对象克隆?

  • 实现Cloneable接口,重写clone方法
  • 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深克隆
  • BeanUtils,apache和Spring都提供了bean工具,只是这都是浅克隆

深拷贝和浅拷贝区别是什么?

  • 浅拷贝:仅仅克隆基本类型变量,不克隆引用类型变量,拷贝对象的更改会影响原有对象
  • 深克隆:既克隆基本类型变量,又克隆引用类型变量,拷贝对象的更改不会影响原有对象

throw和throws的区别

  • throw作用在方法内,表示抛出具体的异常,由方法体内的语句处理
  • throws作用在方法上,表示抛出异常,由调用者进行处理

String、StringBuilder、StringBuffer

  • String是不可变对象,每次更改都会产生新的对象
  • StringBuilder是可变对象,效率高,但是线程不安全,多用于单线程
  • StringBuffer是可变对象,效率不如StringBuilder,但线程安全,多用于多线程

StringBuilder和StringBuffer底层使用的是char数组,支持扩容,避免了对象的创建。两者的默认初始容量都是16

Java中的引用类型

  • 强引用:默认的引用类型,如果对象不为null,垃圾回收器将永远不会回收被引用的对象
  • 软引用:在内存足够时软引用不会被回收,内存不足时,系统才会回收软引用对象
  • 弱引用:进行垃圾回收时,弱引用就会被回收
  • 虚引用:Java虚拟机不负责清理虚引用,但是它会把虚引用放到引用队列里