首页 新闻 会员 周边

JAVA RuntimeException 异常一定要在源码中有 'throw new xxx' 才会抛出吗?

0
[待解决问题]

JAVA的RuntimeException类型的异常,是不是一定要在“源码”中有 “throw new xxx” 这样的动作才会抛出 ??

春风十里不如你Ni的主页 春风十里不如你Ni | 初学一级 | 园豆:186
提问于:2023-12-02 16:08
< >
分享
所有回答(4)
0

不一定。在Java中,RuntimeException及其子类是属于Unchecked Exception(非检查异常)的一种,它们不需要在方法签名中声明,也不要求在代码中显式地使用 throw 抛出。这些异常通常是由虚拟机在运行时检测到的错误或不合理的操作引起的,而不是在编译时检查的。

因此,你不一定会在源码中看到 throw new xxx 的形式来抛出RuntimeException。这些异常可能由Java运行时系统自动抛出,比如数组越界、空指针引用等。例如,以下是一个会抛出ArrayIndexOutOfBoundsException的例子:

java
Copy code
public class Example {
public static void main(String[] args) {
int[] array = new int[5];
System.out.println(array[10]); // 这里会抛出ArrayIndexOutOfBoundsException
}
}
在这个例子中,异常是在运行时由Java虚拟机自动抛出的,而不需要在代码中显式使用 throw。

Technologyforgood | 园豆:5675 (大侠五级) | 2023-12-03 22:23
0

有很多是运行时抛出来的。
比如
int a = 1/0;

子非鱼焉 | 园豆:220 (菜鸟二级) | 2023-12-14 17:27
0

RuntimeException类型的异常是在程序编译之后,代码执行到异常时进行抛出,比如你第一张图片上控制台抛出的ArrayIndexOutOfBoundsException索引超限异常,代码在编译过程中不会出现异常,但是在代码执行System.out.print(arr[4]),由于传入的数组arr长度为3,而arr[4]是该数组的第5个元素,超出了数组arr的索引范围,代码执行出现ArrayIndexOutOfBoundsException异常,自动抛出了运行时异常ArrayIndexOutOfBoundsException,这个异常是会中断当前执行的线程的。这个异常可以通过try catch进行捕获的,捕获后的异常逻辑在catch代码块中书写,这种try catch方式不会中断当前线程。
而第二张图片上if(){}进行手动判断然后将符合条件的进行手动抛出throw new Exception,属于人为性质主动判断并抛出的,也就就是只要if条件成立就中断当前的线程

ASKANDANSWERS | 园豆:220 (菜鸟二级) | 2023-12-24 02:37
0

你的意思是找不到异常对象是从哪里构建的么?可以参考一下:
在生成栈轨迹时,Java 虚拟机会忽略以下两种情况:

异常构造器和填充栈帧的 Java 方法:异常构造器和填充栈帧的 Java 方法(Throwable.fillInStackTrace)通常被认为是不重要的,并且可能对于诊断问题没有太大帮助。因此,在生成栈轨迹时,Java 虚拟机会直接从新建异常位置开始算起,而忽略这些方法。

标记为不可见的 Java 方法栈帧:有时候,一些 Java 方法可能被标记为不可见,例如私有方法或者由字节码工具生成的方法。这些方法栈帧通常被认为是实现细节,对于调试或错误分析来说并不重要。因此,Java 虚拟机也会忽略这些标记为不可见的方法栈帧。

以上策略可以减少生成栈轨迹所需的开销,并且只保留与问题相关的关键信息,以便更好地进行故障排查和调试。

穷凶极恶哆啦A梦 | 园豆:204 (菜鸟二级) | 2024-02-02 16:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册