3Java异常处理——2断言和日志——1使用断言(廖雪峰)

1.Assertion

断言(Assertion)是一种程序调试方式

  • 使用assert关键字
  • 断言条件预期为true
  • 如果断言失败,为false,抛出AssertionError
static double abs(double d){
    return d >= 0 ? d : -d;
}

public static void main(String[] args){
    double x = abs(-123.45);
    assert x >= 0;
    assert x >= 0: "x must >= 0";
    System.out.println(x);
}

断言的特点:

  • 断言失败时会抛出AssertionError,导致程序结束退出
  • 不能用于可恢复的程序错误
  • 只应该用于开发和测试阶段

什么是可恢复的程序错误?

void sort(int[] arr){
    assert arr != null;
}
//不能用assert来判断变量是否为空,因为这个错误可以恢复
void sort(int[] arr){
    if (x == null){
        throw new IllegalArgumentException("array cannot be null");
    }
}

对于可恢复的程序错误:

  • 不应该使用断言
  • 应该抛出异常并在上层捕获

2.启用断言

JVM默认关闭断言指令(即忽略所有的assert)

  • 给Java虚拟机传递-ea参数启用断言
  • 可以指定特定的类启用断言-ea:com.xiaoxiatianxi.sample.Main(类的全名)
  • 可以指定特定的包启用断言-ea:com.xiaoxiatianxi...(包的全名)

选中class文件——单击右键——Run As ——Run Configurations....——Arguments

——在VM arguments中添加-ea:com.xiaoxiatianxi.sample.Main(类的全名)——Apply

——run

package com.xiaoxiatianxi.sample;

public class Main {
	
    public static void main(String[] args){
        double x = abs(-123.45);
	assert x >= 0: "x must >= 0 but x =" + x;
	System.out.println(x);
    }
    static double abs(double d){
        return d < 0 ? d : -d;
    }
}

对程序进行修改,将 return d < 0 ? d : -d; 改为return d > 0 ? d : -d; 则运行结果为:

3.总结

  • 断言是一种调试方式,断言失败会抛出AssertionError
  • 只能在开发和测试阶段启用断言
  • 对可恢复的错误不能使用断言,而应该抛出异常
  • 断言很少被使用,更好的方法是编写单元测试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小夏天禧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值