6 异常与断言

异常与断言

1 异常

在程序运行过程中出现的错误,称为异常。异常就是程序运行过程中出现了不正常现象导致程序的中断。

在Java中,把各种异常现象进行了抽象形成了异常类。

1.1 异常的分类

异常主要分为:错误、一般性异常(受控异常)、运行时异常(非受控异常)

  • 错误:如果应用程序出现了Error,那么将无法恢复,只能重新启动应用程序,最典型的Error的异常是:OutOfMemoryError

  • 受控异常:这种异常属于一般性异常,出现了这种异常必须显示的处理,不显示处理java程序将无法编译通过。编译器强制普通异常必须try…catch处理,或用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked异常

  • 非受控异常:非受控异常也即是运行时异常(RuntimeException),这种系统异常可以处理也可以不处理

1.2 异常的处理

运行时异常(系统异常)不需要预处理,通过规范的代码可以避免产生这种异常
受检异常(编译时异常)必须预处理,否则编译报错,有两种预处理方式 :

  • 捕获处理

  • 抛出处理

1.3 try、catch

异常的捕获和处理需要采用trycatch来处理,具体格式如下:

	try {
	
	} catch (OneException e) {
	
	} catch (TwoException e) {
	
	} finally {
	
	}

  • try中包含了可能产生异常的代码
  • try后面是catch,catch可以有一个或多个,catch中是需要捕获的异常
  • 当try中的代码出现异常时,出现异常下面的代码不会执行,马上会跳转到相应的catch语句块中,如果没有异常不会跳转到catch中
    finally表示,不管是出现异常,还是没有出现异常,finally里的代码都执行,finally和catch可以分开使用,但finally必须和try一块使用
1.3.1 异常的捕获顺序

异常的捕获:一般按照由小到大的顺序,也就是先截获子异常,再截获父异常

1.4 throws抛出处理

在定义方法时,如果方法体中有受检(编译时)异常需要预处理,可以捕获处理,也可以抛出处理。

处理异常时,使用throws抛出处理:

  • 谁调用这个方法,谁负责处理该异常
  • 在定义方法时,把异常抛出就是为了提醒方法的使用者,有异常需要预处理
  • 在处理异常时,是选择捕获处理还是抛出处理

一般情况下,在调用其他方法时,如果被调用的方法有受检(编译时)异常需要预处理,选择捕获处理,因为你调用了方法, 你负责处理该异常。

在定义方法时,如果方法体中有受检异常需要预处理,可以选择捕获 ,也可以选择抛出处理。如果方法体中通过throw语句抛出了一个异常对象,所在的方法应该使用throws声明该异常。

1.5 throw 和 throws 的区别

1. throw
throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。

throw是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行throw一定是抛出了某种异常。

throw一般用于抛出自定义异常。

2. throws
throws语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理

throws主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。

throws表示出现异常的一种可能性,并不一定会发生这种异常。

2 断言

主要使用在代码开发和测试时期,用于对某些关键数据的判断,如果这个关键数据不是你程序所预期的数据,程序就提出警告或退出。

  • 语法1:assert expression; //expression代表一个布尔类型的表达式,如果为真,就继续正常运行,如果为假,程序退出
  • 语法2:assert expression1 : expression2; //expression1是一个布尔表达式,expression2是一个基本类型或者Object类型,如果expression1为真,则程序忽略expression2继续运行;如果expression1为假,则运行expression2,然后退出程序。
public class AssertionDemo {  
    //这个成员变量的值可以变,但最终必须还是回到原值5  
    static int i = 5;  
    public static void main(String[] args) {  
        assert i==6;  
        System.out.println("如果断言正常,我就被打印");  
    }  
} 

public class AssertionDemo {  
    public static void main(String[] args) {  
        int i = 3;  
        switch (i) {  
        case 1:  
            System.out.println("正常");  
            break;  
        case 2:  
            System.out.println("正常");  
            break;  
        case 5:  
            System.out.println("正常");  
            break;  
        default:  
            assert false:"i的值无效";       //如果i的值不是你想要的,程序就警告退出  
        }  
        System.out.println("如果断言正常,我就被打印");  
    }  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值