精华内容
下载资源
问答
  • 常见的运行时异常和非运行时异常
    千次阅读
    2021-01-08 08:36:34

    异常分为运行时异常和非运行时异常

    1.运行时异常:在代码过程中由于逻辑判断出现的错误,这类异常不会影响代码的正常编译,常见的异常有常见的异常有:
    	       a.数组越界异常
    	       b.数学计算异常
    	       c.空指针异常
    2.非运行时异常:在程序编译 过程中就强制要求处理的异常,若不处理,那么将不能编译通过,常见的异常有:
    	    a.Io流异常
    	    b.文件未找到异
    	    c.sql异常
            d.日期格式转换异常
    
    更多相关内容
  • 运行时异常和非运行时异常

    千次阅读 2022-01-10 10:43:50
    文章目录1、运行时异常2、非运行时异常 1、运行时异常 (1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,...

    1、运行时异常

    (1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

    当出现RuntimeException的时候,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。
    出现运行时异常后,如果没有捕获处理这个异常(即没有catch),系统会把异常一直往上层抛,一直到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
    如果不想终止,则必须捕获所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。

    2、非运行时异常

    (2)非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如IOException、SQLException等以及用户自定义的Exception异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

    展开全文
  • Java运行时异常和非运行时异常

    千次阅读 2021-02-12 20:35:04
    1.Java异常机制Java把...Java中的异常分为两大类:错误Error和异常Exception,Java异常体系结构如下图所示:图片来源:http://blog.csdn.net/wuwenxiang91322/article/details/103463372.ThrowableThrowable类是所...

    1.Java异常机制

    Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。Java中的异常分为两大类:错误Error和异常Exception,Java异常体系结构如下图所示:

    84019499_1

    图片来源:http://blog.csdn.net/wuwenxiang91322/article/details/10346337

    2.Throwable

    Throwable类是所有异常或错误的超类,它有两个子类:Error和Exception,分别表示错误和异常。其中异常Exception分为运行时异常(RuntimeException)和非运行时异常,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。

    3.Error

    一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误,因此应用程序不应该捕获Error对象,也无须在其throws子句中声明该方法抛出任何Error或其子类。

    4.运行时异常和非运行时异常

    (1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

    当出现RuntimeException的时候,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

    出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。

    如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。

    (2)非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如 IOException、SQLException 等以及用户自定义的Exception异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

    常见 RuntimeException :

    ArrayStoreException         试图将错误类型的对象存储到一个对象数组时抛出的异常

    ClassCastException          试图将对象强制转换为不是实例的子类时,抛出该异常

    IllegalArgumentException    抛出的异常表明向方法传递了一个不合法或不正确的参数

    IndexOutOfBoundsException   指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出

    NoSuchElementException      表明枚举中没有更多的元素

    NullPointerException        当应用程序试图在需要对象的地方使用 null 时,抛出该异常

    展开全文
  • 运行时异常和编译异常

    千次阅读 2022-02-03 17:22:27
    解释异常中的编译异常以及运行时异常,并介绍异常处理方式

    1.概念:

    Java中将程序执行中发生的不正常情况称为异常(Exception)


    2.分类

    • Error(错误):JVM无法解决的严重问题,程序会崩溃,比如JVM系统内部错误、资源耗尽等
    • Exception:因编程错误等外在因素导致的一般性问题,可以使用针对性代码进行处理,如空指针访问、网络连接中断等,Exception可以分为两大类:
      • 运行时异常:编译器检测不出,是java.lang.RuntimeException类及其子类,一般是指编程时的逻辑错误,可以不作处理(不做处理不是说不会报错),若全部处理可能会影响代码的可读性和运行效率
      • 编译时异常:编译器要求必须处置的异常,否则代码不能通过编译
    • 异常体系图:

    在这里插入图片描述


    3.常见运行时异常

    • NullPointerException:空指针异常,当应用程序试图在需要对象的地方出现null时抛出该异常
    • ArithmeticException: 数学运算异常,当出现异常的运算条件时抛出此异常
    • ArrayIndexOutOfBoundsException: 数组下标越界异常,用非法索引访问数组时抛出的异常
    • ClassCastException :类型转换异常,当试图将对象强制转换为不是实例的子类时抛出该异常
    • NumberFormatException:数字格式不正确异常,当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时抛出该异常

    4.常见编译异常

    • SQLException:操作数据库时查询表可能发生的异常

    • IOException:操作文件时发生的异常

    • FileNotFoundException:操作不存在文件时发生的异常

    • ClassNotFoundException:加载类而类不存在时发生的异常

    • EOFException:操作文件到文件末尾发生异常

    • IllegalArguementException:参数异常


    5.异常处理

    • 概念:当异常发生时对异常处理的方式

    • 处理方式:

      • try-catch-finally:程序员在代码中捕获发生的异常并自行处理

        try {
            // 可能有异常的代码
        }catch (Exception e){
            // 1.异常发生时将异常封装为Exception e传递给catch
            // 2.得到该对象后程序员自己处理
            // 3.如果没有发生异常catch代码块不执行
        }finally {
            // 不管try代码块是否发生异常都要执行finall代码块
            // 一般用于释放资源
            // 可以只有try-catch部分
        }
        
        
        • 异常发生后,异常部分后面的代码不会执行(不是必须将try代码块全部执行,而是try代码块中发生异常后面的代码不会执行)而是直接进入到catch代码块,注意try-catch代码块后面的代码还是会执行(除非未正确捕获或者在catch代码块中return了):
        try {
            String str = "psj";
            int a = Integer.parseInt(str);
            System.out.println(a);  // 该行代码不会执行
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        System.out.println("程序继续...");  // 这一行代码还是会执行
        
        • 可以有多个catch语句,但是父类异常在后,子类异常在前。如果发生异常只会匹配一个catch:
        try {
            String str = "psj";
            int a = Integer.parseInt(str);
            System.out.println(a);
        } catch (NumberFormatException e) {
            e.printStackTrace(); // 执行该代码块
        } catch (Exception e) {
            e.printStackTrace();  // 不会再去执行该代码块
        }
        
        • try-finally配合使用相当于没有捕获异常,所以如果出现异常会抛出异常,并没有自己处理,然后执行finally代码块

      • throws:如果方法可能发生某种异常但是无法确定如何处理该异常,可以将发生的异常抛出并交给方法的调用者处理,最顶级的处理者为JVM:

        public static void test() throws FileNotFoundException {
            FileInputStream f = new FileInputStream("psj.txt");
        }
        
        • throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
        • throws后面可以是一个异常列表
        • try-catch-finallythrows二选一
        • 程序员没有显示处理异常,默认使用throws抛出异常

      在这里插入图片描述

    • 注意事项:

      • 编译异常必须处理,即显示使用throwstry-catch

      • 对于运行时异常,如果程序没有处理默认是throws方式处理

      • 子类重写父类方法时,抛出的异常类型要么和父类抛出的一致,要么为父类抛出异常类型的子类

    • 自定义异常:程序中的错误信息没有出现在Throwable子类中描述处理,此时需要自己设计异常类用于描述该错误信息

      • 定义类:异常类继承ExceptionRuntimeException(继承Exception属于编译异常,继承RuntimeException属于运行异常),一般继承RuntimeException(因为编译异常必须要处理)
      int age = 180;
      //要求范围在 18 – 120 之间,否则抛出一个自定义异常
      if(!(age >= 18 && age <= 120)) {
          //通过构造器设置信息
          throw new AgeException("年龄需要在 18~120 之间");
      }
      System.out.println("你的年龄范围正确.");
      //-----------自定义异常类------------
      class AgeException extends RuntimeException{
          public AgeException(String message) {
              System.out.println(message);
          }
      }
      
    • throw和throws的区别:

    意义位置后面跟的东西
    throws异常处理的一种方式方法声明处异常类型
    throw手动生成异常对象的关键字方法体中异常对象
    try {
        if (args.length != 4){
            // 该行代码生成一个异常,因为try代码块中出现异常,所以又去执行catch代码块
            throw new ArrayIndexOutOfBoundsException("参数个数不对");   
        }
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println(e.getMessage());
    }
    

    tips:

    • 为什么try-catch-finally外的代码还可以执行?因为使用异常捕获的目的就是为了让程序继续正常执行(但是出现异常时try中的代码不能再继续往下执行)

    • 既然try-catch外的代码块在出现异常后依旧可以执行,为什么还需要finally代码块?因为catch并不能保证一定能捕获到正确的异常,会导致后续代码无法执行:

    try {
        String str = "psj";
        int a = Integer.parseInt(str);
        System.out.println(a);
    } catch (ArrayIndexOutOfBoundsException e) {  // 异常捕获错误,这里是类型转换异常却捕获的是数组越界
        e.printStackTrace();
    }
    System.out.println("程序继续...");
    
    • try/catch代码块中如果有return语句,还是会去执行finally代码块,如果finally中有return语句就执行finally的return语句,没有就执行try/catch代码块中的return语句(假设try-catch-finally中try-catch中都有return语句,不出现异常时执行try中的,出现异常就执行catch中的)
    System.out.println("执行test方法后,i=" + test());
    //--------------test方法--------------
    public static int test() {
        int i = 0;
        try {
            String str = "psj";
            int a = Integer.parseInt(str);
            return i;
        } catch (NumberFormatException e) {
            return ++i;  // 执行++i后i=1,但是不会执行return,而是必须执行finally代码块
        } finally {
            ++i;  // 这个i是上面++i后的i值,所以该步++i后变为2
            System.out.println("执行finally代码块后,i=" + i);
            return 3
        }
    }
    // 最后结果:
    执行finally代码块后,i=2
    执行test方法后,i=3
    
    • 由于声明代码块中的变量为局部变量,所以声明在try中的变量不能在catch和finally中使用,反之亦然(比如在JDBC中会把需要关闭的对象在try-catch-finally代码块外先声明并赋值null)
    • finally代码块中有return语句了就不能再在try-catch-finally外加上return语句,因为finally代码块中的return语句是必须执行的。如果有try-catch中都有return语句,此时也不能在try-catch-finally外加上return语句

    展开全文
  • Java 运行时异常和非运行时异常

    千次阅读 2020-08-05 10:19:16
    异常类型分为两类:运行时异常和非运行时异常。 一、运行时异常: 运行时异常(RuntimeException),一般不需要程序员进行捕获。 例如:NullPointException,IndexOutOfBoundsException。如果不对该类异常进行catch...
  • Throwable: 有两个重要的子类:Exception(异常 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。 Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数...
  • 常见非运行异常:io异常和sql异常。 IOException、FileNotFoundExcetion 和SQLException 运行异常: 运行是一场是不用进行捕获的,当这种异常发生,JVM会进行处理。值得一提的是这种异常是十分普遍的异常...
  • 常见的编译时异常和运行时异常

    千次阅读 2022-03-01 15:06:24
    常见的编译时异常和运行是异常 粉红色的是编译异常 绿色的异常是运行时异常 而声明为Error的,则属于严重错误,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或者不可能捕捉,将导致应用程序中断,...
  • 五种常见运行时异常

    千次阅读 2019-08-28 21:24:09
    五种常见运行时异常 空指针异常 NullPointerException 数组越界异常 IndexOutOfBoundsException 类转换异常 ClassCaseException 向数组中存放与声明类型不兼容对象异常 ArrayStoreException ...
  • 常见运行时异常

    千次阅读 2022-07-27 20:33:30
    BufferOverflowException-IO操作出现的缓冲区上溢异常。ArrayStoreException-数据存储异常,操作数组类型不一致。...运行时异常都是RuntimeException子类异常。ArithmeticException-计算异常。...
  • 运行时异常和非运行时异常(一般异常)的区别

    万次阅读 多人点赞 2018-10-11 12:34:56
    Throwable: 有两个重要的子类:Exception(异常 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。 Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与...
  • 运行时异常和非运行时异常 (1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般...
  • 在Java中,万物皆对象,异常也不例外。 Exception(异常)是Java的一个类,它它的兄弟类Error一起继承自它的父类——Throwable(可抛出的)。
  • 常见的java非运行时异常有哪些

    千次阅读 2019-12-14 19:27:37
    1、常见的java运行时异常有哪些 了解非运行时异常看这里:什么是...常见非运行时异常(即检查异常,checked exception)包括: 操作数据库异常:SQLException 输入输出异常:IOException 文件未找到异常:Fi...
  • 其中根据Exception异常进行分类,可分为运行时异常和非运行时异常 二、区别及相应异常 A-1:检查异常(编译异常):   就是编译器要求你必须处理的异常。比如我们在编程某个文件的读于写,编译器要求你...
  • 常见JAVA运行时异常有哪些?

    千次阅读 2021-02-12 20:35:01
    java.lang.NullPointerException这个异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片...
  • 常见运行时异常。(Java)

    千次阅读 2022-03-04 16:31:05
    运行时异常的概念: 继承自RuntimeException的异常或者其子类, 编译阶段是不会出错的,它是在运行时阶段可能出现的错误, 运行时异常编译阶段可以处理也可以不处理,代码编译都能通过!! 主要包括: 1.数组索引越界...
  • 其中根据Exception异常进行分类,可分为运行时异常和非运行时异常。检查异常:就是编译器要求你必须处理的异常。比如我们在编程某个文件的读于写,编译器要求你必须要对某段代码try....catch......
  • 关于运行时异常的讨论,常见异常诊断分析解决办法。
  • 编译时异常和运行时异常

    千次阅读 2021-05-15 17:00:17
    编译异常:首先它的过程是在程序把他的.java的源文件编译成字节码文件也就是.class文件,出现的异常。 运行时异常:运行时异常表示...编译时异常和程序的上下文条件有着密切关系,即使程序设计无误也会由于使用问
  • 【面试题】常见运行时异常

    千次阅读 2018-08-22 10:48:00
    ArithmeticException是出现异常的运算条件,抛出此异常。例如,一个整数“除以零”,抛出此类的一个实例。 java.lang.NullPointerException 这个异常的解释是 "程序遇上了空指针",简单地说就是调用了未经初始...
  • 分享一个大牛的人工智能教程。零基础!...- ArithmeticException(算术异常) - ClassCastException (类转换异常) - IllegalArgumentException (非法参数异常) - IndexOutOfBoundsException (下标...
  • Java运行时异常

    千次阅读 2021-03-16 00:51:20
    Android面试题中时常提到的Java常见运行时异常。Java运行时异常可能是Java虚拟机正常工作抛出的异常。Java提出两种异常机制。检查时异常(Checked Exception)和运行时异常(Runtime Exception)。检查时异常:我们...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 382,076
精华内容 152,830
热门标签
关键字:

常见的运行时异常和非运行时异常