Java异常处理

时间:2019-09-09
本文章向大家介绍Java异常处理,主要包括Java异常处理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

异常分为两种:

  Throwable类是所有异常或错误的超类。

  Throwable有两个重要的子类:Exception(异常)和 Error(错误)。
  Exception又分为两大类:一种是编译时异常,又称检查异常(checked Exception),

              另一种是运行时异常,又称非检查异常(Unchecked Exception)。

检查异常:程序在编译时所出现的异常,一旦发出声明,必须解决。

非检查异常:程序在编译时没有进行提示的异常,可以处理也可以不处理。

一、编译时异常(checked Exception)

  编译时异常是JVM在运行时发生的非程序的故障,程序无法处理的错误,表示程序在编译过程中出现的严重问题。

  如:IOException 、SQLException … …

二、运行时异常(Unchecked Exception)

  在程序编译时未被检查出的异常被称之为运行时异常

JDK7及以后关闭资源方式:try-with-resource

try (一个类(接口)实现了AutoCloseable接口,就可以放入try with resource里面) {
    
}catch (Exception e) {
    e.printStackTrace();
}
// 例:
try (Scanner scan = new Scanner(System.in);) {
    System.out.println("请输入一个正整数:");
    int num = scan.nextInt();
    prime.doPrime(num);
}catch (ArithmeticException e) {
    e.printStackTrace();
}

Java异常处理

throw与thtows关键字

  throws:用于在方法上声明异常;而throw则是在在代码块中通过new关键字来抛出异常的。

异常捕获

try、catch、finally、throw、throws的用法:

  throw:一般自己声明的异常。

  throws:只能用与方法声明中,用来声明某个方法可能会出现异常。

  try : 存放容易出现异常的代码。

  catch:抓住try块中的异常,并处理。

  finally:不管是否发生异常都会执行,工作中用来清理对象占用的内存。

try-catch 语句

一般我们在代码容易出现异常的情况下使用try{}catch{}关键字来捕获异常。

语法如下:

try{
   // 可能发生异常的代码
} catch(Execption e) {
   // 异常的处理语句
}

  catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。

如果代码可能出现多个异常,那么需要使用多重捕获块来捕获可能发生的异常。

语法如下:

try{ 
   // 可能发生异常的代码 
}catch(异常类型1 异常的变量名1){ 
   // 异常的处理语句1
}catch(异常类型2 异常的变量名2){
   // 异常的处理语句2
}catch(异常类型3 异常的变量名3){ 
   // 异常的处理语句3
} ...

  如果try里面的代码出现异常,这会依次(从上到下)与catch进行匹配。
  注意:多重catch的时候子类异常类型放在前面,父类异常类型放在后面。

try-catch-finally 语句

  检测异常,并传递给 catch 处理,并在 finally 中进行资源释放。

try{ 
   // 可能发生异常的代码 
}catch(异常类型1 异常的变量名1){
   // 异常的处理语句1
}catch(异常类型2 异常的变量名2){
   // 异常的处理语句2
}finally{ 
   // 无论try中代码是否发生异常,finally中的代码始终会被执行。
}

自定义异常

语法格式:

class 自定义异常名 extends Exception或RuntimeException {
    public 自定义异常名() {
        // 默认调用父类无参构造方法
    }
    public 自定义异常名(String str) {
        // 调用父类具有异常信息的构造方法
        super(str);
    }
}
  • 如果发现代码中出现的异常在Java异常类中没有的,则需要自定义异常。
  • 所有异常都必须是 Throwable 的子类。
  • 如果希望写一个检查性异常类,则需要继承 Exception 类。
  • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

常见的运行时异常:

  NullPointerException :空指针异常

  ArrayIndexOutOfBoundsException :数组下标越界异常

  ArithmeticException :算术异常

  ClassCastException :类型转换异常

  InputMismatchException :输入不匹配异常

  RuntimException :运行时异常

常见的Error异常:

    StackOverflowError :栈内存溢出错误,栈内存已经满了

    OutOfMemoryError :JVM内存过小、程序不严密,产生了过多的垃圾。

