欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA基础面试复习(1)

程序员文章站 2022-05-06 18:48:33
...

java面试复习

1、抽象类和接口
抽象类是对类的抽象,是对子类的约束
接口是对行为的抽象,是实现类模板

接口中的属性必须使用public static fianl修饰的原因:
public:方便实现类的外部使用(给别人用的)
static:接口无法创建对象,static修饰属性则可直接使用接口名访问
final:接口是模板规范,final修饰属性不能被随意修改

2、String、StringBuilder、StringBuffer
String 不可变,fianl修饰不可被继承
不可变原理:内部存放值的属性value数组是final修饰初始化后不能修改(String没有改变value数组方法)
StringBuilde:可变,线程不安全
StringBuffer:可变,线程安全(加锁synchronized)

3、 ==和equals
对于基本类型,== 判断两个值是否相等,基本类型没有 equals() 方法。
对于引用类型,== 判断两个变量是否引用同一个对象(内存地址),而 equals() 判断引用的两个对象是否等价。

String x = new String();
String y = new String();
System.out.println(x.equals(y)); // true
System.out.println(x == y);      // fals

4、equals方法和HashCode方法
Java对象的eqauls方法和hashCode方法(获取对象的哈希码(散列值))是这样规定的:

相等(相同)的对象(equals判断相等)必须具有相等的哈希码(或者散列码)。
如果两个对象的hashCode相同,它们并不一定相同。

5、sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间(休息),
把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复,
时间到了会继续运行。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,
进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后
本线程才进入对象锁定池准备获得对象锁进入运行状态。

5、泛型
类型的的参数化,编译时有效,编译后泛型擦除
比如:集合,创建时开发者也不知道将来用户会传什么类型数据,就采用用泛型,使用时在确定具体类型

6、try catch finally
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在方法返回调用者前执行。
在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,
而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,就会返回修改后的值

7、讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候, 他们的执行顺序。
此题考察的是类加载器实例化时进行的操作步骤(加载–>连接->初始化)。
父类静态代变量、
父类静态代码块、
子类静态变量、
子类静态代码块、
父类非静态变量(父类实例成员变量)、
父类构造函数、
子类非静态变量(子类实例成员变量)、
子类构造函数。

8、java三大特性封装、继承、多态
封装:将代码的详细实现进行封装,对外只提供访问的方法
比如:类的属性变成private私有的,提供get/set方法对属性进行操作
继承:子类继承父类的某些方法或属性(私有的不可以被继承)
多态:前提继承关系,子类重写父类方法,父类引用指向子类对象,父类引发调用方法时产生效果不同

9、
Math.round(1.5)=2
Math.round(1.6)=2
Math.round(1.4)=1
正数四舍五入
Math.round(-1.5)=-1
Math.round(-1.6)=-2
Math.round(-1.4)=-1
负数小数点后一位等于5,取整数部分符号位不变
负数小数点后一位不等于5,取最接接近的数比如-1到-2之间-1.6接近-2

Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应。
ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;
floor的英文意义是地板,该方法就表示向下取整,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;
round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,Math.round(11.5)=12 , Math.round(-11.5)=-11。

10、HashMap 和 Hashtable 有什么区别
HashMap是Hashtable的轻量级实现
存储:HashMap 运行 key 和 value 为 null(但是key只能有一个null,value可以有多个null),而 Hashtable 不允许。
线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。