Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
断言在java中有什么用途_Java_Exception Handling_Assert - Fatal编程技术网

断言在java中有什么用途

断言在java中有什么用途,java,exception-handling,assert,Java,Exception Handling,Assert,可能重复: assert在开发过程中测试程序员的假设,而不为异常编写异常处理程序这就是我在搜索assert时得到的结果 除此之外,人们还说,它是异常处理的替代方案。当您不想花时间编写异常处理代码时,断言就会出现。但是,我没有得到工作和使用。有人解释这个例子吗 class AssertExample { public static void main(String[] args) { int x = 0; assert (x > 0) ? "ass

可能重复:

assert在开发过程中测试程序员的假设,而不为异常编写异常处理程序这就是我在搜索assert时得到的结果

除此之外,人们还说,它是异常处理的替代方案。当您不想花时间编写异常处理代码时,断言就会出现。但是,我没有得到工作和使用。有人解释这个例子吗

class AssertExample {

    public static void main(String[] args) {
        int x = 0;
        assert (x > 0) ? "assertion failed" : "assertion passed";
        System.out.println("finished");
    } }

Assert用于在开发期间验证关于代码的假设

它们往往被当作一种穷人的契约设计

例如,我使用它们来验证代码的前置/后置条件和不变量。

维基百科:

在计算机编程中,断言是放置在程序中的谓词(真-假语句),表示开发人员认为谓词在该位置始终为真。断言的使用有助于程序员设计、开发和推理程序

您可以使用
-ea
开关在运行时启用断言。断言也可以有选择地启用

java -ea:pl.maciejziarko.service.UserService
关于断言的一些规则(来自SCJP Sun认证的Java 6程序员学习指南):

  • 不要使用断言来验证公共方法的参数
  • 一定要使用断言来验证私有方法的参数
  • 不要使用断言来验证命令行参数
  • 一定要使用断言来检查你知道永远不会发生的情况 应该发生
  • 不要使用可能导致副作用的断言表达式

断言
不是一种处理异常的方法,而是一种检测异常的方法。(因此,你发现的描述对我来说似乎有点离题。)这基本上是一种说法:

这应该是真的。如果不是,则抛出一个错误

如何处理这个错误是一个完全不同的问题。您可以在检测到它的函数中处理它,也可以在调用它的函数中处理它,还可以在应用程序级别的堆栈顶部处理它,等等

请记住,捕获异常(这是所使用的编程语言的构造)和有意义地处理异常(这是独立于所使用的语言的逻辑构造)之间有着显著的区别。只有在您可以对异常采取措施的情况下才能捕获异常。否则,让它们在堆栈中冒泡出来,让其他代码来处理它们。(但由于
assert
不能捕获错误,它会抛出错误,因此应该在您试图使用它的地方使用它……即使无法处理错误,也可以在该点检测到错误。)

看看您尝试使用
断言
,看起来您已经接近了。这不是正确的用法:

assert (x > 0) ? "assertion failed" : "assertion passed";
您将
断言
视为一个布尔值。然后,使用
?:运算符,您正在将布尔值键入到。。。好。。。我什么也没做。只需将一个字符串(
“断言失败”
“断言传递”
)返回到对该字符串没有任何作用的代码行

很接近,但不完全一样

assert
本身不仅仅是检查一个条件。它通过抛出错误或允许代码路径继续来响应条件。它使用
运算符,但不作为
的一部分:操作员。所以我想你要做的是:

assert (x > 0) : "assertion failed";
这基本上是说:

x应始终大于0。如果不是这样,那就大错特错了。停止做任何事情,并提出一个错误

这将引发一个
AssertionError
,其中包含消息
“assertion failed”
(当然,您希望用一条更有意义和有用的消息来替换它,包括有关正在检查的值的任何有用的运行时信息,以帮助您进行调试)

然后,在其他地方,您将处理该
AssertionError
,并以某种方式响应它

使用
断言
与下面的内容非常相似,只不过更简短,更具表达力:

if (x <= 0) throw new CustomException("assertion failed");

if(x)我不知道..但是,我在谷歌上找到了这个。你可以在这里检查一下…如果你也用我的例子解释一下,我将不胜感激。:-@BhavikAmbani:什么?你能更清楚你的意思吗?