在main()方法中使用断言

时间:2015-03-10 11:35:20

标签: java assertions

以下是我试图回答的问题:

  

以下哪项适当使用断言?

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. #1
  2.   
  3. #2
  4.   
  5. #3
  6.   
  7. 虽然断言正确使用,但程序存在运行时错误
  8.         

    正确答案:1& 3

         

    解释:不建议使用断言断言公共方法的参数

         

    来源:http://www.certpal.com

答案指出" 不建议使用断言来断言公共方法的参数"。但是在上面的代码中,尽管assert语句用于断言main()方法的参数,但它被选为正确的答案!

建议在main()方法中使用assert语句吗?

3 个答案:

答案 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:检查私有方法的参数。班级控制着 方法调用中使用的参数,因此这是一个有效的用途。