要进行内部逻辑检查,Java中有两种方法,
上述两种方法有何不同(性能方面,编程灵活性等? 哪一个被认为是一个很好的编程实践?
答案 0 :(得分:9)
主要区别在于不保证assert
被处理,除非明确启用断言(通过java
的-ea选项或以编程方式)。另一方面,抛出new AssertionError()
将始终有效。
一些阅读信息:Programming with Assertions
答案 1 :(得分:1)
方式#1"断言(x> y);"使用默认情况下关闭的JVM功能。但是,它可以为您提供更大的灵活性,因为您可以使用一个参数打开和关闭它。
方式#2" if(y> x)抛出新的AssertionError();"将永远执行,您不能通过assert-param将其关闭。这只是一个例外。
我经常看到人们使用Exceptions" real"错误(网络不可用,提供错误输入),而在开发/集成期间经常使用(即打开)断言以进行非常基本的检查(例如,参数不是null
)。 IMO,很难画线。
答案 2 :(得分:0)
当assert(x> y)失败时,它会引发AssertionError(提供的断言被启用)。使用java断言的优点是可以在编译期间启用或禁用它。与手动引发AssertionError相比,您可以禁用生产环境的断言,从而提高性能,在AssertionError中始终执行断言,从而降低性能。
答案 3 :(得分:0)
以上答案中没有一个回答我的第二个问题(哪一个被认为是一个很好的编程实践?)。所以我跟我的朋友和他说过这个问题,如果有些东西是私有的,你是唯一一个调用该函数的人(例如私有函数),那么就使用assert。如果某些内容是公开的,并且您希望其他第三方开发人员可以直接调用该函数,那么请执行显式检查并抛出异常。