什么是“assert”关键字呢?
什么assert呢? 例如在函数中: 
 private static int charAt(String s, int d) { assert d >= 0 && d <= s.length(); if (d == s.length()) return -1; return s.charAt(d); } 
	
 如果你用-enableassertions (或简称为-ea )启动你的程序,那么这个语句 
 assert cond; 
相当于
 if (!cond) throw new AssertionError(); 
如果你没有这个选项启动你的程序,assert语句将不起作用。
 例如, assert d >= 0 && d <= s.length();  ,正如你的问题所发布的,相当于 
 if (!(d >= 0 && d <= s.length())) throw new AssertionError(); 
  (如果你使用-enableassertions启动)。 
 正式的, Java语言规范:14.10。  assert声明如下: 
14.10。
assert声明
断言是包含布尔expression式的assert语句。 断言是启用或禁用 。 如果启用了断言,断言的执行会导致评估布尔expression式,如果expression式计算结果为false则会报告false。 如果断言被禁用,则断言的执行不起任何作用。
 使用-ea开关控制“启用或禁用” , “报告错误”意味着引发AssertionError 。 
 最后, assert一个鲜为人知的特征: 
 你可以附加: "Error message"是这样的: 
 assert d != null : "d is null"; 
指定抛出的AssertionError的错误信息应该是什么。
这篇文章在这里被重写为一篇文章。
 如果条件不满足,将抛出一个AssertionError 。 
 但是,必须启用断言。 否则assertexpression式什么都不做。 看到: 
http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html#enable-disable
  assert是一个debugging工具,如果条件不正确,会导致程序抛出一个AssertionFailedexception。 在这种情况下,如果其后面的两个条件中的任何一个评估为false,程序将抛出异常。  一般来说,  assert不应该用在生产代码中
虽然我已经阅读了很多有关这个文档的文档,但是我仍然对使用它的方式,时间和地点感到困惑。
让它很容易理解:
当你有类似这样的情况:
  String strA = null; String strB = null; if (2 > 1){ strA = "Hello World"; } strB = strA.toLowerCase(); 
您可能会收到警告(在strB = strA.toLowerCase();上显示黄线),那么strA可能会为strB产生一个NULL值。 虽然你知道strB绝对不会为空,以防万一,你用assert来
1.禁用警告。
2.抛出exception错误如果最糟糕的事情发生(当你运行你的应用程序)。
有时候,当你编译你的代码,你不会得到你的结果,这是一个错误。 但是应用程序不会崩溃,而且您花费很多时间来查找导致此错误的位置。
所以,如果你坚持这样的话:
  assert strA != null; //Adding here strB = strA .toLowerCase(); 
你告诉编译器,strA绝对不是一个空值,它可以“平静地”closures警告。 如果它是NULL(最糟糕的情况发生),它将停止应用程序,并向您发送一个错误来find它。
使用此版本的assert语句为AssertionError提供详细消息。 系统将Expression2的值传递给相应的AssertionError构造函数,该构造函数使用值的string表示forms作为错误的详细信息。
详细消息的目的是捕获和传达断言失败的细节。 该消息应该允许您诊断并最终修复导致断言失败的错误。 请注意,详细消息不是用户级别的错误消息,因此通常不必将这些消息单独理解或使其国际化。 详细消息意味着在完整的堆栈跟踪的上下文中,结合包含失败的断言的源代码进行解释。
的JavaDoc
断言通常主要用作检查程序预期行为的手段。 在大多数情况下,这应该会导致崩溃,因为程序员对程序状态的假设是错误的。 这是断言的debugging方面的地方。它们创build了一个检查点,如果我们想要有正确的行为,我们根本无法忽略。
在你的情况下,它会对传入的参数进行数据validation,尽pipe它不会阻止客户将来滥用该function。 特别是如果他们不是,(不应该)被包含在发布版本。
 它确保expression式返回true。 否则,它会抛出一个java.lang.AssertionError 。 
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.10
如果运行开启了断言的应用程序,Assert会抛出一个AssertionError。
 int a = 42; assert a >= 0 && d <= 10; 
如果你运行这个,说: java -ea -jar peiska.jar
它应该抛出一个java.lang.AssertionError