我预计这个程序会给我编译错误,但它编译成功,并且在运行它时出现运行时异常。
class substr11
{
public static void main(String args[])
{
String s = "abcde";
System.out.println(s.substring(1,-1));
}
}
编译错误应该能够解析(字符串在body本身中初始化)并发现这个字符串操作会导致编译错误,对吧? 有人可以告诉我为什么它没有抛出编译错误吗?
线程“main”中的异常 java.lang.StringIndexOutOfBoundsException: String ind ex 超出范围:-2 在 java.lang.String.substring(来源未知) 在 substr11.main(substr11.java:9)
最佳答案
编译错误是指编译器无法编译代码(语法错误、缺少符号等)。
您的程序中情况并非如此,您将两个 int
传递给 String#substring正如预期的那样,并且您没有遗漏任何内容(没有遗漏类,括号没问题,分号也符合预期),那么编译器为什么要关心呢?
如果代码已编译,但由于某些异常(如 ArrayIndexOutOfBounds )而崩溃,您会收到异常。
关于java - 异常而不是编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374373/