84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
书上说是在调试时使用,但我觉得用起来并不方便,有什么技巧么? 具体是怎么用的呢?能举个例子么?我用起来感觉还没throws方便啊……
ringa_lee
Java的断言基本没人用,连JVM都是自动关掉的。有JUnit这样的测试框架,基本挤占了assert关键词的生存空间。
其实断言也不是不能用,但是这是一个关键词,一不小心溜进你的生产代码里面,抛个Error给你,你的代码十有八九会崩溃的。所以,就是今天这个样子了。
assert用于确保代码逻辑上不可能发生的事情绝对不发生(比如factory method返回NULL),而exception用于处理一些有可能发生的事情(比如用户输入错误,比如网络链接断开)。
assert
NULL
assert如果非真,抛出的是AssertionError,而不是Exception,而Error一般是不catch的,所以它的作用就是在测试的时候early crash,你一旦稳定下来确定不会出现了,在production环境中是可以完全关掉的(去掉JVM参数-ea即可,JVM会用nop代替,不影响性能)。
AssertionError
Exception
Error
-ea
nop
Exception及其处理往往是业务逻辑的一部分。而Assertion不是。后者应该crash early,而前者不是。
Assertion
需要注意的是assert是可以被关闭的,所以里面不可以有任何重要、正常的业务逻辑代码的调用。
测试的时候。。。
时代不一样了,基本不用考虑和纠结这个了,你觉得什么好用就用什么,这样才能提高生产力。
Java的断言基本没人用,连JVM都是自动关掉的。有JUnit这样的测试框架,基本挤占了assert关键词的生存空间。
其实断言也不是不能用,但是这是一个关键词,一不小心溜进你的生产代码里面,抛个Error给你,你的代码十有八九会崩溃的。所以,就是今天这个样子了。
assert
用于确保代码逻辑上不可能发生的事情绝对不发生(比如factory method返回NULL
),而exception用于处理一些有可能发生的事情(比如用户输入错误,比如网络链接断开)。assert
如果非真,抛出的是AssertionError
,而不是Exception
,而Error
一般是不catch的,所以它的作用就是在测试的时候early crash,你一旦稳定下来确定不会出现了,在production环境中是可以完全关掉的(去掉JVM参数-ea
即可,JVM会用nop
代替,不影响性能)。Exception
及其处理往往是业务逻辑的一部分。而Assertion
不是。后者应该crash early,而前者不是。需要注意的是
assert
是可以被关闭的,所以里面不可以有任何重要、正常的业务逻辑代码的调用。测试的时候。。。
时代不一样了,基本不用考虑和纠结这个了,你觉得什么好用就用什么,这样才能提高生产力。