java(异常处理)

本文详细讲解了Java中异常的概念、Error和Exception的区别,涵盖try-catch异常处理机制、throws声明抛出异常、自定义异常的创建与throw关键字的使用。通过实例演示了如何捕获并处理不同类型的异常,以及throws和throw的区分。
摘要由CSDN通过智能技术生成

概念:java语言中,将程序执行中发生的不正常情况称为异常(开发过程中的语法错误和逻辑错误不是异常)

异常事件可分为两类:

(1)Error:Java虚拟机无法解决的严重问题;Error是严重错误,程序会崩溃

(2)Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理;Exception分为两大类:运行时异常[程序运行时,发生的异常]和编译时异常[编程时,编译器查出的异常]

常用异常体系图

异常处理的方式 :

一、try---catch异常处理

概念:try块用于包含可能出错的代码,catch块用于处理try块中发生的异常,根据需要在程序中可以有多个try--catch块

语法:try{  可疑代码块  }catch(异常){  对异常处理  }

public class Study {
    public static void main(String[] args) {
        int n1=10;
        int n2=0;
        try{
            int res=n1/n2; 
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

注意事项:

(1)如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块

(2)如果异常没有发生,则顺序执行try的代码块,不会进入到catch块

(3)如果希望不管是否发生异常,都执行某段代码,则使用finally

(4)可以有多个catch块,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如:Exception在后,NullPointerException在前,如果发生异常,只会匹配一个catch

public class Study {
    public static void main(String[] args) {
        try {
            Person person = new Person();
            person=null;
            System.out.println(person.getName());
            int n1=10;
            int n2=0;
            int res=n1/n2;
        } catch (NullPointerException e) {
            System.out.println("nullpointerException");
        }catch (ArithmeticException e){
            System.out.println("arith");
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
}
class Person{
    private String name;
    public String getName() {
        return name;
    }
}

(5)可以进行try---finally配合使用,这种用法相当于没有捕获异常,因此程序会直接退出;应用场景:执行一段代码,不管是否发生异常,都必须执行某个业务逻辑

二、throws异常处理

概念:(1)如果一个方法中的语句执行时,可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法不对这些异常进行处理,而由该方法的调用者负责处理(2)在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类

注意事项:

(1)子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出异常类型的子类

public class Study {
    public static void main(String[] args) {
        f1();
    }
    public static void f1(){
        try {
            f2();
        } catch (Exception e) {
            System.out.println("f2()");
        }
    }
    public static void f2() throws ArithmeticException{
        int n1=1;
        int n2=0;
        int res=n1/n2;
    }
}

三、自定义异常处理

(1)定义:自定义异常类名  extends  Exception或RuntimeException

(2)如果继承Exception,属于编译异常

(3)如果继承RuntimeException,属于运行异常

public class Study {
    public static void main(String[] args) {
      int age=10;
      if(!(age>=18&&age<=120)){
          throw new AgeException("年龄需要在18-20之间");
     }
      System.out.println("true");
   }
}
class AgeException extends RuntimeException{
   public AgeException(String message) {
       super(message);
    }
}

throw和throws的区别

意义位置后面跟的东西
throws异常处理的一种方式方法声明处异常类型
throw手动生成异常对象的关键字方法体中异常对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值