java - 异常而不是编译器错误

标签 java

我预计这个程序会给我编译错误,但它编译成功,并且在运行它时出现运行时异常。

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/

相关文章:

java - 从xml中提取节点的值

java - 如何在基于spring java的配置中设置ehcache.xml的位置?

java - 当我的应用程序启动前台服务时,如果用户在设置中关闭了通知权限,该服务是否处于前台?

java - getResources 方法错误 [Android Studio]

java - 关于 Wicket 7 中 wicket.properties 位置的冲突警告

java - 我正在黑莓模拟器中将图像写入SD卡,如何清除它以进行测试?

java - Android GC使用什么权限

java - 无法让 jersey 2 应用程序使用自定义 jackson XmlMapper

java - 这是一种安全的加密方法吗

java - 性能一台机器上的两台服务器