zoukankan      html  css  js  c++  java
  • 01 java断言assert初步使用:断言开启、断言使用

    参考文件:http://blog.sina.com.cn/s/blog_59c9412d0100fd55.html

    1 说明

      java断言assert是jdk1.4引入的。

      jvm断言默认是关闭的。

      断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。

      断言只适用复杂的调式过程。

      断言一般用于程序执行结构的判断,千万不要让断言处理业务流程。

    2 判断eclipse是否开启了断言

      代码如下:

        public static void main(String args[]) {
            boolean isOpen = false;
    
            // 如果开启了断言,会将isOpen的值改为true
            assert isOpen = true;
    
            // 打印是否开启了断言,如果为false,则没有启用断言
            System.out.println(isOpen);
        }

    3 eclipse 中开启和关闭断言

      选择菜单:run --> run Configurations

      打开断言:-ea

      关闭断言:-da,或者删除-ea

    3 断言使用

    3.1 第一种使用方法

        /**
         * 断言的使用方法一
         */
        public static void useAssertExt1() {
            boolean isOk = 1 > 2;
            assert isOk;
            System.out.println("程序正常");
        }

    执行的结果如下:

    Exception in thread "main" java.lang.AssertionError
    at com.rollercoaster.codecomplete.AboutAssertion.useAssertExt1(AboutAssertion.java:43)
    at com.rollercoaster.codecomplete.AboutAssertion.main(AboutAssertion.java:16)

    说明:

      显然isOk为false,所以抛出AssertionError

    3.2 第二种使用方法

        /**
         * 断言的第一个例子
         */
        public static void useAssertExt2() {
            boolean isOk = 1 > 2;
            try {
                assert isOk : "程序错误";
                System.out.println("程序正常");
            } catch (AssertionError err) {
                System.out.println(err.getMessage());
            }
        }        

    运行结果如下:

      程序错误

    说明

      assert后面跟个冒号表达式。如果冒烟前为true,则冒号后面的被忽略,否则抛出AssertionError,错误内容为冒号后面的内容。

      按F3查看源代码,如下,可以看到AssertionError是继承自Error,而不是Exception,所以catch部分用Exception是不能捕捉到AssertionError信息的。

      // (version 1.7 : 51.0, super bit)
      public class java.lang.AssertionError extends java.lang.Error {...

    5 有关断言的更多参数(转帖一下):

    -ea java -ea 打开所有用户类的assertion
    -da java -da 关闭所有用户类的assertion
    -ea:<classname> java -ea:MyClass1 打开MyClass1的assertion
    -da:<classname> java -da: MyClass1 关闭MyClass1的assertion
    -ea:<packagename> java -ea:pkg1 打开pkg1包的assertion
    -da:<packagename> java -da:pkg1 关闭pkg1包的assertion
    -ea:... java -ea:... 打开缺省包(无名包)的assertion
    -da:... java -da:... 关闭缺省包(无名包)的assertion
    -ea:<packagename>... java -ea:pkg1... 打开pkg1包和其子包的assertion
    -da:<packagename>... java -da:pkg1... 关闭pkg1包和其子包的assertion
    -esa java -esa 打开系统类的assertion
    -dsa java -dsa 关闭系统类的assertion
    综合使用 java -dsa:MyClass1:pkg1 关闭MyClass1和pkg1包的assertion

    作者:BestNow
    出处:http://www.cnblogs.com/BestNow/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/tianxue/p/3925315.html
Copyright © 2011-2022 走看看