1、抽象类和接口的不同?
2、String和StringBuffer的区别以及StringBuffer和StringBuilder的区别?
3、java如何实现多线程?
参考回答:
1、(1)抽象类中可以有对方法的实现,而接口中的方法必须都是抽象的;
(2)接口中成员变量都是常量,有固定的修饰符public static final,抽象类成员变量的修饰符则不固定,可根据需要进行设定;
(3)接口既可被继承也可被实现,抽象类只能被继承;
(4)一个类可以实现多个接口,但它只能继承一个类。
2、String是不可变类,该类对象一旦被创建,就不能对其值进行修改,StringBuffer是可变类,该类对象被创建后,它的值也能被修改;
当实例化String对象时,有两种初始化方式:一是使用构造函数(String s=new String(“Hello”);),二是通过赋值的方式(String s=“Hello”;),而在实例化StringBuffer类对象时,只有利用构造函数这一种初始化方式。
StringBuilder和StringBuffer类似,都是可修改的字符串,但是StringBuffer是线程安全的,StringBuilder不是线程安全的。
在执行效率方面,StringBuilder最高,StringBuffer次之,String最低。所以一般情况下,如果操作的数据量较小,应优先使用String,如果数据量比较大,单线程建议使用StringBuilder类,多线程优先考虑StringBuffer。
3、java有三种方法来实现多线程:
(1) 继承Thread类,重写run方法
(2) 实现Runnable接口,并实现run方法
(3) 实现callable接口,重写call方法