异常处理机制

Posted 洛阳泰山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理机制相关的知识,希望对你有一定的参考价值。

目录

异常概念

异常分类

检查异常也称为编译期异常

ParseException 解析异常

运行时异常

ArithmeticException 算术异常

ArrayIndexOutOfBoundsException数组下标越界异常

ClassCastException类型转换异常

异常处理方式

 使用try、catch、finally捕获异常

使用throws声明抛出异常

自定义异常

继承自Exception的自定义异常

继承自RuntimeException的自定义异常

作业


 

异常概念

什么是异常(Exception)
异常是程序在编译或运行过程出现的例外,这些例外在有的可以避免有的却无法避免


异常分类

根据异常的出现时期主要分为编译时异常和运行时异常两大类。分别对应在编写代码时时候和运行代码的时候。


检查异常也称为编译期异常

  • 不可避免  必须进行异常处理,要不编译器报错
  • Exception以及它的子类(除去RuntimeException)

 常见的编译期异常

ParseException 解析异常


import java.text.SimpleDateFormat;
import java.util.Date;

public class ParseException 
    public static void main(String[] args) 
        //根据指定模式创建SimpleDateFormat对象
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
        try 
            //将字符串日期按照yyyy年MM月dd日的模式解析为Date对象
            Date date=sdf.parse("2022-01-01");
            //输入解析的时间对象
            System.out.println(date);
         catch (java.text.ParseException e) 
            //打印出解析字符串时间的异常
            e.printStackTrace();
        
    

当字符串不是以yyyy年MM月dd日的模式写的时候,就会出现解析异常

运行时异常

代码程序在运行的过程中肯能出现的异常,编译器在编译代码时,不能检测出来。

常见的运行时异常有

NullPointerException 空指针异常

代码示例 

public class NullPointerException 
    public static void main(String[] args) 
        String name=null;
        System.out.println(name.hashCode());
    

 这样写代码的时候,对象为null的时候,去调用对象的方法和属性,运行程序就会出现空指针异常

ArithmeticException 算术异常
 


import java.util.Scanner;

public class ArithmeticException 
    public static void main(String[] args) 
        //创建Scanner对象
        Scanner sc=new Scanner(System.in);
        //通过 Scanner 类来获取用户的输入
        int i=sc.nextInt();
        //输出10除以用户输入值的结果
        System.out.println(10/i);
    

当用户输入0的时候,就会抛出算数异常。

ArrayIndexOutOfBoundsException数组下标越界异常

public class ArrayIndexOutOfBoundsException 
    public static void main(String[] args) 
        int[] nums=new int[3];
        System.out.println(nums[3]);
    

创建一个只有3个元素的数组,数组的下标是从0开始的,也就是最后一个下标是2,当输入出超过2的下标的数组时候,就会出现数组下标越界异常。

ClassCastException类型转换异常

public class ClassCastException 
    public static void main(String[] args) 
        Object i=new Integer(10);
        String str=(String)i;
        System.out.println(str);
    

Object是所有类的父类,父类转子类可以通过强行转化实现。但是Obejct类的参数赋值的是一个Integer类的对象,当它强行转化为文本的时候,就会抛出类型转换异常


异常处理方式

Java编译期异常必须要进行处理,否则Java源文件在编译时编译器会提示错误,且源文件无法成功编译
Java编译期异常的处理方式有两种

  • 使用try、catch、finally关键字捕获异常
  • 使用throws关键字声明抛出异常

 使用try、catch、finally捕获异常

 try
    //可能会出现异常的代码
 catch(ParseException  e)
    //捕获执行的代码
 finally
    //不管是否发生异常都要执行的代码
  

 finally根据情况可以省略

import java.text.SimpleDateFormat;
import java.util.Date;

public class ParseException 
    public static void main(String[] args) 
        //根据指定模式创建SimpleDateFormat对象
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
        try 
            //将字符串日期按照yyyy年MM月dd日的模式解析为Date对象
            Date date=sdf.parse("2022-01-01");
         catch (java.text.ParseException e) 
            System.out.println("字符串不符合解析模式");
        
    

使用throws声明抛出异常

import java.text.SimpleDateFormat;
import java.util.Date;

public class ParseException 
    public static void main(String[] args) throws java.text.ParseException 
        //根据指定模式创建SimpleDateFormat对象
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
        //将字符串日期按照yyyy年MM月dd日的模式解析为Date对象
        Date date=sdf.parse("2022-01-01");
    


自定义异常

在开发中,可能需要自定义异常类
自定义异常根据继承的父类不同分为两类

  • 继承自Exception的自定义异常
  • 继承自RuntimeException的自定义异常

继承自Exception的自定义异常为编译期异常必须要进行处理
继承自RuntimeException的自定义异常为运行时异常不需要进行特别的处理。

继承自Exception的自定义异常

//自定义字符串空格异常
public class StringBlankException extends Exception
    public StringBlankException() 
        System.out.println("字符串有空格");
    
    public StringBlankException(String message) 
        super(message);
    

public class StringBlankExceptionTest 
    public static void main(String[] args) throws StringBlankException 
        String str="你好,我是李焕英! ";
        if(str.contains(" "))
            throw new StringBlankException();
        
    

继承自RuntimeException的自定义异常

//自定义字符串空格异常
public class StringBlankException extends RuntimeException
    public StringBlankException() 
        System.out.println("字符串有空格");
    
    public StringBlankException(String message) 
        super(message);
    

public class StringBlankExceptionTest 
    public static void main(String[] args)
        String str="你好,我是李焕英! ";
        if(str.contains(" "))
            throw new StringBlankException();
        
    

作业

作业一
自定义一个学生类,属性有 姓名 年龄,如果用户在给学生年龄赋值时,年龄小于0抛出一个AgeLT0Exception,大于150 抛出一个AgeGT150Exception
 



 

以上是关于异常处理机制的主要内容,如果未能解决你的问题,请参考以下文章

异常处理机制

Python内置的处理异常机制与调试

java异常异常处理机制

Python异常处理机制调试测试

10.异常

深入理解Java异常处理机制 (笼统篇)