-
2021-07-15 21:45:48
1.异常的处理方案
1)异常抛出: throws 把异常抛出到上一层,谁调用谁解决
2)异常捕获: try … catch
try{ 有可能出现异常的代码; }catch(FileNotFoundException e){ 处理异常代码; }catch(NullPointerException e){ 处理异常代码; }catch(Exception e){ 所有异常都能接收; }finally{ 无论try中是否会出现异常,都会执行finally中的代码 //资源的关闭等代码 }
注意:
1.一个try的后面可以接1~n个catch
2.try中如果出现异常,try下面的代码不会执行,直接进入catch的判断
3.catch从上到下一次判断,满足哪一个catch捕获的类型,就执行对应的语句体
4.异常一旦捕获,程序执行过程中出现的异常按照指定方案解决,不会影响后续代码
public class Class02_Exception { public static void main(String[] args) { System.out.println("主方法开始了"); //异常捕获 try{ System.out.println("try开始了"); test(); }catch (FileNotFoundException e){ System.out.println("这是文件未找到异常"); e.printStackTrace(); }catch (Exception e){ e.printStackTrace(); }finally { System.out.println("最终的代码无论是否出现异常都会执行"); } System.out.println("主方法结束了"); }
2.自定义异常
1)类型:自定义的异常类型
2)使用:
1.所有自定异常类型必须直接或间接继承自Exception
2.如果自定义异常为运行时异常,需要直接或间接的继承自RuntimeException
3.throws 制造异常
3)例题
public class Class03_DefineException { public static void main(String[] args) { User user = new User(); user.setUsername("zhangsan"); int age = 8; try{ user.setAge(28); }catch (AgeException e){ try{ user.setAge(18); }catch (AgeException ageException){ ageException.printStackTrace(); } } System.out.println(user); } } class AgeException extends Exception{ public AgeException(){} public AgeException(String message) { super(message); } } class User{ private String username; private int age; public User(){ } public User(String username, int age) { this.username = username; this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) throws AgeException{ if (age<18 || age>100){ throw new AgeException(age+"不合法"); } this.age = age; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", age=" + age + '}'; } }
更多相关内容 -
Java异常抛出和捕获
2021-02-28 15:08:42Java中把非正常情况分为两种,异常(Exception)和错误(Error)。异常.pngError:一般是指与虚拟机相关的问题(虚拟机错误、线程死锁等),这种错误无法回复或不可能捕获Exception:强制性要求用户必须处理...Java中把非正常情况分为两种,异常(Exception)和错误(Error)。
异常.png
Error:一般是指与虚拟机相关的问题(虚拟机错误、线程死锁等),这种错误无法回复或不可能捕获
Exception:强制性要求用户必须处理
RuntimeException:非检查异常,是Exception的子类,由用户选择是否进行处理
自定义异常:继承自Exception类,可以使用父类的大量的方法,也可自己编写方法来处理特定的事件。
自定义异常示例:
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
public class DefinedException {
public static void main(String[] args) {
try {
throw new MyException("\n自定义异常类!");
} catch(MyException e) {
System.out.println(e);
}
}
}
1、 异常抛出
1.1 throws关键字
使用throws将异常进行抛出,throws声明的方法表示该方法不处理异常,而由系统自动将所捕获的异常信息抛给上级调用方法。抛出的异常由上级调用者处理,上级调用者可以进行处理或抛出异常,上级调用者可以抛出更广泛的异常。
如果main方法也不知道如何处理异常就也可以使用throws抛出异常,那么该异常就会交给JVM处理。JVM将打印异常的跟踪栈信息,并中止程序运行。
示例
public class throwsDemo {
public static void main(String[] args) {
int[] a = new int[5];
try {
setZero(a,10);
} catch(ArrayIndexOutOfBoundsException ex) {
System.out.println("数组越界错误!");
System.out.println("异常:"+ex);
}
System.out.println("main()方法结束。");
}
private static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException {
a[index] = 0;
}
}
1.2 throw关键字
除了使用throws抛出异常外也可以使用throw自行抛出异常。throw语句可以单独使用, throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。
示例
public class ExceptionDemo {
public static void main(String[] args) {
int[] a = new int[5];
try {
setZero(a,10);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("异常:"+e);
}
System.out.println("main()方法结束!");
}
public static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException {
System.out.println("setZero方法开始:");
try {
a[index] = 0;
} catch(ArrayIndexOutOfBoundsException ex) {
throw ex;
} finally {
System.out.println("setZero方法结束。");
}
}
}
对应抛出的异常实例,既可以显式捕获该异常,也可完全不理会该异常,把该异常交给该方法调用者处理。
2、 异常捕获
而对于Exception我们乐意使用try...catch进行捕获。try...catch不允许存在单独的try或者catch块,可存在多个catch块。try块中存放业务功能代码,catch块中存放异常处理代码。对于捕获的异常一般可以使用printStackTrace()方法追踪输出至标准错误流。
try...catch后可以添加finally,使用finally可以保证系统退出,finally块中代码绝对执行,捕获异常需要先补货小异常,否则小异常将无法被捕获。
示例
public class DealException {
public static void main(String args[]) {
try { //要检查的程序语句
int a[] = new int[5];
a[10] = 7;//出现异常
} catch(ArrayIndexOutOfBoundsException ex) {//异常发生时的处理语句
System.out.println("超出数组范围!");
ex.printStackTrace();//显示异常的堆栈跟踪信息
} catch(ArithmeticException ex) {//在异常捕捉的过程中要进行两个判断,第一是try程序块是否有异常产生,第二是产生的异常是否和catch()括号内想要捕捉的异常相同。
//可以在一个try语句后跟上多个异常处理catch语句,来处理多种不同类型的异常。
System.out.println("算术运算异常");
ex.printStackTrace();
} finally{ //这个代码块一定会被执行
System.out.println("*****");
}
System.out.println("异常处理结束!");
}
}
参考文档:
-
java异常处理机制示例(java抛出异常、捕获、断言)
2020-09-04 11:23:16主要介绍了java异常处理机制示例(java抛出异常、捕获、断言),需要的朋友可以参考下 -
Java异常处理:抛出和捕捉
2022-02-24 19:25:07抛出异常 捕捉异常: 异常处理的五个关键字: try catch finally throw throws 捕获异常前 bu'hui抛出异常
捕捉异常:
异常处理的五个关键字:
try catch finally throw throws
捕获异常前
捕获异常后
捕获异常写代码时try区域和catch区域是必须要的,finally区域可以不用,后面会细说finally的使用
再来个例子:使用了两个空方法的互相调用,并没有捕获成功,但是finally还是显示了因为他是善后的,好事坏事都要他出来露面。还有这个异常是属于错误Error的空墨盒方法的互相调用一直循环内存用完了就终止了。
重点是这里捕获异常要选好想要捕获异常的类型在代码中这样写:catch(想要捕获的异常类型)
当异常类型写在最高级的时候下面所有的异常都会被捕捉如图:
捕捉的异常类型换成了相对的异常类型是可以正常捕获的
写的捕捉类型错了就会捕捉失败
这个捕获异常的代码和写方法循环方法有异曲同工之妙可以层层递进的有效的缩小异常的范围:
大的在小的上面会报错的
选中要捕获异常的代码快捷键ctrl,alt+t可以快捷方式
throw 和 throws
主动抛出异常 :一般来说是在方法里应用的
没有输出一样会抛出异常的这个就是捕获到了异常
throws是在方法外抛出异常
在方法外抛出异常也要将原代码重写一下ctrl ,alt +t
程序中的异常就好比人生的意外一样无数的我们只能了解基本的法则后面的每个异常都是一次新的认识,边遇边学。
-
Java 捕获和抛出异常
2019-05-08 19:59:59Java中把非正常情况分为两种:异常(Exception)和错误(Error),其中Error错误一般是指与虚拟机相关的问题,这种错误无法恢复或不可能捕获,而对于Exception异常我们可以使用try…catch进行捕获。try…catch不允许...Java中把非正常情况分为两种:异常(Exception)和错误(Error),其中Error错误一般是指与虚拟机相关的问题,这种错误无法恢复或不可能捕获,而对于Exception异常我们可以使用try…catch进行捕获。try…catch不允许存在单独的try块或catch块,可存在多个catch块。try块中存放业务功能代码,catch块中存放异常处理代码。Java7后支持用catch捕获多个异常,也可捕获自定义异常。对于捕获的异常一般可以使用printStackTrace()方法追踪输出至标准错误流。try…catch后可以添加finally,使用finally可以保证除系统退出外finally块中代码绝对执行。捕获异常时需要注意一定要先捕获小异常,再捕获大异常,否则小异常将无法被捕获。代码示例如下
除捕获异常以外可以使用throws将异常进行抛出,抛出的异常由上级调用者处理,上级调用者可以进行处理或抛出异常,上级调用者可以抛出更广泛的异常。如果main方法也不知道如何处理异常就也可以使用throws抛出异常,那么该异常就会交给JVM处理。JVM将打印异常的跟踪栈信息,并中止程序运行,示例如下
除了使用throws抛出异常外也可以使用throw自行抛出异常。throw语句可以单独使用, throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。对应抛出的异常实例,既可以显式捕获该异常,也可完全不理会该异常,把该异常交给该方法调用者处理。示例如下
-
Java抛出异常与自定义异常类应用示例
2020-08-26 06:08:05主要介绍了Java抛出异常与自定义异常类,结合实例形式分析了Java针对错误与异常处理的try、catch、throw等语句相关使用技巧,需要的朋友可以参考下 -
Java异常捕获处理和异常抛出及自定义异常
2021-09-12 14:53:34目录标题一、捕获和处理异常二、异常抛出1. throw2. throws三、自定义异常1. 自定义异常概念2. 自定义异常类3. 示例 一、捕获和处理异常 try{} 语句块中放要检查的代码,有异常就会自动抛出 catch(异常类型){} 语句... -
Java 自定义异常和抛出异常
2017-06-14 14:19:55Java 自定义异常和抛出异常的练习demo -
java多线程编程之捕获子线程异常示例
2020-09-04 15:24:26java多线程程序中所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。但是无法避免的是unchecked exception,也就是RuntimeException,当抛出异常时子线程... -
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 自定义异常 全局捕获
2018-12-04 15:03:03自己编写异常类型 ,自定义错误异常进行全局捕捉。实现项目全局的拦截定义输出。。。 -
java异常——捕获异常+再次抛出异常与异常链
2021-02-12 17:29:41【0】README0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常——捕获异常+再次抛出异常与异常链 的相关知识;【1】捕获异常相关1.1)如果某个异常发生的时候没有再任何地方进行捕获, 那程序就... -
抛出异常和捕获异常的区别
2019-04-27 18:58:17抛出异常:如果程序中出现了异常,没有办法将具体的异常打印出来,不做任何处理 捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的Log 如果异常出现的... -
java中不捕获或抛出的异常
2021-04-22 17:03:21java中不捕获或抛出的异常发布时间:2020-06-25 14:29:16来源:亿速云阅读:137作者:Leah这期内容当中小编将会给大家带来有关java中不捕获或抛出的异常,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇... -
Java异常什么时候抛出,什么时候捕获
2022-03-22 18:50:59找了半天CSDN都找不到关于Java异常什么时候抛出,什么时候捕获的答案,我就根据网上找的资料和自己的理解写下这篇文章,加深印象。 Java异常处理原则之一:延迟捕获 意思是,当异常发生时不会立即捕获,而是应该... -
Java异常:如何抛出异常? & 如何捕获异常?
2020-03-11 21:06:13假设一个Java程序运行期间出现了一个错误。为什么会报错呢? -----文件包含了错误信息? -----网络连接出现了问题? -----使用了无效的数组下标? -----试图使用一个没有被赋值的对象引用? 用户期望在出现错误而... -
异常全家桶来咯,异常捕获,异常抛出,自定义异常
2022-03-20 16:01:22异常全家桶来咯,异常捕获,异常抛出,自定义异常。 -
学习-Java异常处理之throws之抛出并捕获异常
2021-06-16 10:59:29import java.util.Scanner; public class Exc1Test { ... // 第一步:创建任意方法并抛出异常 public static void Exc() throws ArithmeticException{ // 第二步:接收给定的两个字符串 Scanner scanner = new Sc. -
Java 基础之异常抛出
2021-03-08 07:29:08Java 基础之异常抛出Java,基础,异常抛出在 Java 里,除了对异常的捕获外,你还可以抛出异常,还可以创造异常。抛出异常的作用就是告诉你的调用者,程序出现了不正常的情况了,得不要期望的结果了。throws 声明抛出... -
为什么捕获检查的异常允许不抛出异常的代码?
2021-02-28 16:23:11在Java中,抛出 checked 异常(Exception或其子类型 - IOException,InterruptedException等)的方法必须声明 throws 语句:public abstract int read() throws IOException;不声明 throws 语句 can't 抛出已检查异常... -
Java异常处理和异常抛出
2019-02-21 13:11:44生活中的异常是指那些有异于常态,和正常情况不一样,有问题的状态,编程世界中的异常是指阻止当前方法或作用域继续执行的状态。比如,程序要打开一个不存的文件、网络连接中断、除零操作、操作数...一.Java异常体系... -
异常捕获后再次抛出java
2018-07-29 11:41:03捕获了异常之后,希望再次向上抛出 如下: public void demo() throws Exception{ try{ System.out.println(1/0); }catch(Exception e){ throw e; } } 此时 向上抛出的异常还是原异常... -
在Java的异常处理机制中,什么时候应该抛出异常,什么时候捕获异常?
2021-02-28 11:03:47Java异常处理原则之一:延迟捕获意思是,当异常发生时,不应立即捕获,而是应该考虑当前作用域是否有有能力处理这一异常的能力,如果没有,则应将该异常继续向上抛出,交由更上层的作用域来处理。一个例子:某方法... -
Java异常的抛出
2021-02-28 13:52:20在Java中,当定义的方法可能产生异常时,程序员必须抛出可能的异常。抛出异常的两种方式,一是在方法内部用throw语句,二是在方法定义时用throws关键字1.throw语句在Java中,throw语句用于抛出一个异常。异常的具体... -
Java捕获多个异常和重新抛出异常
2021-02-27 18:24:04在Java 7中,catch块已得到改进,可以在单个catch块中处理多个异常。如果捕获多个异常并且它们...在Java 7之前,我们曾经逐一捕获多个异常,如下所示:catch (IOException ex) { logger.error(ex); throw new MyExce... -
java异常抛出
2015-12-01 17:16:33一个java抛出异常的小Demo 手动抛出 并处理 -
java 捕获异常还是抛出异常
2019-01-19 23:14:02而hadoop中很多方法的声明是有异常抛出的,而我的系统中的很多方法的声明都没有抛出异常。只是判断了异常情况,并输出了错误提示,但是并没有抛出异常。 org.apache.hadoop.hdfs.protocol包下的Block类的readFi... -
关于抛出异常和捕获异常的一些区别
2019-05-05 03:29:36抛出异常: 创建异常对象,封装异常信息然后通过throw将异常对象传递给调用者。 不对异常进行处理只对异常进行抛出是非常不负责任的表现可以称为渣男。 但是可以通过主动抛出异常对一些jvm虚拟机识别不出来的异常... -
菜鸟关于Java中抛出异常和上抛异常的问题
2021-02-28 14:50:21找到问题了,我在excepTest方法中抛出异常,然后该方法上抛了异常该异常被抛给了run方法,应该在run方法内处理该问题但是代码中的查找捕获却在main方法中,肯定捕获不到异常修正后代码:class Test22_05 implements ...