JAVA基础面试复习(1)
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 是非线程安全的。
上一篇: Java面试基础(1)
下一篇: throw和throws的区别