[关闭]
@wxf 2018-05-14T02:28:44.000000Z 字数 8152 阅读 605

Java基础相关问题整理

面试系列


概念相关(浏览)

运算符号

重载和重写

重载(Overload)是指一个类中允许存在多个同名函数,参数不同;
重写(Override)是指子类重写定义父类方法。
注意:构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。

访问控制符

private:同类可见
default:同包可见
protected:同包可见、子类可见
public:全局可见

抽象类和接口

相同点:不能实例化,都包含抽象方法。
不同点:抽象类中允许有非抽象方法,接口只包含抽象方法(JDK1.8之前);类只能继承一个父类,可以实现多个接口。

接口:1.8新特性 默认方法(default修饰);1.9新特性 私有方法。

Java中常见关键字

static关键字有哪些作用

final关键字

transient关键字

volatile关键字

hashCode和equals方法的关系

hashCode()方法根据对象的地址或字符串的值来计算一个整型的哈希码;equals用于对比两个对象或字符串是否相同。
如果两个对象根据equals()方法比较是相等的,那么两个对象调用hashCode()方法返回的结构必须相等;
如果两个对象根据equals()方法比较是不相等的,那么两个对象调用hashCode()方法返回的结果不一定不相等。

什么是泛型、为什么要使用以及泛型擦除

  1. 泛型的本质是参数化类型。
  2. 使用泛型可以避免不同数据类型存储到同一对象中,使用时导致数据强转异常。
  3. 泛型擦除是指在编译期间,Java会将所有的泛型信息擦除掉,编译后再变成原始类型。

==和equals的区别

概念说明

代码说明

Integer

包装类型和基本数据类型的区别

Integer的缓存策略

Integer缓存是在java5中引入的一个有助于节省内存、提高性能的特性。下面我们用一段代码来展示一下Integer的缓存行为。

  1. public void testInteger(){
  2. Integer integer1 = 10;
  3. Integer integer2 = 10;
  4. if(integer1 == integer2)
  5. System.out.println("Equals!");
  6. else
  7. System.out.println("Not Equals!");
  8. //=======分割线=======
  9. Integer integer3 = 256;
  10. Integer integer4 = 256;
  11. if(integer3 == integer4)
  12. System.out.println("Equals!");
  13. else
  14. System.out.println("Not Equals!");
  15. }

在Java中,==比较的是对象的引用,而equals比较的是值。所以你有可能认为上面的两个判断结果都是false。但是奇怪的是,上面的两个判断结果却返回不同的布尔值。其结果如下:

Equals!
Not Equals!

String中的坑

第一坑、new String("ABC")究竟创建几个对象

new String("ABC")究竟创建几个对象

第二坑、equals()方法

在Stirng中equals()方法比较的是字符串的内容是否相同,其实现原理是根据char字符数组元素逐个进行比较的。

  1. # 源码如下:
  2. public boolean equals(Object anObject) {
  3. if (this == anObject) {
  4. return true;
  5. }
  6. if (anObject instanceof String) {
  7. String anotherString = (String) anObject;
  8. int n = value.length;
  9. if (n == anotherString.value.length) {
  10. char v1[] = value;
  11. char v2[] = anotherString.value;
  12. int i = 0;
  13. while (n-- != 0) {
  14. if (v1[i] != v2[i])
  15. return false;
  16. i++;
  17. }
  18. return true;
  19. }
  20. }
  21. return false;
  22. }
  23. # 通过上面的源代码可以看出:equals()首先做的是比较引用,如果引用是同一个对象,结束比较并返回true。如果引用不是同一个地址,判断是不是String的一个实例。同样,不是的话直接结束比较并返回false。如果是,则拿字符串的长度做循环的控制变量,拿字符串的字符数组做比较内容,进行循环比较。

第三坑、String、StringBuffer和StringBuilder的区别

异常

Error和Exception的区别和联系

throw 和 throws两个关键字有什么不同

throw是用来抛出异常的,包括自定义异常。如:throw new CustomException();
throws是用来声明异常的。

try-catch-finally-return执行顺序

概念说明

代码说明

Java中的序列化和反序列化

深入学习 Java 序列化

Java中的NIO、BIO、AIO

BIO:即IO,同步阻塞IO
NIO:同步非阻塞IO
AIO:异步非阻塞IO

IO和NIO的区别

标准IO是基于字节流和字符流进行操作;而NIO是基于通道和缓冲区进行操作,数据从通道读取到缓冲区中或者从缓冲区写入到通道。
NIO引入了选择器概念,选择器用于监听多个通道的事件(比如:链接打开、可读。可写),因此NIO可以通过一个线程监听多个数据通道。相比标准IO为每个连接创建一个线程,NIO大大降低了线程创建资源的开销。

序列化和反序列化

序列化是指将对象的状态信息转换为可以存储或传输形式的过程。通过序列化可以将对象的状态保存为字节数组,需要的时候再将字节数组反序列化为对象。

正则表达式

image_1c8d6bglhst11ebgrff1idl13ji13.png-251.3kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注