Object类
Object类定义了哪些方法,各个方法的作用?
getClass()返回描述该类的class< T >对象
hashCode()和equals()用于Map和List中
toString()返回代表该类的字符串
notify()和wait()用户线程同步
clone()克隆该对象
finalize()当对象销毁时释放系统资源
equals()和“==”的区别
“==”判断两个对象是否是同一个对象
equals()判断两个对象的值是否相等
String类
String类需要注意的点
- 相同值的常量字符串引用的是同一个字符串
- 字符串是常量的,值不能改变,用“+”拼接两个字符串时实际会产生第三个字符串
- 高效处理字符串使用StringBuffer和StringBuilder。
- StringBuilder是StringBuffer的非线程安全版本,单线程模式下更高效。
String str1 = "abc";
String str2 = "123";
String str3 = "abc123";
String str4 = "abc" + "123";
String str5 = str1 + str2;
System.out.println(str3.equals(str4));// true
System.out.println(str3 == str4);// true
System.out.println(str3.equals(str5));// true
System.out.println(str3 == str5);// false
System.out.println(str3 == str5.intern());// true
Wrapper类
int和Integer的区别
int是基础数据类型,Integer是一个类,List,Map等数据结构只支持存储Object,所以需要Integer这类Wrapper对象。
Integer i = Integer.valueOf(1);
Integer.valueOf(1) == 1;// true
Integer.valueOf(1) == Integer.valueOf(1);// true
调用Integer.valueOf()时,-128到127会被缓存起来,多次调用时调用的是同一个对象,也就是说,Integer.valueOf(127) == Integer.valueOf(127)是true,但是Integer.valueOf(128) == Integer.valueOf(128)就是false了。
Integer.valueOf(1) == new Integer(1);// false
java只有值传递
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
test(list);
System.out.println(list);// 这时list里面还是只有1
}
public static void test(List<Integer> list) {
list = new ArrayList<Integer>();
list.add(2);
}
程序流程
switch
switch不能忽略break语句,没有break会执行满足条件的case后面的语句以及下面所有的case后面的语句知道结束或者遇到break语句。
public static void main(String[] args) {
switch (2) {
case 1:
System.out.println(1);
case 2:
System.out.println(2);// 会输出
case 3:
System.out.println(3);// 会输出
}
}
数据结构(List,Map,Set)
HashMap,HashTable,ConcurrentHashMap的区别
HashMap是非线程安全的,HashTable,ConcurrentHashMap是线程安全的,HashTable对整个散列表进行加锁,ConcurrentHashMap将散列表分成若干个子散列表,每个线程操作该Map时只对某个子散列表加锁,提高并发性。
Comparable和Comparator的区别
Comparator位于包Java.util下,而Comparable位于包 java.lang下
Comparable 是一个对象本身就已经支持自比较所需要实现的接口,自定义的类要在加入list容器中后能够排序,可以实现Comparable接口。而 Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,可以写一个比较器来完成两个对象之间大小的比较。可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。
List和Set的区别
List里的值可重复,Set里的值不可重复
OOP
面向对象的三大特征
继承,多态,抽象
interface和abstract class的区别
应用场景不同,interface定义契约,abstract class实现细节,对公有部分的抽象
Override和Overload的区别
Override是重写,发生在父类和子类之间,要求方法的签名完全一样;
Overload是重载,发生在同一个类里,要求同样的方法名不同的参数。
动态绑定和静态绑定
静态方法和final修饰的方法执行静态绑定,其他方法执行动态绑定。
public static class Base {
public void a() {
System.out.println("Base.a()");
b();
c();
d();
e();
}
final public void b() {
System.out.println("Base.b()");
}
protected void c() {
System.out.println("Base.c()");
}
private void d() {
System.out.println("Base.d()");
}
public static void e() {
System.out.println("Base.e()");
}
}
public static class Son extends Base {
public void a() {
System.out.println("Son.a()");
b();
c();
d();
e();
}
protected void c() {
System.out.println("Son.c()");
}
private void d() {
System.out.println("Son.d()");
}
public static void e() {
System.out.println("Son.e()");
}
}
public static void main(String[] args) {
Base base = (Base) new Son();
base.a();
System.out.println("------");
base.e();
/* 输出结果为:
Son.a()
Base.b()
Son.c()
Son.d()
Son.e()
------
Base.e()*/
}
Exception
RuntimeException和Exception的区别
Exception叫做强制受检异常,需要用户处理,而RuntimeException是运行时异常,编译器不要求强制处理。