Java 异常、断言和日志

一.处理错误 :

1. ①用户输入错误 ②设备错误 ③物理限制 ④代码错误 这几类错误

 

1.1 异常分类 由程序错误导致的异常属于RuntimeException;  程序本身没问题,但由于像I/O错误这类问题导致的异常属于其他异常;

RuntimeException异常包含几种情况(①错误的类型转换 ②数组访问越界 ③访问null指针)异常检测:

检测数组下标是否越界来避免ArrayIndexOutOfBoundsException 异常

通过在使用变量之前检测是否为null来杜绝NullPointerException 异常

 

1.2 声明受查异常 遇到下面4种情况应该抛出(throw)异常

1)调用一个抛出受查异常的方法,例如,FileInputStream 构造器

2)程序运行过程发现错误,并且利用 throw 语句抛出一个受查异常

3)程序出现错误,例如,a[-1]=0会抛出一个 ArrayIndexOutOfBoundsException 这样的非受查异常。

4)Java虚拟机和运行时库出现的内部错误

对于可能被他人使用的Java方法,应该在方法的首部声明这个方法可能抛出的异常

class MyAnimation{  public Image loadImage(String s) throw IOException}  注意,不需要声明从Error继承的错误,也不应该声明从RuntimeException 继承的那些非受查异常。

 

1.3 如何抛出异常

在异常的类已经存在时,抛出异常的步骤:①找到一个合适的异常类 ②创建这个类的一个对象 ③将对象抛出 

{throw new EOFException();}或{EOFException e = new EOFException();  throw e;}   设抛出 EOFException 异常。

 

1.4创建异常类

创建自己的异常类,首先定义一个派生于Exception的类,或者派生 Exception 子类的类,定义的类应该包含两个构造器,一个是默认的构造器,另一个是带有详细描述信息的构造器。

 

二.捕获异常

2.1 捕获异常

要想捕获一个异常,必须设置try/catch 语句块

复制代码
try
{
  code
  more code
}
catch (ExceptionType e)
{
  handler for this type  
}
复制代码

 捕获那些知道如何处理的异常,将不知道怎么处理的异常继续传递

2.2 捕获多个异常

在一个 try 语句块可以捕获多个异常类型,实现方式:为每个异常类型使用一个单独的catch子句

2.3 再次抛出异常与异常链

在catch(){   }捕获了异常后再次抛出异常 如ServletException ,throw new ServletException("database error:" + e.getMessage());

2.4 finally 字句

finally子句可以恰当地关闭一个文件,解耦合ry/catch和try/finally语句块,不论有无抛出异常,异常是否被catch捕获或不是被catch捕获。

2.5 带资源的try语句

try(Scanner in = new Scanner(new FileInputStream("/usr/share/dict/words","UTF-8"))
{
    while (in.hasNext())
        System.out.println(in.next());
}

这个块正常退出,或者出现一个异常时,都会调用in.close(),就好像使用了finally块一样。

2.6 分析堆栈轨迹元素

当Java程序正常终止,而没有捕获异常时,这个列表就会显示出来。可以调用Throwable 类的printStackTrace 方法访问堆栈轨迹的文本描述信息,或者使用更灵活的getStackTrace方法

三.使用异常机制的技巧

①异常处理不能代替简单的测试:只在异常情况下使用异常机制。

②不要过分地细化异常:将整个任务包装在try语句块中,当任何一个操作出现问题时,整个任务都可以取消。

③利用异常层次结构:不要为逻辑错误抛出这些已检查异常,同时要将捕获的异常转换为另一种更加适合的异常。

④不要压制异常:对于需要通告异常的方法,我们可以改用捕捉的方法将其强行关闭,出现异常时,将会无提示地忽略这个异常,如果觉得这个异常很重要,应该对其进行正确的控制。

四.使用断言

4.1 断言的概念

断言机制允许在测试期间向代码中插入一些检查语句。当代码发布时,这些插入的检测语句将会被自动地移走。

Java中引入关键字assert。两种形态:①assert 条件;   ②assert 条件:表达式;  

如果结果为false,则抛出一个AssertionError异常,第二种形式中,表达式会传入AssertionError构造器,并转换成一个消息字符串。

4.2 启用和禁用断言

默认情况下断言被禁用,可以在运行程序时用-enableassertions 或 -ea 选项启用:  java enableassertions MyApp

4.3 使用断言完成参数检查

①断言失败会导致程序中止,对程序来说是致命的  ②断言检察官只用于开发个测试阶段

五.记录日志  commons-logging 和 Log4j 略

 

posted @   Pray386  阅读(157)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示