Java的那些可能会遇到的面试题

试题一

问:Overload 和 Override 的区别。Overload的方法是否可以改变返回值的类型?

      答:首先,Overload是方法的重载,而Override是方法的重写,其中两者的区别的是:

  • 发生的位置:

            重载——发生在子类中

            重写——发生同一个类中

  • 参数列表:

            重载——与被重载的方法中的参数必须不同

            重写——与被重载的方法中的参数必须一致

  • 返回值类型:

            重载——与返回值类型无关

            重写——与被重写的方法返回值一致

  • 访问权限:

            重载——与访问权限无关

            重写——子类在重写方法时的权限不能低于父类的权限

所以,Overload——重载方法的时候是跟返回值无关的,即可以改变返回值

试题二

问:String 和 StringBuilder、StringBuffer 的区别?

      答:首先,三者都能用来接受字符串数据,而三者的区别在于:

  • 在字符修改上:

            String是不可修改字符序列,而StringBuilder和StringBuffer是可变字符序列

  • 在使用效率上:

            String和StringBuilder使用的效率要比StringBuffer要低一些

  • 在线程安全上:

            StringBuffer的线程相对String和StringBuilder两者来说要安全些

  • 在初始化上:

            String能够赋空值而StringBuilder与StringBuffer则不能

试题三

问:抽象类(abstractclass)和接口(interface)有什么异同?

            答:

  • 相同点:

    • 两者均不能被实例化
    • 两者的抽象方法均不能具体实现
  • 不同点:

    • 抽象类要子类去extends(继承)从而实现实例化,而接口则是靠子类去implements(实现接口)从而实现实例化
    • 接口只能有抽象方法,而抽象类中不仅可以存在着抽象方法,还能有其他的非抽象方法,其中包括有其构造方法
    • 接口中定义的是公共静态常量,而抽象类中定义的是普通变量
    • 抽象类只能是被单继承,而接口是可以被多个类实现

试题四

问:final、finally 和 finalized 的区别?

            答:

  • final:

    • 可用于修饰属性、方法、类
      • 用于修饰属性时表示:属性不可改变,即表示属性是一个固定的常量值
      • 用来修饰方法时表示:方法不可覆盖,即表示方法不能被重载等
      • 用来修饰类时表示:类不可继承,即成为了一个final了,不能被继承
  • finally:

    • 用于对异常的处理,只能在try/catch语句中使用,表示,在非直接终止JVM(虚拟机)的情况下,总是在最后执行的语句
  • finalize:

    • 用于对资源的回收、垃圾的清理等。是Object类中的一种方法

注意:final是Java中的关键字,一种修饰符,finally是Java中的一种异常处理机制,finalize是JavaScript中的一种方法名

试题五

问:throw 和 throws 的区别、及处理方式?

            答:

  • 相同点:

    两者均为消极的处理异常方式,并未真正对异常进行相应的处理,而只是抛出异常

  • 不同点:

    • throw是语句抛出的异常,而throws则是方法抛出异常
    • throw出现的位置在函数头,而throws则是出现在方法体中
    • throws抛出异常的异常有方法体内部的try/catch语句进行处理,而throws是由方法的调用者去进行异常处理
  • 处理方式:两者的异常抛出均由try/catch语句进行捕获与处理

试题六

问:&和&&的区别?

            答:两者均可用来对两边的数据进行逻辑运算从而得出真假的结论

区别:
&在做运算时,会分别对两边的数据进行逻辑判断,最后在对两者的结果再进行一次运算而得出真假的结论,而&&在做运算时,只要左边运算出来的结果为flase,就不会再对右边的数据进行判断真假了,同时得出flase(假)的结果

例如:我需要先判断3-1的值会不会比6-1的值大,然后再通过这个等出来的结果和9-1的值会不会比8+1的值大的结果去做判断:(3-1>6-1)&(9-1>8+1)(3-1>6-1)&&(9-1>8+1),前者&的两端都要进行判断,而&&在判断到(3-1>6-1)为false时就直接输出结果为false

试题七

问:this、super关键字的用法?

            答:

  • this关键字:
    • 代表的是当前对象的引用,该用法只能在方法的内部使用
    • this不能用于静态方法中
    • this可以用来调用重载的构造方法
  • super关键字:
    • 在子类的成员中,可以用来访问父类的成员变量
    • 在子类的成员方法中,可以用来访问父类的成员方法
    • 在子类的构造方法中,可以用来访问父类中的成员方法

试题八

问:静态变量和实例变量区别?

            答:

  • 区别
    • 静态变量是独立存在的变量,存放在类中,通过类名去调用,而是实例变量相当于类的属性,在初始化后若未被使用则会被视为垃圾回收
    • 存储区域:
      • 静态变量存储在静态存储区
      • 普通变量存储在堆中
    • 相关联系:
      • 静态变量与类相关
      • 实例变量与实例相关
    • 内存分配上的不同
    • 生命周期的不同

试题九

问:switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

            答:

首先,Switch语句的内容为整数和枚举类型,即为int、byte、integer、short、char的类型,而String和Long类型不行

试题十

问:List、Map、Set三个接口存取元素时,各有什么特点?

            答:

  • List:
    • 以特定的索引来存储元素,同时可以有重复的元素
  • Map:
    • 保存键值对(key-values) 映射,映射关系是一对一或者多对一的
  • Set:
    • 不能存放相同的元素
      希望对大家有帮助,谢谢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值