java异常处理原则(Java异常)
导读:异常 一、异常:就是程序出现不正常的情况。 Throwable Error Exception RuntimeException 非RuntimeException Error:严重问题,不处理...
异常
一 、异常:就是程序出现不正常的情况 。
Throwable Error Exception RuntimeException 非RuntimeException Error:严重问题,不处理 Exception:异常类 ,程序本身可以处理 RuntimeException:编译期间不检查 ,程序出现问题再修改代码 非RuntimeException:编译期间处理 ,否则程序不能通过编译 ,更不能运行二 、异常处理方案:
1. try...catch... 2. throws1. try...catch...
//系统默认处理异常方式 public class ExceptionDemo { public static void main(String[] args) { System.out.println("开始"); method(); System.out.println("结束"); } public static void method (){ int[] arr = {1,2,3}; System.out.println(arr[3]); } }运行结果:当出现异常时 ,程序不能继续往下执行
开始 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at com.chawaner.test2.ExceptionDemo.method(ExceptionDemo.java:17) at com.chawaner.test2.ExceptionDemo.main(ExceptionDemo.java:11) //try...catch..处理异常 public class ExceptionDemo { public static void main(String[] args) { System.out.println("开始"); method(); System.out.println("结束"); } public static void method (){ int[] arr = {1,2,3}; try { System.out.println(arr[3]); } catch (ArrayIndexOutOfBoundsException e) { e.printStackTrace(); } } }运行结果:当出现异常时 ,程序能继续往下执行
开始 结束 java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at com.chawaner.test2.ExceptionDemo.method(ExceptionDemo.java:18) at com.chawaner.test2.ExceptionDemo.main(ExceptionDemo.java:11)2. Throwable:所有异常的父类 ,包含的一些方法
public String getMessage() 返回异常信息 public String toString() 返回可抛出的简短说明 public void printStackTrace() 打印详细异常信息 public class ExceptionDemo { public static void main(String[] args) { System.out.println("开始"); method(); System.out.println("结束"); } public static void method (){ int[] arr = {1,2,3}; try { System.out.println(arr[3]); } catch (ArrayIndexOutOfBoundsException e) { //e.printStackTrace(); //返回异常信息 System.out.println("异常信息:"+e.getMessage()); //返回可抛出的简短说明 System.out.println("简短说明:"+e.toString()); //打印详细异常信息 e.printStackTrace(); } } }运行结果:
开始 异常信息:Index 3 out of bounds for length 3 简短说明:java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 结束 //详细异常信息 java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at com.chawaner.test2.ExceptionDemo.method(ExceptionDemo.java:18) at com.chawaner.test2.ExceptionDemo.main(ExceptionDemo.java:11)3. 编译时异常和运行时异常的区别 运行时异常:
public class ExceptionDemo1 { public static void main(String[] args) { method(); } public static void method (){ int[] arr = {1,2,3}; //这个索引越界了 ,但是写代码时没有报错 ,运行的时候才报错 //所以 ,这是个运行时异常 System.out.println(arr[3]); } }运行结果:ArrayIndexOutOfBoundsException
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at com.chawaner.test2.ExceptionDemo1.method(ExceptionDemo1.java:17) at com.chawaner.test2.ExceptionDemo1.main(ExceptionDemo1.java:10)编译时异常:不一定会出问题 ,但有可能会出问题
4. throws 有时候异常能够用try...catch...处理 ,有时候可能出现的异常是我们处理不了的,这个时候用throws解决 。在方法括号后跟上throws 异常类名
运行结果:throws可以解决编译时异常那个红色波浪线的提示 。 Wed Nov 09 00:00:00 CST 2022运行结果:运行时异常用throws解决不了 ,只是抛出异常 。还得用try...catch...处理 ,才能在提示报错后,继续执行后面的程序 。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at com.chawaner.test2.ExceptionDemo1.method(ExceptionDemo1.java:24) at com.chawaner.test2.ExceptionDemo1.main(ExceptionDemo1.java:14)总结:
运行时异常用try...catch... 编译时异常用throws或者try...catch... try...catch...是有显示处理的 ,就是用try...catch...你可以自己处理异常 throws是抛出异常 ,控制台显示的是系统给的异常结果自定义异常
写一个类 ,让类继承Exception
//自己写的JException异常类 public class JException extends Exception{ public JException() { } public JException(String message) { super(message); } } /* IntNumber类 ,里面有个检查数字范围的方法checkNum(int i) checkNum(int i)方法是由JException抛出的 JException抛出的异常结果显示为:输入的数字有误 ,范围应为:0-100 */ public class IntNumber { public void checkNum(int i) throws JException{ if (i < 0 || i > 100) { //抛出异常 ,并显示自己写的异常结果信息 throw new JException("输入的数字有误 ,范围应为:0-100"); }else { System.out.println("正常"); } } } //测试类:输入数字 ,并检查数字的范围 public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个数字:"); int i = sc.nextInt(); IntNumber in = new IntNumber(); try { //编译时异常 in.checkNum(i); } catch (JException e) { e.printStackTrace(); } } } //运行结果:控制台显示了自定义异常类JException //以及自己处理的异常显示结果:输入的数字有误 ,范围应为:0-100 请输入一个数字: 120 com.chawaner.test3.JException: 输入的数字有误 ,范围应为:0-100 at com.chawaner.test3.IntNumber.checkNum(IntNumber.java:12) at com.chawaner.test3.Test.main(Test.java:18)throws和throw的区别
throws throw 用在方法声明后 ,后面跟异常类名 用在方法体内 ,后面跟异常对象 抛出异常,由方法调用者处理 抛出异常 ,由方法内的语句处理 表示可能发生异常 ,但不一定会发生 执行throw时,一定抛出了异常创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!