您的位置:首页 > 职场人生

面试知识点(第一弹:java基础)

2016-12-15 22:23 281 查看

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) {
swit
c576
ch (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是运行时异常,编译器不要求强制处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: