
体系结构:
成员方法:
代码示例:
public class ExceptionDemo02 {
public static void main(String[] args) {
int []arr={1,3,5};
try{
System.out.println(arr[3]);
}catch (ArrayIndexOutOfBoundsException e){
//什么也没输出
System.out.println(e.getMessage());
//输出java.lang.ArrayIndexOutOfBoundsException: 3
System.out.println( e.toString());
//输出:java.lang.ArrayIndexOutOfBoundsException: 3
// at org.example.Exception.ExceptionDemo02.main(ExceptionDemo02.java:14)
e.printStackTrace();
}
System.out.println("程序运行结束");
}
}
1.Exception
Error:严重问题,不需要处理,也处理不了.
Exception:异常类,表示程序本身可以处理的问题:
- RuntimeException:运行时异常,在编译期是不检查的,出现问题后,需要检查代码,修改代码
- 非RuntimeException:编译器必须处理的,否则程序不能编译,更无法执行
JVM的默认处理方案:
如果程序出现问题,而我们又未做任何处理,JVM默认处理:
- 将异常原因以及出现的位置等信息在控制台输出;
- 程序停止运行
代码示例:
package org.example.Exception;
public class ExceptionDemo01 {
public static void main(String[] args) {
exceptionMethod();
}
public static void exceptionMethod(){
int [] arr={1,3,5};
System.out.println(arr[3]);
}
}
运行结果:
1.2 try…catch…处理异常try{
可能出现异常的代码块
}catch(异常类名 变量名){
异常处理代码
}
执行流程:
程序从try里面的代码开始执行,出现异常是,自动生成一个异常类对象,该异常类对象将被提交给java运行时系统
当java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理;只想完毕后,程序可继续运行.
1.2.1 使用try…catch…处理示例:
package org.example.Exception;
public class ExceptionDemo02 {
public static void main(String[] args) {
int []arr={1,3,5};
try{
System.out.println(arr[3]);
}catch (ArrayIndexOutOfBoundsException e){
e.printStackTrace();
}
System.out.println("程序运行结束");
}
}
运行结果:
1.2.2不使用try…catch:package org.example.Exception;
public class ExceptionDemo02 {
public static void main(String[] args) {
int []arr={1,3,5};
System.out.println(arr[3]);
System.out.println("程序运行结束");
}
}
运行结果:
可以看到"程序运行结束"并没有在控制台输出
1.2.3 catch中设置的异常与抛出的异常不匹配代码示例:
package org.example.Exception;
import java.io.FileNotFoundException;
public class ExceptionDemo02 {
public static void main(String[] args) {
int []arr={1,3,5};
try{
System.out.println(arr[3]);
}catch (ArrayStoreException e){
e.printStackTrace();
}
System.out.println("程序运行结束");
}
}
抛出的异常应该为java.lang.ArrayIndexOutOfBoundsException,但是我设置要捕获的异常为ArrayStoreException ,结果如何?
实际运行结果:
没捕获到对应类型的异常,按照默认情况处理.
1.3 thows异常处理异常处理也可以使用throws.
格式:throws 异常类名
是附加在方法括号后,方法体"{"前
然而说是处理异常,其实就是将异常抛给调用者,谁调用谁处理,可以层层往上抛(真会甩锅)
注意:
- 编译时异常必需要进行处理,可try…catch…也可throws
- 运行时异常可以不处理,也处理不了
格式:
public class 自定义异常类名 extends Exception{
无参构造;
有参构造;
}
示例:
package org.example.Exception;
public class UnknownException extends Exception{
public UnknownException() {
}
public UnknownException(String message) {
super(message);
}
}
package org.example.Exception;
public class ExceptionDemo03 {
public static void main(String[] args) {
try {
method();
}catch (UnknownException e){
e.printStackTrace();
}
}
public static void method() throws UnknownException {
int []arr={1,3,5};
try{
System.out.println(arr[3]);
}catch (ArrayIndexOutOfBoundsException e){
throw new UnknownException("俺也不知道出现了啥问题,程序就是不动");
}
}
}
运行结果:
**
**
编译时异常与运行时异常区别
Java中异常分为两大类:编译时异常(受检异常)和运行时异常(非受检异常).所有的RuntimeException类及其子类被称为运行时异常,其他的异常都是编译时异常
- 编译时异常:必需显式处理,否则直接报错,无法编译
- 运行时异常:无需显式处理,也可和编译时异常一样处理
throws和throw区别
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)