浅析Java异常处理中断言的使用

作者:goldensun 时间:2023-07-05 23:50:03 

断言的概念

断言用于证明和测试程序的假设,比如“这里的值大于 5”。
断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响。
断言的使用

断言有两种方法:
一种是 assert<<布尔表达式>> ;
另一种是 assert<<布尔表达式>> :<<细节描述>>。
如果布尔表达式的值为false , 将抛出AssertionError 异常; 细节描述是AssertionError异常的描述文本使用 javac –source 1.4 MyClass.java 的方式进行编译示例如下:


public class AssertExample {
 public static void main(String[] args) {
   int x = 10;
   if (args.length > 0) {
     try {
       x = Integer.parseInt(args[0]);
     } catch (NumberFormatException nfe) {
       /* Ignore */
     }
   }
   System.out.println("Testing assertion that x == 10");
   assert x == 10 : "Our assertion failed";
   System.out.println("Test passed");
 }
}

由于引入了一个新的关键字,所以在编译的时候就需要增加额外的参数,要编译成功,必须使用 JDK1.4 的 javac 并加上参数'-source 1.4',例如可以使用以下的命令编译上面的代码:
  


javac -source 1.4 AssertExample.java


以上程序运行使用断言功能也需要使用额外的参数(并且需要一个数字的命令行参数),例如:


 java -ea AssertExample 1


程序的输出为:


Testing assertion that x == 10
Exception in thread "main" java.lang.AssertionError:Our assertion failed
at AssertExample.main(AssertExample.java:20)

由于输入的参数不等于 10,因此断言功能使得程序运行时抛出断言错误,注意是错误, 这意味着程序发生严重错误并且将强制退出。断言使用 boolean 值,如果其值不为 true 则 抛出 AssertionError 并终止程序的运行。
断言推荐使用方法

用于验证方法中的内部逻辑,包括:

  • 内在不变式

  • 控制流程不变式

  • 后置条件和类不变式

注意:不推荐用于公有方法内的前置条件的检查。
运行时屏蔽断言

运行时要屏蔽断言,可以用如下方法:
    java –disableassertions 或 java –da 类名
运行时要允许断言,可以用如下方法:
    java –enableassertions 或 java –ea类名

标签:Java,断言
0
投稿

猜你喜欢

  • 完整的iOS新浪微博分享功能开发

    2023-06-24 14:14:08
  • C#实现银行家算法

    2023-05-01 08:04:35
  • Java import导入及访问控制权限修饰符原理解析

    2023-08-17 21:42:59
  • android实现下拉菜单三级联动

    2022-10-13 15:46:53
  • spring cloud gateway中如何读取请求参数

    2021-08-19 16:19:02
  • SpringMVC路径匹配中使用通配符问题

    2023-07-18 20:44:03
  • C# 邮件发送和接收实现代码

    2021-11-23 03:32:36
  • Android中ImageView用法实例分析

    2023-04-03 19:42:28
  • Java中i++的一些问题总结

    2022-04-11 18:07:34
  • java异步上传图片示例

    2023-05-31 13:42:51
  • C#中timer定时器用法实例

    2023-01-23 02:23:17
  • C#编程中使用ref和out关键字来传递数组对象的用法

    2021-09-25 23:19:45
  • Mybatis Generator最完美配置文件详解(完整版)

    2021-06-13 05:11:06
  • java之static关键字用法实例解析

    2023-11-21 14:42:49
  • Flutter中http请求抓包的完美解决方案

    2023-08-22 18:47:47
  • 各种格式的编码解码工具类分享(hex解码 base64编码)

    2021-11-17 07:04:51
  • C#获取Windows进程监听的TCP/UDP端口实例

    2021-11-20 13:06:21
  • Android实现房贷计算器

    2022-11-23 17:58:56
  • C语言实现贪吃蛇小游戏开发

    2022-08-20 00:03:07
  • java排查一个线上死循环cpu暴涨的过程分析

    2022-07-20 01:27:08
  • asp之家 软件编程 m.aspxhome.com