運行結果如下: 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 ); } } }