美文网首页面试相关java
面试相关之 Java 基础

面试相关之 Java 基础

作者: Kevin_小飞象 | 来源:发表于2019-02-13 15:19 被阅读24次

    1. Object有哪些公用方法?
    参考回答:
    equals(): 和==作用相似
    hashCode():用于哈希查找,重写了equals()一般都要重写该方法
    getClass(): 获取Class对象
    wait():让当前线程进入等待状态,并释放它所持有的锁
    notify()&notifyAll(): 唤醒一个(所有)正处于等待状态的线程
    toString():转换成字符串

    2. 面向对象编程的四大特性及其含义?
    参考回答:
    抽象:对现实世界的事物进行概括,抽象为在计算机虚拟世界中有意义的实体
    封装:将某事物的属性和行为包装到对象中,构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,并且尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系
    继承:子类继承父类,不仅可以有父类原有的方法和属性,也可以增加自己的或者重写父类的方法及属性
    多态:允许不同类的对象对同一消息做出各自的响应。

    3. String、StringBuffer 和 StringBuilder 的区别?
    参考回答:
    String 是字符串常量,而 StringBuffer、StringBuilder 都是字符串变量,即 String 对象一创建后不可更改,而后两者的对象是可更改的:
    StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,这是由于 StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁
    String 更适用于少量的字符串操作的情况,StringBuilder 适用于单线程下在字符缓冲区进行大量操作的情况,StringBuffer 适用于多线程下在字符缓冲区进行大量操作的情况。

    4. String a=""和String a=new String("")的的关系和异同?
    参考回答:
    通过String a=""直接赋值的方式得到的是一个字符串常量,存在于常量池;注意,相同内容的字符串在常量池中只有一个,即如果池已包含内容相等的字符串会返回池中的字符串,反之会将该字符串放入池中
    通过new String("")创建的字符串不是常量是实例对象,会在堆内存开辟空间并存放数据,且每个实例对象都有自己的地址空间。

    5. Object的equal()和==的区别?
    参考回答:
    equals():是 Object 的公有方法,具体含义取决于如何重写,比如 String 的 equals() 比较的是两个字符串的内容是否相同
    "==" :对于基本数据类型来说,比较的是两个变量值是够是否相等,对于引用类型来说,比较的是两个对象的内存地址是否相同

    6. 装箱、拆箱什么含义?
    参考回答:
    装箱就是自动将基本数据类型转换为包装器类型。
    拆箱就是自动将包装器类型转换为基本数据类型。

    7. int 和 Integer 的区别?
    参考回答:
    Integer 是 int 的包装类,int 则是 java 的一种基本数据类型
    Integer 变量必须实例化后才能使用,而 int 变量不需要
    Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
    Integer的默认值是null,int的默认值是0。

    8. 遇见过哪些运行时异常?异常处理机制知道哪些?
    参考回答:
    Throwable 继承层次结构,可见分成两大类 Error 和 Exception:
    Error(错误):指程序无法恢复的异常情况,表示运行应用程序中较严重的问题;发生于虚拟机自身、或者在虚拟机试图执行应用时,如Virtual MachineError(Java虚拟机运行错误)、NoClassDefFoundError(类定义错误);属于不可查异常,即不强制程序员必须处理,即使不处理也不会出现语法错误。
    Exception(异常):指程序有可能恢复的异常情况,表示程序本身可以处理的异常。又分两大类:
    RuntimeException(运行时异常):由程序自身的问题导致产生的异常;如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常);属于不可查异常。
    非运行时异常:由程序外部的问题引起的异常;除了RuntimeException以外的异常,如FileNotFoundException(文件不存在异常);属于可查异常,即强制程序员必须进行处理,如果不进行处理则会出现语法错误。

    9. 什么是反射,有什么作用和应用?
    参考回答:
    含义:在运行状态中,对于任意一个类都能知道它的所有属性和方法,对于任何一个对象都能够调用它的任何一个方法和属性。
    功能:动态性,体现在:在运行时判断任意一个类所具有的属性和方法; 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时调用任意一个对象的方法;生成动态代理
    应用:反射&泛型

    10.什么是内部类?有什么作用?静态内部类和非静态内部类的区别?
    参考回答:
    内部类就是定义在另外一个类里面的类。它隐藏在外部类中,封装性更强,不允许除外部类外的其他类访问它;但它可直接访问外部类的成员。静态内部类和非静态内部类的区别有:

    静态内部类是指被声明为static的内部类,可不依赖外部类实例化;而非静态内部类需要通过生成外部类来间接生成。
    静态内部类只能访问外部类的静态成员变量和静态方法,而非静态内部类由于持有对外部类的引用,可以访问外部类的所用成员。

    11. final、finally、finalize()分别表示什么含义?
    参考回答:
    final关键字表示不可更改,具体体现在:
    final修饰的变量必须要初始化,且赋初值后不能再重新赋值
    final修饰的方法不能被子类重写
    final修饰的类不能被继承

    finally:和try、catch成套使用进行异常处理,无论是否捕获或处理异常,finally块里的语句都会被执行,在以下4种特殊情况下,finally块才不会被执行:
    在finally语句块中发生了异常
    在前面的代码中用了System.exit()退出程序
    程序所在的线程死亡
    关闭CPU

    finalize():是Object中的方法,当垃圾回收器将回收对象从内存中清除出去之前会调用finalize(),但此时并不代表该回收对象一定会“死亡”,还有机会“逃脱”。

    12. 重写和重载的区别?
    参考回答:
    重写表示子类重写父类的方法;
    重载表示有多个同名函数同时存在,区别在于有不同的参数个数或类型。

    13. 抽象类和接口的异同?
    参考回答:
    使用上的区别:一个类只能继承一个抽象类却可以实现多个接口
    设计上的区别:接口是对行为的抽象,无需有子类的前提,是自上而下的设计理念;抽象类是对类的抽象,建立于相似子类之上,是自下而上的设计理念。

    14. 为什么匿名内部类中使用局部变量要用final修饰?
    参考回答:
    一方面,由于方法中的局部变量的生命周期很短,一旦方法结束变量就要被销毁,为了保证在内部类中能找到外部局部变量,通过final关键字可得到一个外部变量的引用;另一方面,通过final关键字也不会在内部类去做修改该变量的值,保护了数据的一致性。

    相关文章

      网友评论

        本文标题:面试相关之 Java 基础

        本文链接:https://www.haomeiwen.com/subject/hwhdeqtx.html