以下是我试图回答的问题:
以下哪项适当使用断言?
public class Hunt { public static void main(String... args) { int y = 10; assert y > 5; // #1 new Hunt().netant(y); } public void netant(int x) { assert x > 0; // #2 anteater(x); } private void anteater(int x) { assert x > 0; // #3 } }
选择:2
选项:
- #1
- #2
- #3
- 虽然断言正确使用,但程序存在运行时错误
醇>正确答案:1& 3
解释:不建议使用断言断言公共方法的参数
答案指出" 不建议使用断言来断言公共方法的参数"。但是在上面的代码中,尽管assert语句用于断言main()方法的参数,但它被选为正确的答案!
建议在main()方法中使用assert语句吗?
答案 0 :(得分:3)
断言是编码错误的防御机制。在公共方法中输入无效参数是用户错误,即使它是程序员正在使用的API。
用户永远不应该看到断言,测试应该。
答案 1 :(得分:1)
不建议使用断言来声明公共方法的参数。 y
不是一个论点。
public static void main(String... args) {
int y = 10;
assert y > 5; // #1
new Hunt().netant(y);
}
但是,以下不是一个好习惯:
public static void main(String... args) {
assert args.length==42;
}
答案 2 :(得分:1)
Assertions不应该用于:
#1
:检查局部变量的值。使用断言检查main方法的参数不正确,但检查局部变量是有效的。#2
:检查公共方法的参数。无效使用断言。#3
:检查私有方法的参数。班级控制着
方法调用中使用的参数,因此这是一个有效的用途。