【学习笔记】Java核心技术——异常、断言和日志

其他知识点的相关链接:

【学习笔记】Java核心技术——集合

【学习笔记】Java核心技术——并发

相关知识点

  1. 异常分类

  2. Error层次结构的内容

  3. 派生于RuntimeException的异常情况包括

  4. 不是派生RuntimeException的异常情况有

  5. 什么是受查异常,什么是非受查异常

  6. 什么时候应该抛出异常

  7. 若没有声明所有受查异常,编译器会发生什么

  8. 子类覆盖超类的一个方法,则子类方法中声明的受查异常和超类方法中声明的受查异常的关系

  9. 如何抛出异常

  10. 如何创建异常类

  11. 如何获取异常本省的信息

  12. 捕获多个异常时,异常变量隐含为什么类型变量

  13. catch自己中抛出一个异常的目的是什么?

  14. 如何获得原始异常

  15. 会执行finally子句的情况有?

  16. 若finally中含有return返回值,则会发生什么情况

  17. StackTraceElement类包含的内容?

  18. 如何产生所有线程的堆栈轨迹

  19. 使用异常机制的技巧?

  20. 断言关键字的形式有?

  21. 如何启用和禁用断言

  22. 处理系统错误的机制有?

  23. 记录日志API的优点

  24. 如何生成简单的日志记录

  25. 日志记录器级别

  26. 调试技巧

知识点解答

1.异常分类

2.Error层次结构的内容

描述了Java运行时系统的内部错误和资源耗尽错误

3.派生于RuntimeException的异常情况包括

  • 错误的类型转换
  • 数组越界
  • 访问null指针

4.不是派生RuntimeException的异常情况有

  • 试图在文件尾部后面读取数据
  • 试图打开一个不存在的文件
  • 试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在

5.什么是受查异常,什么是非受查异常

将派生于Error和RuntimeException类的所有异常都称为非受查异常

其他的异常称为受查异常

6.什么时候应该抛出异常

  1. 调用一个抛出受查异常的方法
  2. 程序运行过程中发现错误,并且利用throw语句抛出一个受查异常
  3. 程序出现错误
  4. Java虚拟机和运行时库出现的内如错误

7.若没有声明所有受查异常,编译器会发生什么

编译不通过

8.子类覆盖超类的一个方法,则子类方法中声明的受查异常和超类方法中声明的受查异常的关系

子类方法中声明的受查异常不能比超类方法中声明的异常更通用,如果超类中没有抛出任何受查异常,子类也不能抛出任何受查异常

9.如何抛出异常

//method 1
throw new EOFException();

//method 2
EOFException e = new EOFException();
throw e;

10.如何创建异常类

定义一个派生于Exception的类,或派生于Exception子类的类

class FileFormatException extends Exception{
    public FileFormatException(){}
    public FileFormatException(String gripe){
        super(gripe);
    }
}

11.如何获取异常本身的信息?

e.getMessage();

e.getClass().getName();

12.捕获多个异常时,异常变量隐含为什么类型变量?

final

13.catch自己中抛出一个异常的目的是什么?

改变异常类型

14.如何获得原始异常?

Throwable e = se.getCause();

15.会执行finally子句的情况有?

  1. 代码没有抛出异常
  2. 抛出一个在catch自己中捕获的异常
  3. 代码抛出了一个异常,但这个异常不由catch子句捕获

try语句可以只有finall语句没有catch语句

16.若finally中含有return返回值,则会发生什么情况?

会覆盖try语句块中的return

17.StackTraceElement类包含的内容?

文件名和当前执行的代码行号的方法

18.如何产生所有线程的堆栈轨迹?

Thread.getAllStackTrace()方法

19.使用异常机制的技巧?

  1. 异常处理不能代替简单的测试
  2. 不要过分地细化异常
  3. 利用异常层次结构
  4. 不要压制异常
  5. 在检测错误时,”苛刻“要比放任更好
  6. 不要羞于传递异常

20.断言关键字的形式有?

//method 1
assert 条件;

//method 2
assert 条件:表达式;

21.如何启用和禁用断言?

//启用断言
java -enableassertions MyApp
//禁用断言
java -ea:...-da:MyClass MyApp

22.处理系统错误的机制有?

  • 断言失败是致命的、不可恢复的错误
  • 断言检查只用于开发和测试阶段

不允许用null数组调用这个方法,并在这个方法的开头使用断言

assert a != null

23.记录日志API的优点?

  • 可以很容易地取消全部日志记录,或者仅仅取消某个级别的日志,而且打开和关闭这个操作也很容易
  • 可以简单地禁止日志记录的输出,因此,将这些日志代码留在程序中的开销很小
  • 日志记录可以被定向到不同的处理器,用于在控制台中显示,用于存储在文件中等
  • 日志记录器和处理器都可以对记录进行过滤。过滤器可以根据过滤实现器制定的标准丢弃那些无用的记录项
  • 日志记录可以采用不同的方式格式化
  • 应用程序可以使用多个日志记录器,它们使用类似包名的这种具有层次结构的名字
  • 在默认情况下,日志系统的配置由配置文件控制

24.如何生成简单的日志记录?

全局日志记录器,并调用其info方法

Logger.getGlobal().info("File->Open menu item selected");

25.日志记录器级别?

SERVER

WARNING

INFO

CONFIG

FINE

FINER

FINEST

默认情况下值记录前三个级别

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值