多年开发经验总结的Java面试题——(一)

  • 来源:网络
  • 更新日期:2020-07-21

摘要:一、基本数据类型和封装类有什么区别(更多面试题推荐:java面试题)原始类型是类,引用类型是对象。原始类型大小比较用"==",引用类型大小比较用"equals"。引用类型可以被序列化,原始

一、基本数据类型和封装类有什么区别

(更多面试题推荐:java面试题)

原始类型是类,引用类型是对象。

原始类型大小比较用"==",引用类型大小比较用"equals"。

引用类型可以被序列化,原始类型不行。

在集合类中只能使用引用类型,不能使用原始类型。

基本数据类型不用new,封装类需要new。

基本数据参数传递是以值传递,封装类型是以地址传递的。

二、String、StringBuffer、StringBuilder三者之间的区别

String是字符串常量,StringBuffer、StringBuilder是字符串变量。

String创建的字符内容不可变(String底层char数组是final的),StringBuffer、StringBuilder的字符内容是可加长的。

StringBuffer是线程安全的,StringBuilder线程不安全的,但是速度快(因为它不会为线程安全消耗性能)。

三、String为什么不可变?

虽然String、StringBuffer和StringBuilder都是final类,它们生成的对象都是不可变的,而且它们内部也都是靠char数组实现的。

但是不同之处在于,String类中定义的char数组是final的,而StringBuffer和StringBuilder都是继承自AbstractStringBuilder类,它们的内部实现都是靠这个父类完成的,而这个父类中定义的char数组只是一个普通是私有变量,可以用append追加。

(相关教程推荐:java入门教程)

因为AbstractStringBuilder实现了Appendable接口。

四、运行时异常和非运行时异常的区别

运行时异常是运行时报错:比如ClassCastException(类转换异常)、IndexOutOfBoundsException(数组越界)、NullPointerException(空指针)、ArrayStoreException(数据存储异常,操作数组时类型不一致)、IO操作的BufferOverflowException异常。

(视频教程推荐:java视频教程)

非运行时异常是还未运行可见的错误,可以用try、catch捕获异常。

五、简述一下面向对象的特征,并举例说明你对面向对象的理解

面向对象的特征归结为封装继承多态,把现实世界的事物的属性、行为特征抽象出来放到一个容器里(类),比如人类,人的走、听、吃、说等动作可以归结为类里的方法,但又是人类的共同点,人有身高、体重归结为类里的属性。

封装:就是设计者把不愿意透露给使用者的那部分代码就是封装过的,通过修饰词private(权限最小)、public(权限最大)、protected、default(属性前默认为该类型),这些才能起到限制类对象权限的作用。

继承:子类继承父类的过程,继承者可以拥有父类全部方法属性。好处是提高代码复用性,子类只需要写特有的功能或者字段可以把公共的代码抽出到父类里面。

多态:通过父类统一子类方法属性,然后通过调用,可以任意使用子类方法,优化代码量,原理是子类对父类方法进行重写。