-
java异常抛出
2015-03-07 15:28:22 -
java异常抛出的执行顺序
2020-01-04 17:03:40java异常抛出的执行顺序 有如下一段代码 try { statement1; statement2; statement3; } catch(Exception1 ex) { handling ex; } catch(Exception2 ex) { handling ex; //处理异常的代码 throw ex; //抛出...java异常抛出的执行顺序
有如下一段代码
try { statement1; statement2; statement3; } catch(Exception1 ex) { handling ex; } catch(Exception2 ex) { handling ex; //处理异常的代码 throw ex; //抛出一个异常 } finally { finalStatements; } Next statement;
如果statement2抛出一个Exception2类型的异常,该程序的执行顺序应该是什么呢?
首先,该异常将会被Exception2 的catch代码块拦截到,然后执行 handing ex;语句,然后 进入 finally代码块,最后回到上次的catch代码块执行 throw ex;即抛出异常。
-
Java异常抛出专题
2018-06-28 14:12:12对于编译性异常我们必须捕获或者抛出 ,否则程序无法编译成功,对于非编译性异常(运行时异常),这类异常可以编译成功但在运行的时候可能就会发生异常,常见的运行时异常主要有:ClassCastException、...前言
对于编译性异常我们必须捕获或者抛出 ,否则程序无法编译成功,对于非编译性异常(运行时异常),这类异常可以编译成功但在运行的时候可能就会发生异常,常见的运行时异常主要有:
ClassCastException、IndexOutOfBoundsException、NullPointerException、ArrayStoreException
等,这类异常一般是程序逻辑错误引起的,在编写代码的时候应该规避这类异常的发生。相关问题
1:如果当前代码块存在异常,应该采用抛出的方式or捕获方式?
2:针对潜在的运行时异常是否应该对其做处理?判读采用抛出异常or捕获处理异常?
- 1:抛出异常VS捕获异常
抛出异常:抛出异常后当前方法无法继续下去,会从当前方法跳出来,然后把问题交给上一级处理,通过throws关键字抛出异常
捕获异常:可以对异常进行处理或者继续抛出,通过try-catch关键字进行异常捕获,异常在catch中被处理后,可以继续向下执行。也可以在catch中通过throw方法继续向外抛出异常,此时不能继续向下执行。
- 2:异常处理的三个原则:具体明确、及早抛出、延迟处理
具体明确:抛出与捕获异常的时候尽量明确异常的类型,这样才能根据不同的异常,提供不同的解决方案。
@SuppressWarnings("resource") public void readFile(String fileName){ if(fileName==null){ throw new IllegalArgumentException("fileName must not be null"); } try { InputStream is= new FileInputStream(fileName); is.read(); is.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); //处理一 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); //处理二 } }
提早抛出:有些比较明确的异常需要提前抛出,这样我们可以通过控制台打印的异常信息快速定位到出错的代码块,同时也可以避免不必要的对象构造或者资源调用。如下分别在调用两个方法的时候fileName参数都传递为null,显然采用代码二的方式更有利排查错误。
代码一:@SuppressWarnings("resource") public void readFile(String fileName) throws IOException { InputStream is=new FileInputStream(fileName); is.read(); is.close(); } Exception in thread "main" java.lang.NullPointerException at java.io.FileInputStream.<init>(FileInputStream.java:130) at java.io.FileInputStream.<init>(FileInputStream.java:93) at com.javaweb.test.ExceptionTest.readFile(ExceptionTest.java:27) at com.javaweb.test.ExceptionTest.main(ExceptionTest.java:17)
代码二:
@SuppressWarnings("resource") public void readFile(String fileName) throws IOException { if(fileName==null){ throw new IllegalArgumentException("fileName must not be null"); } InputStream is=new FileInputStream(fileName); is.read(); is.close(); } Exception in thread "main" java.lang.IllegalArgumentException: fileName must not be null at com.javaweb.test.ExceptionTest.readFile(ExceptionTest.java:27) at com.javaweb.test.ExceptionTest.main(ExceptionTest.java:17)
延迟捕获:让异常捕获处理放在最外层进行处理,这样才能根据不同的情况进行不同的处理。如下面代码:
@SuppressWarnings("resource") public void readFile(String fileName) { if(fileName==null){ throw new IllegalArgumentException("fileName must not be null"); } InputStream is; try { is = new FileInputStream(fileName); is.read(); is.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
在readFile这个方法中处理异常的方法并没有直接抛出而是捕获处理,看起来可能没有什么错误。但在上层引用中,不同的业务逻辑对待处理异常的方式可能不同,所以对于底层方法出现的异常需要进行抛出。
针对潜在的运行时异常是否应该对其做处理?
代码一:
@SuppressWarnings("resource") public void readFile(String fileName) throws IOException { if(fileName==null){ throw new IllegalArgumentException("fileName must not be null"); } InputStream is=new FileInputStream(fileName); is.read(); is.close(); }
代码二:
public int divide(int a ,int b){ int result=0; if(b!=0){ result=a/b; } return result; }
通过对比代码一与代码二,可以总结一些规律。针对存在潜在运行时异常的代码块,如果能通过逻辑处理从而避免抛出异常,那么就对代码进行逻辑处理;如果无法进行逻辑处理从而避免抛出异常,那么就及时抛出异常。
catch中通过throw继续抛出异常,此时throw抛出的异常如何被接收?
@Override public void add(Category bean) { // TODO Auto-generated method stub try { QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource()); String sql="INSERT INTO category (id,name,description) VALUES(?,?,?)"; Object[] params={bean.getId(),bean.getName(),bean.getDescription()}; qr.update(sql, params); } catch (SQLException e) { // TODO Auto-generated catch block throw new RuntimeException(e); } }
如果上层方法直接或者间接调用这个add(),那么我们可以通过在上层方法中使用try-catch捕获这个异常
-
Java异常抛出及自定义异常
2017-01-16 19:36:46throw 抛出异常 throws 抛出异常声明 首先自定义异常类(继承Exception类) public class MyException extends Exception { public MyException(String message){ super(message); } } 抛出异常 ...throw 抛出异常
throws 抛出异常声明
首先自定义异常类(继承Exception类)
public class MyException extends Exception { public MyException(String message){ super(message); } }
抛出异常package yh; public class Test { public void g(int num) throws MyException{ if(num < 0) throw new MyException("参数不能为负!"); else System.out.println(num); } public static void main(String[] args) { // TODO Auto-generated method stub Test t = new Test(); try{ t.g(1); t.g(2); t.g(-1); t.g(5); }catch(MyException e){ System.out.println(e.getMessage()); } } }
输出结果如下: -
Java 异常抛出 简单用法示例
2018-06-30 14:41:42在面向对象语言里,使用异常(其实也是类)。把出错信息封装到异常类里面,这样当出错的时候,就可以根据捕获的异常对象获取更多的出错信息。简单的大家都懂,直接上代码:(1)public class TestSystemIn { public... -
Java异常抛出类
2013-06-06 16:41:201. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,... -
java异常抛出时间顺序
2013-01-24 23:38:261、当前方法抛出异常时(交给java虚拟机执行异常处理) public class ExceptionTest5 { public void method(String str) throws MyException{ if(str == null){ throw new MyException("传入的字符串参数... -
Java异常抛出时的规定
2013-03-07 17:08:381,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类. 2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集. 3,如果父类或者接口的... -
(java 基础知识) java异常抛出和返回值
2015-12-01 01:49:30同时,抛出一个异常对象 。 File file = new File("文件存储地址"); 但“存储文件地址”不存在,会在程序执行中,报文件空指针异常。 ② 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常... -
Java 如何抛出异常、自定义异常
2017-06-13 23:18:022、throw : 将产生的异常抛出(强调的是动作),抛出的既可以是异常的引用,也可以是异常对象。(位置: 方法体内)3、throws : 如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来... -
java 在方法中抛出异常_Java异常的抛出
2021-02-28 13:52:20在Java中,当定义的方法可能产生异常时,程序员必须抛出可能的异常。抛出异常的两种方式,一是在方法内部用throw语句,二是在方法定义时用throws关键字1.throw语句在Java中,throw语句用于抛出一个异常。异常的具体... -
JAVA中异常抛出、捕获机制—try catch throw
2017-11-11 18:36:55Java异常抛出,捕获机制 -
Java 如何抛出异常、自定义异常、手动或主动抛出异常
2020-08-29 15:56:18Java 如何抛出异常、自定义异常、手动或主动抛出异常 -
java自定义异常抛出
2018-10-03 18:49:08java自定义异常抛出 public class HelloWorld { public static void main(String []args) { System.out.println("Hello World!"); try{ exceptiona(); }catch(Exception e){ System.out.... -
Java 自定义异常 异常抛出
2017-08-14 12:36:31/* 对于角标是整数不存在 可以用角标越界表示 对于负数为角标的情况 准备用负数角...注意:如果让一个类称为异常类,必须要继承异常体系,因为只有称为体系的子类才具备可抛性 才可以被两个关键字 所操作,throws thro -
java 异常抛不抛出的影响
2017-01-22 18:37:58对于java中的异常问题,都知道需要try/catch操作,然而有的时候,还需要throws操作,try/catch操作可能会影响到程序的运行。 public class Test { public static void main(String[] args) { add(); join(); } ... -
Java异常处理和异常抛出
2019-02-21 13:11:44生活中的异常是指那些有异于常态,和正常情况不一样,有问题的状态,编程世界中的异常是指阻止当前方法或作用域继续执行的状态。比如,程序要打开一个不存的文件、网络连接中断、除零操作、操作数...一.Java异常体系... -
Java 异常:抛出异常
2018-09-15 18:06:181.throw用于抛出具体异常类的对象,一般用于方法体中。 2.什么时候使用:当所写的代码因不满足某些条件致使程序无法运行时可以借助throw抛出一个异常对象提醒程序员。 3.当b为0时不满足下面... -
java 异常之手动抛出 和 自动抛出
2018-11-01 23:40:05java 异常之手动抛出 和 自动抛出1.java异常处理机制的两类 1.java异常处理机制的两类 抓:异常的处理,有两种方式 ① try-catch-finally ② throws 抛: ① 自动抛出 可以理解为所有没有使用throw关键字的... -
Java手动抛出异常&python手动抛出异常
2019-02-28 17:34:011. java if(条件){ throw new RuntimeException("描述。。。"); //直接手动抛出异常 } 2. python if 条件: raise RuntimeError('描述。。。') #直接手动抛出异常 -
Java异常之抛出异常详解和代码举例
2020-06-06 14:20:45异常类型不同,抛出异常的方法也不同,分为:系统自动抛出的异常、指定方法抛 出的异常。 3.系统定义的异常由系统抛出;指定方法抛出的异常需使用关键字throw或throws; 我们主要讨论由方法抛出的异常用法。 1.... -
java如何抛出异常
2019-02-27 21:12:221.什么时候抛出异常? 如果你觉得某些”问题”解决不了了,那么你就可以抛出异常了。比如,你在写一个service,其中在写到某段代码处,你发现可能会产生问题,那么就请抛出异常吧,相信我,你此时抛出异常将是一个最佳... -
java捕获异常和抛出异常_Java捕获多个异常,重新抛出异常
2020-07-12 04:14:52java捕获异常和抛出异常In Java 7, catch block has been improved to handle multiple exceptions in a single catch block. If you are catching multiple exceptions and they have similar code, then using ... -
JAVA如何抛出异常
2016-04-12 14:30:43JAVA如何抛出异常 分享| 2011-07-07 13:54mengmeng2xiao | 浏览 49337 次 java 2011-07-07 13:59 #2016年高质量新标准全面升级!# 提问者采纳 如果你知道你写的某个函数有... -
java中异常抛出
2019-03-20 09:48:30//代码1 public static void test() throws Exception { ... System.out.println("异常后"); //编译错误,「无法访问的语句」 } //代码2 try{ throw new Exception("参数越界"); }catch(Exceptio... -
Java中异常抛出和自定义异常
2017-04-14 16:54:57那么是如何抛出异常的呢?需要用到2个关键字:throw和throws。public void 方法名(参数列表) throws 异常列表 { //调用会抛出异常的方法 //或者 throw new Exception(); }自定义异常class 自定义异常类 extends ... -
java重新抛出异常
2017-09-01 19:55:31如果只是把当前异常对象重新抛出,那么printStackTrace()方法显示的将是原来抛出点的调用栈信息,而非重新抛出点的信息。要想更新这个信息,可以调用fillStackTrace()方法并返回一个Throwable对象,它是通过把当前... -
java异常4 手动抛出异常与自定义异常类
2020-02-25 21:59:561,Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要使用人工创建并抛出。 2首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。 可以抛出的异常必须是... -
Java 异常,关于业务中异常抛出的使用总结
2020-04-22 11:34:54Java 异常,关于业务中异常抛出的使用总结 异常可作为正常的错误状态使用,如"在业务层中,判断到用户不存在,可以直接抛出异常信息,在Web层接口中进行捕获,并返回错误码",这是正确的错误信息返回。这样做的益处...