精华内容
下载资源
问答
  • IDE中打开关闭断言

    2013-03-04 10:35:30
    在eclipse中 点击运行旁的小三角形--->Run Configurations--s->点右窗口中(x)=Argument页签---> VM arguments文本框中输入:-ea --->运行ok. 在myEclipse中 Windows--> Preferences--->Java--->...Def
    在eclipse中
    
    点击运行旁的小三角形--->Run Configurations--s->点右窗口中(x)=Argument页签--->
    VM arguments文本框中输入:-ea --->运行ok.

    在myEclipse中
    Windows--> Preferences--->Java--->Installed JREs--->点击正使用的JDK--->Edit--->
    Default VM Arguments文本框中输入:-ea --->运行ok.
    展开全文
  • 假设我们有一个带有断言的函数,我们只想在调试时打开它: using ToggleableAsserts function foo (u, v) @toggled_assert length (u) == length (v) 1 end 现在,我们可以确保我们的断言起作用: julia > foo...
  • Java断言的开启关闭和初步使用

    千次阅读 2018-11-27 21:23:12
     jvm断言默认是关闭的。  断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。  断言只适用复杂的调式过程。  断言一般用于程序执行结构的判断,千万不要让断言处理...

    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

    6 assertThat()方法是junit4的特性,junit5也可以使用,不过需要加入两个jar包:hamcrest-library-1.3.jar和hamcrest-core-1.3.jar。

    package com.hadoop.test;
    
    import static org.junit.Assert.assertThat;
    import static org.hamcrest.Matchers.*;
    
    class Test {
    
    	@org.junit.jupiter.api.Test
    	void test() {
    		
    		assertThat("yellow",is("yellow"));
    		System.out.println("--------");
    	}
    
    }

     

     

     

    展开全文
  • 断言

    2019-09-21 04:45:58
    jvm 断言默认是关闭的。断言只适用于复杂的调试过程。断言一般用于程序执行结果的判断,千万不要让断言处理业务流程。(二)判断eclipse是否开启了断言,代码如下:public class AssertTest {public static void ...

    主要总结一下在eclipse中如何使用断言。

     

     

     


    (一)首先明确:
    java断言Assert是jdk1.4引入的。
    jvm 断言默认是关闭的。
    断言只适用于复杂的调试过程。
    断言一般用于程序执行结果的判断,千万不要让断言处理业务流程。
    (二)判断eclipse是否开启了断言,代码如下:
    public class AssertTest {

    public static void main(String[] args) {
    boolean isOpen = false; 
    assert isOpen=true; //如果开启了断言,会将isOpen的值改为true
    System.out.println(isOpen);//打印是否开启了断言 
    }
    }
    执行上面代码,如果打印 true说明已经启用了断言,如果为 false 则没有启用断言。
    如果没有启用断言,则按按照下面方法开启断言。
    (三)eclipse中开启断言
    选择菜单:Run ---> Run Configurations...---> 选择 Arguments 选项卡
    在 VM arguments 文本框中输入: -ea 注意:中间没有空格,如果输入 -da 表示禁止断言。

    然后关闭该窗口,然后保存就开启了断言。

    (四)断言使用

    assert关键字语法很简单,有两种用法:

    1、assert <boolean表达式>
    如果<boolean表达式>为true,则程序继续执行。
    如果为false,则程序抛出AssertionError,并终止执行。

    2、assert <boolean表达式> : <错误信息表达式>
    如果<boolean表达式>为true,则程序继续执行。
    如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。

    以下转自:Java陷阱之assert关键字

    四、陷阱

    assert关键字用法简单,但是使用assert往往会让你陷入越来越深的陷阱中。应避免使用。笔者经过研究,总结了以下原因:

    1、assert关键字需要在运行时候显式开启才能生效,否则你的断言就没有任何意义。

    而现在主流的Java IDE工具默认都没有开启-ea断言检查功能。这就意味着你如果使用IDE工具编码,调试运行时候会有一定的麻烦。

    并且,对于Java Web应用,程序代码都是部署在容器里面,你没法直接去控制程序的运行,如果一定要开启-ea的开关,

    则需要更改Web容器的运行配置参数。这对程序的移植和部署都带来很大的不便。

    2、用assert代替if是陷阱之二。assert的判断和if语句差不多,但两者的作用有着本质的区别:

    assert关键字本意上是为测试调试程序时使用的,但如果不小心用assert来控制了程序的业务流程,

    那在测试调试结束后去掉assert关键字就意味着修改了程序的正常的逻辑。

    3、assert断言失败将面临程序的退出。这在一个生产环境下的应用是绝不能容忍的。

    一般都是通过异常处理来解决程序中潜在的错误。但是使用断言就很危险,一旦失败系统就挂了。



    五、对assert的思考

    assert既然是为了调试测试程序用,不在正式生产环境下用,那应该考虑更好的测试JUint来代替其做用,

    JUint相对assert关键的所提供的功能是有过之而无不及。当然完全可以通过IDE debug来进行调试测试。

    在此看来,assert的前途一片昏暗。

    因此,应当避免在Java中使用assert关键字,除非哪一天Java默认支持开启-ea的开关,这时候可以考虑。

    对比一下,assert能给你带来多少好处,多少麻烦,这是我们选择是否使用的的原则。

     

     假如不写assert,调试的时候问题未必会暴露出来。此时就如问题所描述的,在调试的时候没事,可是到执行的时候出问题了你又没解决机制…… 比如说 FILE*fp;fp=fopen("错误的文件名?!","w+");不管文件存不存在,代码都会继续往下运行,问题一时半会不会暴露,有的时候说不定这次调试就没看出问题…… 如果写成 FILE*fp;fp=fopen("错误的文件名?!","w+");assert(fp!=NULL);在打开文件失败的时候就会立刻发现断言失败,调试中断,要求立刻修改代码,解决问题,这样才能在实际中不会出问题……

     

     

    断言的副作用

      由于程序员的问题,断言的使用可能会带来副作用 ,例如:
      boolean isEnable=false;
      //...
      assert isEnable=true;
      这个断言的副作用是因为它修改了程序中变量的值并且未抛出错误,这样的错误如果不细心的检查是很难发现的。但是同时我们可以根据以上的副作用得到一个有用的特性,根据它来测试断言是否打开。

     public class AssertExampleTwo{

       public static void main(String args[]){
         boolean isEnable=false;
         //...
         assert isEnable=true;
         if(isEnable==false){
           throw new RuntimeException("Assertion shoule be enable!");
         }
       }
    }

    何时需要使用断言

      1.可以在预计正常情况下程序不会到达的地方放置断言 :assert false
      2.断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)
      3.使用断言测试方法执行的前置条件和后置条件
      4.使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合适值)

    什么地方不要使用断言

      断言语句不是永远会执行,可以屏蔽也可以启用
    因此:
      1.不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行
      2.断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值
    下边是介绍断言的用法:
      assert是在J2SE1.4中引入的新特性,assertion就是在代码中包括的布尔型状态,程序员认为这个状态是true。一般来说assert在开发的时候是检查程序的安全性的,在发布的时候通常都不使用assert。在1.4中添加了assert关键字和java.lang.AssertError类的支持。 

    转载于:https://www.cnblogs.com/KingIceMou/p/7169104.html

    展开全文
  • 断言 asset

    2019-04-16 23:51:57
    断言的说明 ...断言在Eclipse 中的打开关闭方式 run > Run Configurations 使用参数开启或关闭assert 。 -ea 是开启, -da 是关闭 断言的使用方式 方式一: 第二种方式: ...

    对断言的说明

    断言一般用在开发,测试中。在生产的时候,可以取消相关代码。

    另外断言默认是关闭的,需要开启了断言的功能,断言才能用。

    断言在Eclipse 中的打开,关闭方式

          run > Run Configurations

    使用参数开启或关闭assert 。 -ea 是开启, -da 是关闭

     

    断言的使用方式

    方式一:

    第二种方式:

     

     

     

    展开全文
  •  jvm断言默认是关闭的。  断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。  断言只适用复杂的调式过程。  断言一般用于程序执行结构的判断,千万不要让断言处理...
  • 6.3断言与防御式编程

    2020-07-01 20:26:37
    第2种技术——断言、防御式编程,侧重于correctness。 1设计adt回忆 ... Java缺省关闭断言,要记得打开(-ea) 断言非常影响运行时的性能 在其他一些开发者眼里,不应该针对参数的合法性使用断言。 即使spec被违
  • 默认情况下,JVM是关闭断言的,所以想使用断言调试程序时,需要手动打开assert断言功能; 注意:以下步骤在Eclipse下进行 一、生成一个测试assert的类:Assert_Test.java public class Assert_Test { public ...
  • assert 断言

    2018-05-28 15:49:00
    因此如果想使用断言调试程序,需要手动打开断言功能。在命令行模式下运行Java程序时可增加参数-enableassertions或者-ea打开断言。可通过-disableassertions或者-da关闭断言(默认情况,可有可无)。 断...
  • Xcode 中的断言

    千次阅读 2016-11-11 22:14:37
    在Xcode 4.2以后,在release版本中断言是默认关闭的,这是由宏NS_BLOCK_ASSERTIONS来处理的。也就是说,当运行release版本时,所有的断言调用都是无效的。如果想在release环境下打开断言(当然你一定不想这么做的),...
  • jvm 断言默认是关闭的。 断言是可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。  断言只适用于复杂的调试过程。 断言一般用于程序执行结果的判断,千万不要让断言...
  • Java断言

    2019-11-15 10:32:10
    编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候...
  • assert断言

    2019-01-23 15:44:57
    1.assert简介 编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。断言表示为一些布尔表达式,是用于对...特性:首先assert需要自行开启(jvm断言默认是关闭的,如何开启等会讲解),然后as...
  • 6.5 断言语句

    2019-07-20 17:40:01
    在调式时候打开,正式运行时候关闭,但依然把断言语句保留,留待以后调试要用的时候开启断言即可 使用关键字assert声明一条断言语句,断言语句有以下两种格式: assert booleanExpression; assert boolean...
  • 断言Assert

    2018-05-09 00:09:53
    一、Assert简介作用:是...(如果不复杂完全可以用log或者debug代替)特性:首先assert需要自行开启(jvm断言默认是关闭的,如何开启等会讲解),然后assert不具有继承性(父类禁止断言,子类可以开启断言)语法:...
  • jvm 断言默认是关闭的。 断言是可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。 断言只适用于复杂的调试过程。 断言一般用于程序执行结果的判断,千万不要让断言处理业务...
  • java断言

    千次阅读 2018-12-17 17:00:31
    断言的用法:(spring提供的断言工具,本质上也是判断参数是否符合,不符合就抛出了异常) Object object =null; Assert.notNull(object, “object call not be null”); org.springframework.util.Assert ...
  • TestNG断言

    万次阅读 2016-07-10 16:42:59
    1、原理:对测试程序变量的中间状态进行断言(Assert)判断,从而辅助判断测试用例的执行是成功还是失败。 2、TestNG中常用的断言方法有: (1) assertTrue:判断是否为True。 (2) assertFalse:判断是否为false...
  •  jvm断言默认是关闭的。  断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。  断言只适用复杂的调式过程。  断言一般用于程序执行结构的判断,千万不要让断言处理业....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,209
精华内容 6,883
关键字:

断言打开与关闭