精华内容
下载资源
问答
  • ​ 1)异常抛出: throws 把异常抛出到上一层,谁调用谁解决 ​ 2)异常捕获: try … catch try{ 有可能出现异常的代码; }catch(FileNotFoundException e){ 处理异常代码; }catch(NullPointerException e){ 处理...

    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:42
    异常.pngError:一般是指虚拟机相关的问题(虚拟机错误、线程死锁等),这种错误无法回复或不可能捕获Exception:强制性要求用户必须处理RuntimeException:非检查异常,是Exception的子类,由用户选择是否进行处理...

    Java中把非正常情况分为两种,异常(Exception)和错误(Error)。

    ffedd511e7a8

    异常.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("异常处理结束!");

    }

    }

    参考文档:

    展开全文
  • 在可能会出现exception的地方,要使用try-catch或者throws或者两者都...如果希望外部知道,则在catch到之后把exception直接抛出或者抛出自定义的exception。一、异常的种类java异常可以分成两大类:Exception和Run...

    在可能会出现exception的地方,要使用try-catch或者throws或者两者都要。我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-catch掉这个exception;如果希望外部知道,则在catch到之后把exception直接抛出或者抛出自定义的exception。

    一、异常的种类

    java异常可以分成两大类:Exception和RuntimeException(虽然RuntimeException是从Exception继承的)。exception异常代表“无法避免的异常” 如io异常   往往这类异常是由于外部原因造成的,程序本身无法保证他们不发生,所以这类异常必须捕获。如果在函数内部无法处理这个异常必须再次抛出(在函数后面用throws语句),如果什么都不做就出现编译错误。

    runtimexception是指“可以避免的异常”,如 null引用异常,这类异常都是由程序内部原因造成的,是可以避免的。对于这类异常可以忽略他们,但一旦发生程序就会异常终止。这类异常对debug非常有帮助,当然,如果需要也可以catch。

    另外,有些地方即使不会有exception,但是从商业逻辑上是错误的、非预期的,也可以抛出user exception。例如,用户输入非法,bank account非法透支等等。

    二、主要原则

    处理意外的一个重要原则,就是要么处理,要么接着抛,决不能吃掉(You either handle it, or throw it. You don’t eat it.)这就是说,当你捕获一个异常之后,必须决定是否立即处理这个异常,或者继续抛出这个异常(或者另一个自定义异常),以便由调用的客户端捕获之。当客户端捕获到以后,又会继续进行类似的判断。

    一般来说,GUI端是要处理异常的,比如JSP捕获到异常之后,需要先是给用户一个友好的出错信息,而不要给出系统的出错信息。系统的出错信息一方面不太友好,另一方面提供了太多的系统信息,容易被恶意用户用来攻击系统。

    换句话说,所有的异常最终必须有一个终极的处理者,这就是GUI。至于中间的环节,比如在服务器端运行的JavaBean是否要处理捕获到的异常,还是继续抛出所捕获的异常,需要视具体情况处理。

    除非你想把异常处理的责任交给调用者,一般不用throws。 比如你要读入一些文件,如果你想通知调用者,让调用者决定如何处理这个异常,你就把这个异常throws给调用者;如果你知道应该如何处理这个异常,或者你想把异常马上解决,你可以就地catch她。

    这完全取决于你想把异常自己立即处理还是想把处理责任返回给调用者。取决于你的程序的结构和要求。

    需要注意的有:

    1、如果无法处理某个异常,那就不要捕获它。

    2、如果捕获了一个异常,请不要胡乱处理它。

    3、尽量在靠近异常被抛出的地方捕获异常。

    4、在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出。

    5、按照您的异常处理必须多精细来构造您的方法。

    6、需要用几种类型的异常就用几种,尤其是对于应用程序异常。

    三、异常嵌套和捕获适当的异常

    按照Java语言的定义,所谓异常(Exception)指的就是向调用方法(calling method)表示发生非正常情况的习惯方式。下面讨论两种在处理异常时可兹利用的技术:异常嵌套和捕获适当的异常。

    异常嵌套

    你在试图捕获异常并打算扔出异常时该采取什么措施呢?同时,你希望原始的异常信息可用吗?

    要回答以上的问题你不妨尝试一下NestedException类。具体的编程并不难,唯一要做的无非是利用构造器并且重载printStackTrace()以便显示出正确的数据。

    此外,你还应当考虑封装Throwable而非Exception类来创建更具有重用性的组件。之后,你可以创建NestedRuntimeException变量封装Throwable但无需对其进行声明。

    捕获适当的异常

    正确地处理异常并不是一项轻松的任务,这是因为异常的处理有时会导致程序出现其他不明行为。不过,以下三条规则可以帮助你避免错误处理异常所可能遭遇的风险。

    规则 #1: 总是捕获扔出异常的类型而不要理睬异常的超类。 为了遵守通常的代码习惯,你可以采用Exception类的大写字母作为变量名,如下所示:

    catch(FileNotFoundException fnfe)

    以及

    catch(SQLException sqle)

    规则 # 2: 决不让catch块留空。在很多情况下虽然确实编写了try/catch块但在代码的catch部分却什么都没有做。或者,如果采用了日志API(Logging API),那么请编写代码把异常写到日志中。

    规则 # 3: 决不扔出Exception基类的实例。开发人员应当总是扔出自己创建的异常类。

    扔出异常的API很难处理。在声明方法扔出java.lang.Exception的情况下,所有的问题都会强加在API用户的头上,这样他们就无法以一种专业的编程方式来处理异常。通过为扔出API声明Exception类的子类这一举措,API开发人员就可以减轻用户的负担。

    以上提到的两种技术在处理异常时还可能用得更好、更适当。嵌套技术令异常扔到另一异常的内部,而捕获适当的异常令程序调试大大简化。

    展开全文
  • (特别是,在创建异常时记录堆栈跟踪,而不是在抛出异常时记录,因此重新抛出异常仍将具有原始堆栈跟踪).通常,人们因此使用更简单的习语.这并不是说重新抛出没有它的用​​途.例如,如果您想处理除FooBarExceptions...

    两个代码示例之间的行为没有区别. (特别是,在创建异常时记录堆栈跟踪,而不是在抛出异常时记录,因此重新抛出的异常仍将具有原始堆栈跟踪).通常,人们因此使用更简单的习语.

    这并不是说重新抛出没有它的用​​途.例如,如果您想处理除FooBarExceptions之外的所有异常,您可以编写:

    try {

    // bad code

    } catch (FooBarException e) {

    throw e;

    } catch (Exception e) {

    e.printStackTrace();

    }

    或者,如果处理异常的决定比简单地检查它的类型更复杂,那么你可以简单地捕获它,如果事实证明你无法处理它,则重新抛出:

    for (int attempts = 0; attemps < 6; attempts++) {

    try {

    return crankyMethod();

    } catch (Exception e) {

    if (fatal(e)) {

    throw e;

    } else {

    // try again

    continue;

    }

    }

    }

    值得注意的是,当人们说重新抛出时,有些人意味着抛出不同的异常,如下例所示:

    for (int i = 0; i < array.length; i++) {

    try {

    process(array[i]);

    } catch (Exception e) {

    throw new RuntimeException("Could not process element at index " + i, e);

    }

    }

    此模式的优点是使用可能相关的其他信息来装饰原始异常(在上面的示例中:无法处理哪些数据).请注意,原始异常将传递给新构造函数的构造函数,因此其堆栈跟踪不会丢失.

    展开全文
  • 【0】README0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常——捕获异常+再次抛出异常与异常链 的相关知识;【1】捕获异常相关1.1)如果某个异常发生的时候没有再任何地方进行捕获, 那程序就...
  • 这个时候,JAVA 就提供了优秀的处理方法:异常处理异常处理能让程序在异常发生时,按照异常处理设定的逻辑对异常进行处理,最大程度保证程序继续运行,并且显示并处理异常。JAVA 程序发生异常,就会用对应的异常类的...
  • 在可能会出现exception的地方,要使用try-catch或者throws或者两者都...如果希望外部知道,则在catch到之后把exception直接抛出或者抛出自定义的exception。一、异常的种类java异常可以分成两大类:Exception和Run...
  • 目录标题一、捕获和处理异常二、异常抛出1. throw2. throws三、自定义异常1. 自定义异常概念2. 自定义异常类3. 示例 一、捕获和处理异常 try{} 语句块中放要检查的代码,有异常就会自动抛出 catch(异常类型){} 语句...
  • Java异常抛出捕获

    2021-06-07 20:24:44
    Java异常抛出捕获 抛出: 指程序在正常执行过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出。一旦抛出对象之后,其后的代码就不再执行 常用的抛出异常方式:throws和throw ...
  • 也可能是程序可能出现无法预料的异常,比如你要从一个文件读信息,可这个文件不存在,程序无法运行下去了,故程序要抓这些异常,通过异常处理机制来抛出这些异常,程序员就可以通过抛出异常来修改代码。...
  • 异常处理有两种方式:声明抛出处理 和 程序捕获处理 声明抛出又分为 显式声明抛出 和 隐式声明抛出 程序捕获处理又分为 嵌套捕获 和 非嵌套捕获 隐式声明抛出异常 异常类型是RuntimeException类或是其子类,运行时...
  • 本文实例讲述了Python 异常捕获异常的传递主动抛出异常操作。分享给大家供大家参考,具体如下:异常捕获demo.py(异常捕获):try:# 提示用户输入一个整数num = int(input("输入一个整数:"))# 使用 8 除以...
  • 我怀疑这样的事情是可能的,但是如果没有将调试器附加到java应用程序,是否可以让一些集合填充有关java应用程序中生成的每个异常的信息,无论它是否被捕获?我知道在.NET中,应用程序会生成有关异常的消息,这些异常在...
  • 什么是异常 异常是指程序运行中出现的不期而至的各种状况,如:文件找不到,网络连接失败,...检查性异常相反,运行时异常可以在编译时被忽略。 错误ERROR: 错误不是异常,而是脱离程序员控制的问题。错误在代码中
  • 在Java中,抛出 checked 异常(Exception或其子类型 - IOException,InterruptedException等)的方法必须声明 throws 语句:public abstract int read() throws IOException;不声明 throws 语句 can't 抛出已检查异常...
  • } } 第三步:Controller抛出自定义异常 @Controller public class ErrorController { @GetMapping("error") public String error(){ if(true){ throw new HuigeException(StatusEnum.ERROE); } return "success"; }...
  • 这个时候,JAVA 就提供了优秀的处理方法:异常处理异常处理能让程序在异常发生时,按照异常处理设定的逻辑对异常进行处理,最大程度保证程序继续运行,并且显示并处理异常。JAVA 程序发生异常,就会用对应的异常类的...
  • 在写定时任务的时候, 捕获了 方法的 异常,然后出去} catch (Exception e) {logger.error("定时任务>>更新直接上级问题>>>执行任务出错了..."+e);JobExecutionException jobe = new ...
  • java中不捕获抛出异常发布时间:2020-06-25 14:29:16来源:亿速云阅读:137作者:Leah这期内容当中小编将会给大家带来有关java中不捕获抛出异常,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇...
  • 异常捕获与抛出1.异常1.1 什么是异常?1.2 异常的分类1.3 异常的处理框架2. 异常的处理机制3. 利用try-catch-finally语句捕获异常3.1 程序样例:3.2 操作注意点:3.3 结果说明:3.4 打印错误的栈信息4. 利用throw...
  • 在可能会出现exception的地方,要使用try-catch或者throws或者两者都...如果希望外部知道,则在catch到之后把exception直接抛出或者抛出自定义的exception。一、异常的种类java异常可以分成两大类:Exception和Run...
  • import java.util.Scanner; public class Exc1Test { ... // 第一步:创建任意方法并抛出异常 public static void Exc() throws ArithmeticException{ // 第二步:接收给定的两个字符串 Scanner scanner = new Sc.
  • 当前情况是,循环表,进行删除,如果出现表不存在,则会异常中断,导致整个存储过程挂掉,需求是要能跳过错误的执行,不进行处理,进行下个循环。最终代码:for tab_name in tables loopbeginexecut...
  • 捕获抛出异常 异常处理机制: 异常处理的5个关键字:try、catch、finally、throw、throws 捕获异常 说到异常,我们当然会想到try catch finally。当然如果用这个的话,被try块包围的代码说明这段代码可能会发生...
  • 题主想知道的是怎么讲java的异常应用到实际项目中吧举个例子:场景:假设现在我们有个货物表,记录了商品名称和剩余数量其中笔(pen) 有10支.现在需要写一个业务,减少笔的数量如果笔数量不足,则通知进货大致流程注意以下...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼java编译器要求java程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不做处理。虽然编译器对运行时异常不强制要求处理,但是实际开发中为了程序的健壮性,还是...
  • 让我们看一下handleException(...)方法,看看这种方法会发生的一些问题: 您捕获了Throwable但仅处理异常,如果发生异常,例如错误类型为OutOfMemoryError抛出? -我看到坏事发生了... 关于使用instanceof进行良好...
  • 一文掌握Pyhton的异常捕获抛出,包括Python内置异常类型、自定义异常类等。对方不想和你说话并向你抛出了一个异常。 文章目录 异常信息 捕获异常 多重异常处理 抛出异常 内置异常类型 自定义异常类型

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 184,729
精华内容 73,891
关键字:

异常的抛出与捕获