java之异常捕获及处理
来源:互联网 发布:能读出身份证的软件 编辑:程序博客网 时间:2024/06/06 00:47
一、处理异常
try{//有可能出异常的语句 } [catch (异常类型 对象) {//异常处理} catch (异常类型 对象) {//异常处理} catch (异常类型 对象) {//异常处理}...] [finally {//不管是否出现异常,都执行的代码}
1、printStackTrace()方法:进行异常信息输出
public class Main { public static void main(String[] args) { System.out.println("11"); try { System.out.println(10 / 0); } catch (ArithmeticException e) { e.printStackTrace(); } finally { System.out.println("11123"); } }
注意事项:在try出错语句之后的语句不再执行
public class Main { public static void main(String[] args) { System.out.println("11"); try { System.out.println(10 / 0); // 在try出错语句之后的语句,不再执行了 System.out.println("!!"); } catch (ArithmeticException e) { System.out.println("出错了"); } finally { System.out.println("11123"); } }}
输出结果:
11
出错了
11123
二、Error和Exception的区别
Error:指的是JVM的错误,此时程序还没有执行,用户无法处理的异常
Exception:程序运行中产生的异常,用户可以处理,我们一般说的处理异常就是指的Exception类以及他的子类的异常
三、java中处理异常的流程
1、程序运行出现异常时,JVM会自动根据异常的类型实例化一个与之匹配的异常类对象(此时用户不用去关心new,由系统自动负责处理)
2、产生异常对象后,会判断当前语句上是否存在有异常处理,如果没有,就交给JVM进行默认处理,处理的方式:输出异常信息,而后结束程序调用
3、如果此时存在异常的捕获操作,那么会由try语句来捕获产生的异常类实例化对象,而后与try语句后的每一个catch进行比较,如果有符合的catch捕获类型,则使用当前catch语句进行异常处理,如果不匹配则向下继续匹配catch
4、 不管最后异常处理 是否能匹配,那么都要向后执行,如果此时存在finally语句,那么先执行finally中的代码,但是执行完毕后需要根据之前catch匹配结果来决定如何执行,如果之前已经成功捕获了异常,那么就继续执行fianlly之后的代码,如果没有捕获成功,那么就将此异常交给JVM进行默认处理
四、两点说明
1、在编写多个catch捕获异常的时候,捕获范围大的异常一定要放在捕获范围小的异常之后,否则程序编译错误
2、虽然直接捕获Exception比较方便,但是这样也不好,因为所有的异常都会按照同样一种方式处理,如果在一些要求严格的项目里面,异常一定要分开处理比较好
五、throws关键字
主要用于方法声明上,指的是当方法之中出现异常后交由被调用处处理,调用处不管是都出现异常,都要用try catch进行异常的处理
public class Main { // 存在throws,表示该方法产生的异常,交给被调用处使用 public static int t(int x, int y) throws Exception { return x / y; } public static void main(String[] args) { // 不管对与错,都要使用try catch进行处理 try { System.out.println(t(10, 2)); } catch (Exception e) { e.printStackTrace(); } }}
注意:不要在主方法中加上throws,因为加上后异常会抛给JVM进行默认处理
六、throw关键字
在程序之中,可以直接手工的抛出一个异常类的实例化对象
public class Main { public static void main(String[] args) { try { throw new Exception("自己定义的异常"); } catch (Exception e) { e.printStackTrace(); } }}
六、throw和throws的区别
throw:指的是在方法中人为抛出一个异常类对象(这个异常类对象可能是自己实例化或者 是抛出已存在的)
throws:在方法的声明上使用,表示此方法在调用时必须处理异常
七、异常的使用格式
public class Main { public static int t(int x, int y) throws Exception { int result = 0; try { result = x / y; } catch (Exception e) { throw e;// 继续向上抛异常,抛给main方法的try catch进行异常输出 } finally { System.out.println("kkkk"); } return result; } public static void main(String[] args) { try { System.out.println(t(10, 0)); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("fianlly"); } }}
缩写:try…finally
public class Main { public static int t(int x, int y) throws Exception { int result = 0; try { result = x / y; } finally { System.out.println("kkkk"); } return result; } public static void main(String[] args) { try { System.out.println(t(10, 0)); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("fianlly"); } }}
八、RuntimeException类
运行时异常,这种异常类最大特征在于:程序在编译的时候,不会强制性的要求用户处理异常,用户可以根据自己的需要选择性处理,但是如果没有处理又发生异常了,就会交给JVM默认处理,也就是说RuntimeException的子异常类,可以由用户根据需要选择进行处理
Exception与RuntimeException的区别:
Exception是RuntimeException的父类,使用exception定义的异常必须要被处理,而RuntimeException的异常可以选择性处理
常见的RuntimeException异常:ArithmeticException,NullPointerException,ClassCastException
九、断言–assert关键字
在java中断言指的是程序执行到某行代码处时一定是预期的结果,默认情况下,断言是不应该影响程序的运行的,也就是说在java编译程序的时候,断言是不起作用的
public class Main { public static void main(String[] args) { int num = 10; //假设期望num是20 assert num == 20 : "num的内容不是20"; System.out.println("num=" + num); }}
输出结果:10 (不报错)
启用断言:java-ea 类名
十、自定义异常
java中已经提供了很多异常,但是在实际中异常往往不够用,因此需要自定义一个异常类,如果想要自定义一个异常类,可以选择继承Exception类或者是RuntimeException类
class addException extends Exception { public addException(String msg) { super(msg); }}public class Main { public static void main(String[] args) { int num = 20; try { if (num > 10) { throw new addException("数值传递过大"); } } catch (Exception e) { e.printStackTrace(); } }}
报错.addException: 数值传递过大
at 报错.Main.main(Main.java:11)
- java之异常的捕获及处理
- java之异常捕获及处理
- Java核心编程之异常的捕获及处理
- 3、Java 异常的捕获及处理
- java中的异常捕获及处理
- java异常的捕获及处理
- Java异常处理之处理未捕获的异常及UncaughtExceptionHandler的使用
- 《异常捕获及处理》
- 异常捕获及处理
- 异常的捕获及处理
- 异常的捕获及处理
- 异常的捕获及处理
- 异常的捕获及处理
- 黑马程序员——Java 异常的捕获及处理
- java异常的捕获及处理 兼论throws与throw
- Java异常的捕获及处理---小总结
- java处理未捕获异常
- JAVA处理未捕获异常
- 使用Webuploader过程中遇到的坑--ios端,选择文件后无反应
- 代码重构实例
- Registry Workshop —— 强大的注册表编辑工具
- 崩溃定位到main方法里怎么办
- 关于社工裤查询脚本 20130505
- java之异常捕获及处理
- java初学之length,length(),size()的区别
- 【zookeeper】应用场景
- 【慢速学数据结构】队列篇
- jsp是servlet的扩展
- JMS工作原理
- 20160715瞎鸡巴讨论WIndows渗透
- poj 3061 Subsequence 取尺法
- 两个Linux分析脚本20160715