1.java中是三大特征,各自特点
1、封装。把客观事物封装成抽象的类。并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
2、继承。它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
3、多态性。允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
2.简述 String StringBuffer StringBuilder 的作用。
String 为字符串常量,StringBuffer与StringBuilder字符串变量,从而效率:String<StringBuffer<StringBuilder(一般情况下);
StringBuffer是线程安全的,而StringBuilder为非线程安全;
String 是不可变的对象, 每次对 String 类型进行改变的等同于生成了一个新的 String 对象,经常改变内容的字符串不建议使用 String;
对StringBuffer 类改变,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用,经常改变内容的字符串建议使用 StringBuffer ;
StringBuffer 上的主要操作为 append 和 insert 方法。
3.什么是GC?
GC就是垃圾回收机制,在系统运行过程中,会产生一些无用的对象,这些对象占据着一定的内存.
如果不对这些对象清理回收无用对象的内存,可能会导致内存的耗尽.
所以垃圾回收机制回收的是内存。同时GC回收的是堆区和方法区的内存。
4. final, finally, finalize 的区别。
final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。
5。Abstract class 和 interface 有什么区别。
interface需要实现,要用implements,而abstract class需要继承,要用extends。
一个类可以实现多个interface,但一个类只能继承一个abstract class。
. interface强调特定功能的实现,而abstract class强调所属关系。
6. String 类是否可以被继承,为什么。
不可以被继承,因为该类被定义成final.
用final定义的原因:
(1) 为了实现字符串池。
(2) 为了线程安全
(3) 保证缓存的HashCode不可变性,提高性能
String类为什么是不可变的对象?
(1)字符串池的实现可以节约很多heap空间,如果String是可变的,指向串池中同一个对象的其他变量值也会发生改变
(2)因为String是不可变的,所以是多线程安全的,同一个字符串实例可以被多个线程共享,因为String的不可变性,线程安全。
(3)String在创建时,Hashcode就被缓存了,不需要重新计算。字符串的不可变性保证了hash码的唯一性。