Error与Exception的区别???

  可以参考:https://www.cnblogs.com/lcl-dcr/p/7653274.html

  Throwable类是所有异常或错误的超类。

  Throwable有两个重要的子类:Exception(异常)和 Error(错误)。
  Exception又分为两大类:一种是编译时异常,又称检查异常(checked Exception),

              另一种是运行时异常,又称非检查异常(Unchecked Exception)。

检查异常:程序在编译时所出现的异常,一旦发出声明,必须解决。

非检查异常:程序在编译时没有进行提示的异常,可以处理也可以不处理。

一、编译时异常(checked Exception)

  编译时异常是JVM在运行时发生的非程序的故障,程序无法处理的错误,表示程序在编译过程中出现的严重问题。

  如:IOException 、SQLException … …

二、运行时异常(Unchecked Exception)

  在程序编译时未被检查出的异常被称之为运行时异常

JDK7及以后关闭资源方式:try-with-resource

try (一个类(接口)实现了AutoCloseable接口,就可以放入try with resource里面) {
    
}catch (Exception e) {
    e.printStackTrace();
}
// 例:
try (Scanner scan = new Scanner(System.in);) {
    System.out.println("请输入一个正整数:");
    int num = scan.nextInt();
    prime.doPrime(num);
}catch (ArithmeticException e) {
    e.printStackTrace();
}

Java异常处理

throw与thtows关键字

  throws:用于在方法上声明异常;而throw则是在在代码块中通过new关键字来抛出异常的。

异常捕获

try、catch、finally、throw、throws的用法:

  throw:一般自己声明的异常。

  throws:只能用与方法声明中,用来声明某个方法可能会出现异常。

  try : 存放容易出现异常的代码。

  catch:抓住try块中的异常,并处理。

  finally:不管是否发生异常都会执行,工作中用来清理对象占用的内存。

try-catch 语句

一般我们在代码容易出现异常的情况下使用try{}catch{}关键字来捕获异常。

语法如下:

try{
   // 可能发生异常的代码
} catch(Execption e) {
   // 异常的处理语句
}

  catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。

如果代码可能出现多个异常,那么需要使用多重捕获块来捕获可能发生的异常。

语法如下:

try{ 
   // 可能发生异常的代码 
}catch(异常类型1 异常的变量名1){ 
   // 异常的处理语句1
}catch(异常类型2 异常的变量名2){
   // 异常的处理语句2
}catch(异常类型3 异常的变量名3){ 
   // 异常的处理语句3
} ...

  如果try里面的代码出现异常,这会依次(从上到下)与catch进行匹配。
  注意:多重catch的时候子类异常类型放在前面,父类异常类型放在后面。

try-catch-finally 语句

  检测异常,并传递给 catch 处理,并在 finally 中进行资源释放。

try{ 
   // 可能发生异常的代码 
}catch(异常类型1 异常的变量名1){
   // 异常的处理语句1
}catch(异常类型2 异常的变量名2){
   // 异常的处理语句2
}finally{ 
   // 无论try中代码是否发生异常,finally中的代码始终会被执行。
}

自定义异常

语法格式:

class 自定义异常名 extends Exception或RuntimeException {
    public 自定义异常名() {
        // 默认调用父类无参构造方法
    }
    public 自定义异常名(String str) {
        // 调用父类具有异常信息的构造方法
        super(str);
    }
}
  • 如果发现代码中出现的异常在Java异常类中没有的,则需要自定义异常。
  • 所有异常都必须是 Throwable 的子类。
  • 如果希望写一个检查性异常类,则需要继承 Exception 类。
  • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

常见的运行时异常:

  NullPointerException :空指针异常

  ArrayIndexOutOfBoundsException :数组下标越界异常

  ArithmeticException :算术异常

  ClassCastException :类型转换异常

  InputMismatchException :输入不匹配异常

  RuntimException :运行时异常

常见的Error异常:

    StackOverflowError :栈内存溢出错误,栈内存已经满了

    OutOfMemoryError :JVM内存过小、程序不严密,产生了过多的垃圾。

Error与Exception的区别???

  可以参考:https://www.cnblogs.com/lcl-dcr/p/7653274.html

原文地址:https://www.cnblogs.com/lyang-a/p/11490037.html