-
抽象类和接口的区别
不同点:
抽象类可以定义构造器,接口不能。
抽象类可以有具体的方法和抽象方法,接口不能有具体方法。
接口中的成员全是public,抽象类成员可以private,public,protected,默认修饰符
抽象类中可以定义成员变量,接口只能是常量。
有抽象方法类必须声明为抽象类,抽象类没必要有抽象方法。
抽象类中包含静态方法,接口中不能有静态方法。
一个类只能继承一个抽象类,可以实现多个接口。
相同点:
不能实例化。可以将抽象类和接口类型作为引用类型。
-
抽象的(abstract)方法是否可同时是静态的(static), 是否可同时是本地方法(native),是否可同时被 synchronized?
抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。
本地方法是由本地代码(如 C++ 代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。
synchronized 和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。
-
final,finally,finalize区别
final是用于声明属性和方法以及类的
finally是异常处理的一个结构部分
finalize是object的一个类,这是一个被动的方法(其实就是回调方法),不需要我们调用。
-
error和exception的区别?
error是系统崩溃,虚拟机错误,应用程序无法克服和恢复的严重问题
所有异常的根类为 java.lang.Throwable
exception是异常,可以捕获,可以克服和恢复的问题
如果在catch中遇到了return或者异常等能使该函数终止的话那么有finally就必须先执行完finally代码块里面的代码然后再返回值.
-
获取当前时间
Calendar cal = Calendar.getInstance(); int i = cal.get(Calendar.YEAR); LocalDateTime dt = LocalDateTime.now(); int year = dt.getYear();
-
short s1 = 1; s1 = s1 + 1; 有错吗?short s1 = 1; s1 += 1 有错吗?
前者不正确,后者正确。
对于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 类型,因此 s1+1 运算结果也是 int 型,需要强制转换类型才能赋值给 short 型。
而 short s1 = 1; s1 += 1;可以正确编译,因为 s1+= 1;相当于 s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
-
整型字面量的值在-128 到 127 之间,那么不会 new 新的 Integer 对象,而是直接引用常量池中的Integer对象,所以上面的面试题中f1f2的结果是 true,而f3f4 的结果是false。
-
string,stringbuilder,stringbuffer区别
string和stringbuilder是线程安全的,stringbuffer是线程不安全的
string是不可变,stringbuild和stringbuffer是可变
stringbuilder在单线程中速度高于stringbuffer,因为stringbuffer在方法上加了synchronized关键字进行同步。
-
字符串转基本数据类型
调用包装类方法parseXXX(string)或者valueOf(string)
-
Java几种类型的流
按照处理数据的单位: 字节流和字符流。字节流继承于 InputStream 和OutputStream, 字符流继承于InputStreamReader 和 OutputStreamWriter 。
-
序列化标识
实现Serializable接口,该对象就可以序列化
-
克隆的二种方法
实现Cloneable接口并重写clone方法
实现Serializable接口,通过对象的序列化和反序列化实现克隆
-
arrayList,hashSet,hashMap都不是线程安全的,在集合中vector和hashtable是线程安全的
-
arrayList内部实现是使用数组的形式实现存储,实现了RandomAccess接口,对元素随机访问速度非常快,实现了Cloneable接口,能被克隆,
实现了Serializable接口,支持序列化。
-
set和list父类接口时Collection接口,list:arrayList和LinkedList
set:treeSet和HashSet map:hashMap,hashTable,TreeMap