每日10道java面试题,日积月累 day 5

五常龙凤山风景名胜区

1. 什么叫对象序列化,什么是反序列化,啥情况要实行序列化

  • 对象序列化,将对象中的数据编码为字节序列的过程。
  • 反序列化:将对象的编码字节重新反向解码为对象的过程。
  • 当 Java 对象需要在网络上传输 或者 持久化存储到文件中时,就需要对 Java 对象进行序列化处理。

2. 什么是反射机制?

反射简单来说,就是动态加载对象,并对对象进行剖析。在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

3. this和super关键字的区别

  1. .属性的区别:
    (1)this访问本类中的属性,如果本类没有这个属性则访问父类中的属性。
    (2)super访问父类中的属性。
  2. .方法的区别:
    (1)this访问本类中的方法,如果本类没有这个方法则访问父类中的方法。
    (2)super访问父类中的方法。
  3. 构造的区别:
    (1)this调用本类构造构造,必须放在构造方法的首行。
    (2)super调用父类构造,必须放在子类构造方法首行。

4. 反射机制的优缺点?

优点: 反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。
缺点:性能问题,使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。

5. 动态代理是什么,有什么应用

当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等。可以给这个类创建一个代理,故名思议就是创建一个新的类,这个类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类。具有解耦意义,灵活,扩展性强。
Spring的 AOP 功能模块就是采用动态代理的机制来实现切面编程,日志输出,事务

6. throw 和 throws 的区别?

throws是用来声明一个方法可能抛出的所有异常信息。
throw则是指抛出的一个具体的异常类型。

7. 常见异常?

  1. 算术异常类:ArithmeticExecption
  2. 空指针异常类:NullPointerException
  3. 类型强制转换异常:ClassCastException
  4. 操作数据库异常:SQLException
  5. 数组下标越界异常:ArrayIndexOutOfBoundsException

8. try-catch-finally 中哪个部分可以省略?

catch 可以省略

原因

更为严格的说法其实是:try只适合处理运行时异常,try+catch适合处理运行时异常+普通异常。也就是说,如果你只用try去处理普通异常却不加以catch处理,编译是通不过的,因为编译器硬性规定,普通异常如果选择捕获,则必须用catch显示声明以便进一步处理。而运行时异常在编译时没有如此规定,所以catch可以省略,你加上catch编译器也觉得无可厚非。

理论上,编译器看任何代码都不顺眼,都觉得可能有潜在的问题,所以你即使对所有代码加上try,代码在运行期时也只不过是在正常运行的基础上加一层皮。但是你一旦对一段代码加上try,就等于显示地承诺编译器,对这段代码可能抛出的异常进行捕获而非向上抛出处理。如果是普通异常,编译器要求必须用catch捕获以便进一步处理;如果运行时异常,捕获然后丢弃并且+finally扫尾处理,或者加上catch捕获以便进一步处理。

至于加上finally,则是在不管有没捕获异常,都要进行的“扫尾”处理。

9. 常见异常处理方式

  • 直接抛出异常
  • 封装异常再抛出
  • 捕获异常
  • 自定义异常
  • try-catch-finally

10. jvm如何捕获异常

在编译生成的字节码中,每个方法都会有一个异常表。异常表的每一条都代表一个异常处理器。有from指针,to指针、target指针和锁捕获的异常类型构成。这下指针的值是字节码索引bci,用来定位字节码。from和to指针标示了异常处理器要监控的范围,即try代码块的内容。target指针则是catch代码块的起始位置。当发生异常时,jvm会从上至下遍历所有的数据,当触发异常的字节码索引在某个from-to范围内,jvm就会判断抛出异常的类型和该条要捕获的异常的类型匹配的时候,jvm的控制流就会转向该catch块的字节码。如果遍历完之后还没找到对应的类型,jvm就会沿着调用栈向上执行同样的操作。在最坏的情况下,jvm会遍历这个调用栈的每一个调用者。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值