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

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是运行时异常,编译器不要求强制处理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值