java基础面试题


 

java 有哪些数据类型?

Integer a = 1000,Integer b = 1000,a==b 的结果是什么?那如果 a,b 都为1,结果又是什么?

Integer a = 1000,Integer b = 1000,a==b 结果为「false」

Integer a = 1,Integer b = 1,a==b 结果为「true」

这道题主要考察 Integer 包装类缓存的范围,「在-128~127之间会缓存起来」,比较的是直接缓存的数据,在此之外比较的是对象

 

创建对象有哪些方式

  • 1、new关键字
Person p1 = new Person();
  • 2.Class.newInstance
Person p1 = Person.class.newInstance();
  • 3.Constructor.newInstance
Constructor constructor = Person.class.getConstructor();
Person p1 = constructor.newInstance();
  • 4.clone
Person p1 = new Person();
Person p2 = p1.clone();
  • 5.反序列化
Person p1 = new Person();
byte[] bytes = SerializationUtils.serialize(p1);
Person p2 = (Person)SerializationUtils.deserialize(bytes);

抽象类和接口有什么区别

  • 抽象类要被子类继承,接口要被子类实现。
  • 抽象类可以有构造方法,接口中不能有构造方法。
  • 抽象类中可以有普通成员变量,接口中没有普通成员变量,它的变量只能是公共的静态的常量
  • 一个类可以实现多个接口,但是只能继承一个父类,这个父类可以是抽象类。
  • 接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
  • 抽象级别(从高到低):接口>抽象类>实现类。
  • 抽象类主要是用来抽象类别,接口主要是用来抽象方法功能。
  • 抽象类的关键字是abstract,接口的关键字是interface

什么时候使用抽象类和接口

  • 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
  • 假如有一个接口,五个实现类,现在的需求可能要往接口加一个方法,这样就要改动五个实现类,但需求只需要改动其中两个实现类,可以再定义一个抽象类去实现这个接口,在抽象类中新增这个方法,然后其他两个实现类实现这个抽象类就好了,或者使用 Java 8 中的新特性,在接口中新增默认方法或者静态方法

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

  • 浅拷贝:仅仅克隆基本类型变量,不克隆引用类型变量;
  • 深克隆:既克隆基本类型变量,又克隆引用类型变量;

try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

常见的异常类有哪些?

NullPointerException:空指针异常;
SQLException:数据库相关的异常;
IndexOutOfBoundsException:数组下角标越界异常;
FileNotFoundException:打开文件失败时抛出;
IOException:当发生某种IO异常时抛出;
ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出此异常;
NoSuchMethodException:无法找到某一方法时,抛出;
ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常;
NumberFormatException:当试图将字符串转换成数字时,失败了,抛出;
IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。
ArithmeticException当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。

待更。。。。。