Java最高

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程

1.介绍

Java断言关键字允许开发人员快速验证程序的某些假设或状态。

在这篇文章中,我们会看看如何使用Java断言关键字。

2.Java断言的历史

Java断言关键字在Java 1.4中引入,所以它已经存在了很长一段时间。但是,它仍然是一个鲜为人知的关键字,可以急剧减少样板并使我们的代码更可读。

例如,在我们的代码中,我们经常需要验证某些可能会阻止我们的应用程序正常工作的条件。通常我们会这样写:

连接conn = getConnection();if(conn == null) {throw new RuntimeException("Connection is null");}

使用断言,我们可以删除如果单个语句断言声明。

3.启用Java的断言

因为Java断言使用断言关键字,不需要导入库或包。

注意,在Java 1.4之前,使用“assert”来命名变量、方法等是完全合法的。当使用较旧的代码和较新的JVM版本时,这可能会造成命名冲突。

因此,为了向后兼容,默认情况下,JVM禁用断言验证。属性必须显式启用它们-enableassertions命令行参数,或其简写ea:

java - ea com金宝搏188体育.baeldung.assertion.Assertion

在本例中,我们为所有类启用了断言。

我们还可以为特定的包和类启用断言:

java - ea: co金宝搏188体育m.baeldung.assertion……com.金宝搏188体育baeldung.assertion.Assertion

在这里,我们为类中的所有类启用了断言com.金宝搏188体育baeldung.assertion包中。

同样,对于特定的包和类,可以使用disableassertions命令行参数,或其简写- da。我们也可以同时使用这四个论点。

4.使用Java断言

添加断言,简单的使用断言关键字,并给它一个布尔基条件:

public void setup() {Connection conn = getConnection();断言conn != null;}

Java还为接受字符串的断言提供了第二种语法,该语法将用于构造AssertionError如果被抛出:

public void setup() {Connection conn = getConnection();assert conn != null: "Connection is null";}

在这两种情况下,代码都在检查到外部资源的连接是否返回非空值。如果这个值是空,JVM将自动抛出一个AssertionError

在第二种情况下,异常将具有附加的细节,这些细节将显示在堆栈跟踪中,并有助于调试问题。

让我们看看在启用断言的情况下运行类的结果:

java.lang.AssertionError: Connection is null at com. baeldun.assertion.setup (A金宝搏188体育ssertion.java:15)

5.处理一个AssertionError

班上AssertionError扩展错误,它本身延伸Throwable。这意味着AssertionError是未检查的异常。

因此,不需要使用断言的方法声明它们,并且不应尝试捕获进一步调用代码。

AssertionErrors意味着无法恢复的情况在应用程序中,所以永远不要尝试处理它们或尝试恢复。

6.最佳实践

关于断言要记住的最重要的一点是它们可以被禁用,所以金宝搏官网188be永远不要以为他们会被处决

因此,在使用断言时要记住以下几点:

  • 总是检查空值和空值可选在适当的地方
  • 避免使用断言来检查公共方法的输入,而应使用未检查的异常,例如IllegalArgumentException或者NullPointerException
  • 不要在断言条件中调用方法,而是将方法的结果分配给一个局部变量并使用该变量断言
  • 对于代码中永远不会执行的位置,断言非常有用,比如默认的的情况下开关语句或在永远不会结束的循环之后

7.结论

Java断言关键字多年来已有,但仍然是语言的鲜为人知的特征。它可以帮助删除大量的样板代码,使代码更可读,并帮助在程序开发中提早识别错误。

请记住,断言在默认情况下是不启用的,因此永远不要假设在代码中使用它们时将执行它们。

与往常一样,完整的源代码是可用的在github上

Java底部

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程
评论在本文上关闭!