运行结果如下: aClass.aMethod( 1 ): OK aClass.aMethod( -1 ): java.lang.AssertionError at aClass.aMethod(aClass.java:3) at aClass.main(aClass.java:12) Exception in thread "main"
三、assertion命令行参数之间的继续关系
assertion功能的启用和关闭可以一直控制到每一个类,一个命令行可以容纳任意多个-ea -da 参数,这些参数之间是如何相互起作用的,基本上遵循两个原则:特定具体的设定优先于一般的设定,后面的?设定优先于前面的设定。我们看下面的例子: // Base.java package tmp; public class Base{ public void m1( boolean test ){ assert test : "Assertion failed: test is " + test; System.out.println( "OK" ); } } // Derived.java // package tmp.sub; import tmp.Base; public class Derived extends Base{ public void m2( boolean test ){ assert test : "Assertion failed: test is " + test; System.out.println( "OK" ); } public static void printAssertionError( AssertionError ae ){ StackTraceElement[] stackTraceElements = ae.getStackTrace(); StackTraceElement stackTraceElement = stackTraceElements[ 0 ]; System.err.println( "AssertionError" ); System.err.println( " class= " + stackTraceElement.getClassName() ); System.err.println( " method= " + stackTraceElement.getMethodName() ); System.err.println( " message= " + ae.getMessage() ); } public static void main( String[] args ){ try{ Derived derived = new Derived(); System.out.print( "derived.m1( false ): " ); derived.m1( false ); System.out.print( "derived.m2( false ): " ); derived.m2( false ); }catch( AssertionError ae ){ printAssertionError( ae ); } } }