Java学习笔记06:Java基本语法异常

  • 异常是指程序运行中出现的不期而至的各种情况,如:文件找不到了,网络连接失败,非法参数等...
    异常发生在程序运行期间,它影响了正常程序执行流程。
public class demo01 {
    public static void main(String[] args) {

    }
    public void a(){
        b();
    }
    public void b(){
        a();
    }
}

Java把异常当做对象来处理,并定义了一个基类java.lang.Throwable来作为所有异常的超类。
在Java API中已经定义了许多异常类,这些异常类分为两大类:

  • Error(错误)
  • Exception(异常)

Error

  • Error类对象是由Java虚拟机生成并抛出,大多数错误与编写者操作无关
  • Java虚拟机运行错误,当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError,这些异常发生时,JVM选择线程终止
  • 发生在虚拟机试图执行应用时,如类定义错误(NoClassDefFoundError),链接错误,这些错误是不可查的,因为他们在应用程序的控制和处理能力之外,而且绝大多数运行时不允许出现的状况

异常处理机制

  • 抛出异常
  • 捕获异常
    异常处理的5个关键字:
  • try
  • catch
  • finaly
  • throw
  • throws
public class demo01 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
       // System.out.println(a/b);
        try {
            System.out.println(a/b);
        }catch (ArithmeticException e){
            //如果出现异常执行这里
            System.out.println("程序出现异常. 变量B不能为0");
        }finally {
            //无论是否异常最终都会执行到这里
            //可以不要,常用来关闭、善后操作
            System.out.println("finally");
        }
    }
}

捕捉的最高级别为Throwable,catch的参数表示要希望捕获的类型
异常也是可以一层层判断的:

package com.exception;

public class demo01 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
       // System.out.println(a/b);
        try {
            new demo01().a();
            System.out.println(a/b);

        }catch (ArithmeticException e){
            //如果出现异常执行这里
            System.out.println("程序出现异常. 变量B不能为0");
        }catch (Throwable e){
            System.out.println("最高级别异常");
        }finally {
            //无论是否异常最终都会执行到这里
            //可以不要,常用来关闭、善后操作
            System.out.println("finally");
        }
    }
    public void  a(){
        b();
    }
    public void b(){
        a();
    }
}

捕获错误的快捷键: control+alt+t

主动抛出异常

      public static void main(String[] args) {
        try {
            new demo03().test(1,0);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }

    }
    public void test(int a, int b){
        if(b==0){
            throw new ArithmeticException();
        }
        System.out.println(a/b);
    }

自定义异常

使用Java内置的异常类可以描述在编程时出现的大部分异常情况,除此之外,用户还可以自定义异常。用户自定义异常类,只需要继承Exception类即可.

在程序中使用自定义异常类,大体可以分为以下几个步骤:

  • 创建自定义异常类
  • 在方法中通过throw关键字抛出异常对象
  • 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指名要抛出给方法调用者的异常,继续进行下一步操作
  • 在出现异常方法的调用者中捕获并处理异常.
public class demo04  extends Exception {
    private int detail;
    public void MyException(int a ){
        this.detail = 10;
    }
    //异常打印信息
    public String toString(){
        return "MyException{"+
                "detail="+detail+
                "}";
    }
}

总结

  • 处理运行异常时,采用逻辑去合理规避同时辅助try-catch处理
  • 在多重catch块后面,可以加一个catch来处理可以会被遗漏的异常
  • 对于不确定的代码,也可以加上try-catch,处理潜在的异常
  • 尽量去处理异常,切记只是简单的调用printStackTrace()去打印输出
  • 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  • 尽量添加finally语句块去释放占用的资源
posted @ 2020-05-09 07:16  feelonewong  阅读(160)  评论(0)    收藏  举报