本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
5分22秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 步骤 1 : 可查异常 步骤 2 : 运行时异常 步骤 3 : 错误 步骤 4 : 三种分类 步骤 5 : 练习-异常分类 步骤 6 : 答案-异常分类
可查异常: CheckedException
可查异常即必须进行处理的异常,要么try catch住,要么往外抛,谁调用,谁处理,比如 FileNotFoundException 如果不处理,编译器,就不让你通过 package exception;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class TestException {
public static void main(String[] args) {
File f= new File("d:/LOL.exe");
try{
System.out.println("试图打开 d:/LOL.exe");
new FileInputStream(f);
System.out.println("成功打开");
}
catch(FileNotFoundException e){
System.out.println("d:/LOL.exe不存在");
e.printStackTrace();
}
}
}
运行时异常RuntimeException指: 不是必须进行try catch的异常
常见运行时异常: 除数不能为0异常:ArithmeticException 下标越界异常:ArrayIndexOutOfBoundsException 空指针异常:NullPointerException 在编写代码的时候,依然可以使用try catch throws进行处理,与可查异常不同之处在于,即便不进行try catch,也不会有编译错误 Java之所以会设计运行时异常的原因之一,是因为下标越界,空指针这些运行时异常太过于普遍,如果都需要进行捕捉,代码的可读性就会变得很糟糕。 package exception;
public class TestException {
public static void main(String[] args) {
//任何除数不能为0:ArithmeticException
int k = 5/0;
//下标越界异常:ArrayIndexOutOfBoundsException
int j[] = new int[5];
j[10] = 10;
//空指针异常:NullPointerException
String str = null;
str.length();
}
}
package exception; public class TestException { public static void main(String[] args) { //任何除数不能为0:ArithmeticException int k = 5/0; //下标越界异常:ArrayIndexOutOfBoundsException int j[] = new int[5]; j[10] = 10; //空指针异常:NullPointerException String str = null; str.length(); } }
错误Error,指的是系统级别的异常,通常是内存用光了
在默认设置下,一般java程序启动的时候,最大可以使用16m的内存 如例不停的给StringBuffer追加字符,很快就把内存使用光了。抛出OutOfMemoryError 与运行时异常一样,错误也是不要求强制捕捉的 package exception;
public class TestException {
public static void main(String[] args) {
StringBuffer sb =new StringBuffer();
for (int i = 0; i < Integer.MAX_VALUE; i++) {
sb.append('a');
}
}
}
package exception; public class TestException { public static void main(String[] args) { StringBuffer sb =new StringBuffer(); for (int i = 0; i < Integer.MAX_VALUE; i++) { sb.append('a'); } } }
总体上异常分三类:
1. 错误 2. 运行时异常 3. 可查异常
运行时异常 RuntimeException,能否被捕捉?
错误Error,能否被捕捉? 面试题常问题: 运行时异常与非运行时异常的区别
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
2分59秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
面试题常问题:: 运行时异常与非运行时异常的区别:
运行时异常是不可查异常,不需要进行显式的捕捉 非运行时异常是可查异常,必须进行显式的捕捉,或者抛出 不要答成: 运行时异常是运行的时候抛出的异常,非运行时异常,不运行也能抛出 package exception;
public class TestException {
public static void main(String[] args) {
String str = null;
try {
str.toString();
} catch (NullPointerException e) {
System.out.println("捕捉到运行时异常: NullPointerException ");
}
StringBuffer sb = new StringBuffer("1234567890");
try {
for (int i = 0; i < 100; i++) {
sb.append(sb.toString());
}
} catch (OutOfMemoryError e) {
System.out.println("捕捉到内存用光错误: OutOfMemoryError");
}
}
}
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2024-07-05
一句话说明运行时异常和非运行时异常的区别
1 个答案
虚心求学 跳转到问题位置 答案时间:2024-07-05 运行时异常、非运行时异常和错误都可以被捕获,只不过catch的不是Exception,而是Throwable。因为 Exception 和 Error 都继承类 Throwable。
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2020-09-20
总结
6 个答案
LUO萝北 跳转到问题位置 答案时间:2023-05-09 运行时异常 RuntimeException,能否被捕捉?
错误Error,能否被捕捉?
面试题常问题: 运行时异常与非运行时异常的区别
运行时异常可以被捕捉,error不能被捕捉 运行时异常与非运行时异常的区别:运行时异常是非受检查异常,它可以在代码中不必显示的处理或抛出;非运行时异常都是受检查异常,必须在代码中显式地处理或者抛出。如果不处理或抛出,则编译器会报错。 CodeDragonZ 跳转到问题位置 答案时间:2022-10-16 运行时异常:只有触发了才会执行,不是必须要
错误和运行异常,都是可查异常,所以也不是必须的
非可查异常和可查异常,一个必须捕获,不然编译器不通过,一个可以不捕获,编译器能通过
流下技术的眼泪 跳转到问题位置 答案时间:2021-08-08 很棒!
cri弥 跳转到问题位置 答案时间:2020-10-01
ArithmeticException——由于除数为0引起的异常;
ArrayStoreException——由于数组存储空间不够引起的异常;
ClassCastException—一当把一个对象归为某个类,但实际上此对象并不是由这个类 创建的,也不是其子类创建的,则会引起异常;
IllegalMonitorStateException——监控器状态出错引起的异常;
NegativeArraySizeException—一数组长度是负数,则产生异常;
NullPointerException—一程序试图访问一个空的数组中的元素或访问空的对象中的 方法或变量时产生异常;
OutofMemoryException——用new语句创建对象时,如系统无法为其分配内存空 间则产生异常;
SecurityException——由于访问了不应访问的指针,使安全性出问题而引起异常;
IndexOutOfBoundsExcention——由于数组下标越界或字符串访问越界引起异常;
IOException——由于文件未找到、未打开或者I/O操作不能进行而引起异常;
ClassNotFoundException——未找到指定名字的类或接口引起异常;
CloneNotSupportedException——一程序中的一个对象引用Object类的clone方法,但 此对象并没有连接Cloneable接口,从而引起异常;
InterruptedException—一当一个线程处于等待状态时,另一个线程中断此线程,从 而引起异常,有关线程的内容,将在下一章讲述;
NoSuchMethodException一所调用的方法未找到,引起异常;
Illega1AccessExcePtion—一试图访问一个非public方法;
StringIndexOutOfBoundsException——访问字符串序号越界,引起异常;
ArrayIdexOutOfBoundsException—一访问数组元素下标越界,引起异常;
NumberFormatException——字符的UTF代码数据格式有错引起异常;
IllegalThreadException—一线程调用某个方法而所处状态不适当,引起异常;
FileNotFoundException——未找到指定文件引起异常;
EOFException——未完成输入操作即遇文件结束引起异常。
cri弥 跳转到问题位置 答案时间:2020-10-01 运行时异常: 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
非运行时异常 (编译异常): 是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
每天都要学Java啊 跳转到问题位置 答案时间:2020-09-28 很好
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2020-03-18
非运行时错误也可以被捕获
2019-07-15
关于error有些疑问?
2019-06-27
运行时非运行时
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 7 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|