【发布时间】:2014-03-22 11:35:15
【问题描述】:
以下哪些语句与 String 的 charAt() 方法有关 类是真的吗?
选择 2 个选项
A. charAt() 方法可以将 char 值作为参数。
B. charAt() 方法返回一个 Character 对象。
C.表达式 char ch = "12345".charAt(3) 会将 3 分配给 ch。
D.表达式 char ch = str.charAt(str.length()) 其中 str 为“12345”,会将 3 分配给 ch。
E.第一个字符的索引是0。
F。如果传递的值大于或等于字符串的长度(或小于 0),则抛出 StringIndexOutOfBoundsException。
G.如果传递的值大于或等于字符串的长度(或小于 0),则抛出 ArrayIndexOutOfBoundsException。
问题的答案是 A,E 。我的答案是E,F
论文的原因如下:两者 - ArrayIndexOutOfBoundsException 和
StringIndexOutOfBoundsException,扩展 IndexOutOfBoundsException 和
虽然在实践中,charAt 方法会抛出
StringIndexOutOfBoundsException,它不是一个有效的选项,因为
实现可以随意抛出一些其他异常,只要它是
IndexOutOfBoundsException
但这并没有什么意义,我很确定charAt() 会抛出StringIndexOutOfBoundsException。论文答案不正确吗?
【问题讨论】:
-
docs.oracle.com/javase/7/docs/api/java/lang/… 说是抛出 IndexOutOfBoundsException
-
官方实现会抛出一个
StringIndexOutOfBoundsException,但是另一个实现抛出一个ArrayIndexOutOfBoundsException是完全有效的,因为一个字符串是由一个字符数组支持的,或者只是一个IndexOutOfBoundsException。所以 F 或 G 都不正确,因为它依赖于实现。 -
与其输入所有这些并询问抛出了哪种类型的异常,不如尝试一下然后看看抛出的是哪种异常不是更容易吗?
-
即使它确实抛出了 StringIndexOutOfBoundsException,您也不应该依赖它,因为该方法的文档约定是抛出 IndexOutOfBoundsException。 Oracle 可以决定,在 Java 9 中,抛出一个扩展 IndexOutOfBoundsException 的 BrandNewException,而不会破坏记录在案的合同。如果您依赖抛出 StringIndexOutOfBoundsException,那么您依赖的实现细节可能会在未来发生变化。
-
@Zavior:同意。但也许测试允许参考javadoc,并衡量学生阅读和理解它的能力。这将是一个非常非常好的主意,因为这里提出的许多问题的答案都写在了 javadoc 中。
标签: java