《java从入门到精通》——异常处理 2020-01-18 java学习笔记

12 异常处理

12.1异常概述

  • 算术异常(ArithmeticException)、空指针、数组溢出等等。
  • 当某一方法发生错误,这个方法创建一个对象并且把它传递给运行时系统,这个对象是异常对象。
  • 异常处理机制,将非正常情况下的处理代码与程序的主逻辑分离,在编写代码主流程的同时在其他地方处理异常。

12.2处理程序异常错误

  • 在当前方法中捕捉处理异常
  • 将异常向上抛出由方法调用者处理

12.2.1错误

  • NumberFormatException异常

12.2.2捕捉异常

  1. try-catch语句

    • package com;
      
      public class Take {
          public static void main(String[] args) {
              try {//try语句包含可能出现异常的程序代码
                  String str = "lili";
                  System.out.println(str+"年龄是:");
                  int age = Integer.parseInt("20L");
                  System.out.println(age);
              } catch (Exception e) {//catch语句块用来获取异常信息//Exception是try代码块传递给catch代码块的变量性质,e为变量名。
              //e.getMessage:输出错误性质
              //e.toString:给出异常的类型与性质
              //e.printStackTrace():指出异常的类型性质栈蹭此及出现在程序中的位置
                  e.getMessage();//输出异常性质
              }
              System.out.println("program over");
          }
      }
      
      
      • 当try代码块语句发生异常,程序转到catch代码块执行,执行完catch代码块后继续执行后续代码。
      • java异常处理是结构化的,不会因为一个异常影响整个程序运行。
      • catch语句要有处理异常的代码
  2. finally语句

    • 完整的异常处理语句一定要包含finally语句,不管程序中有无异常发生,并且不管之间的try-catch是否顺利执行完毕,都会执行finally语句

    • finally块不会被执行的四种情况:

      • finally语句块中发生异常
      • System.exit
      • 线程死亡
      • 关闭CPU

12.3java常见异常

《从入门到精通》P203

12.4自定义异常

  • 用户创建自定义异常类步骤

    • 创建自定义异常类

    • 在方法中throw异常对象

    • 在当前抛出异常的方法中处理异常用try-catch;在方法声明处通过throws抛出异常

    • 在出现异常方法的调用者中捕获并处理异常。

    • package com;
      class MyException extends Exception{
          public MyException(String ErrorMessage){
              super(ErrorMessage);
          }
              }
      
      public class Tran {
          static int avg(int number1,int number2) throws MyException{
              if(number1<0||number2<0){
                  throw new MyException("不可以使用负数");
              }
              if(number1>100||number2>100){
                  throw new MyException("数值太大了");
              }
              return (number1+number2)/2;
          }
          public static void main(String[] args){
              try{
      
              int result=avg(102,150);
              System.out.println(result);
              }
              catch(MyException e){
                  System.out.println(e);
              }
          }
      }
      
      

12.5在方法中抛出异常

12.5.1使用throws关键字抛出异常

  • static int avg(int number1,int number2) throws MyException{
    

12.5.2使用throw关键字抛出异常

  •  throw new MyException("不可以使用负数");
    

12.6运行时异常

  • RuntimeException是程序运行过程中产生的异常
  • Throwable
    • Error:描述java运行系统的内部错误以及资源耗尽的错误,较严重
      • LinkageError
      • IOError
      • 其他子类
    • Exception:非致命类,可以通过捕捉处理使程序继续执行
      • RuntimeException
        • ClassCastException
        • ArraySizeException
        • 其他子类
      • 其他子类

12.7异常的使用原则

  • 在当前方法声明中使用try-catch语句捕获异常
  • 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类
  • 如果父类抛出多个异常,那么覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值