放牧代码和思想
专注自然语言处理、机器学习算法
    愛しさ 優しさ すべて投げ出してもいい

Java 断言 assert 详解与在IDEA的配置

首先assert是个Java关键字,表示断言。其次assert是1.4之后引入的,编译器默认不开启断言。

暂时不空谈理论用法,写一个例子:

package com.company;

public class Main
{

    public static void main(String[] args)
    {
        System.out.println("----start---");
        boolean isOpen = false;
        assert isOpen=true;             //如果开启了断言,会将isOpen的值改为true
        System.out.println("是否开启了断言"+isOpen);  //打印是否开启了断言
        if (isOpen)
        {
            int value=-1;
            assert 0 < value:"value="+value;
        }
        System.out.println("----end----");
    }
}

如果输出下面的信息,说明你的编译器没有开启断言:

----start---
是否开启了断言false
----end----

Process finished with exit code 0

如果没有开启断言的话,给编译器加上-ea参数:

然后编译运行,输出结果:

----start---
是否开启了断言true
Exception in thread "main" java.lang.AssertionError: value=-1
	at com.company.Main.main(Main.java:15)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Process finished with exit code 1

可见assert为假的时候会中断程序的执行,并且输出了详细的错误信息,比try catch更简洁,发布程序的时候只需要去掉-ea就行,在调试程序的时候非常有用。

参考链接:http://blog.csdn.net/jiafu1115/article/details/7232460

这篇博文总结得很好。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » Java 断言 assert 详解与在IDEA的配置

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的作品

HanLP自然语言处理包《自然语言处理入门》