Java异常体系

目录

1.异常分类

2.处理异常

3.自定义异常

 

 


1.异常分类

 

Thorwable类(表示可抛出)

              是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,  这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。

Error

Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常

发生时,Java虚拟机(JVM)一般会选择线程终止。     

         系统级别的异常,产生的原因有:系统崩溃、虚拟机错误、内存溢出等等。

例如:你开车上班途中,出了车祸,没救了。

非运行时异常

        就是编译器强制要求我们处理的异常,常见的异常有:IOException、SQLException。

        不处理无法同通过编译。

例如:你发烧38度,就必须看医生了。

运行时异常

         运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

例如:你得了普通感冒,自己可以不管,也可以去看看医生。

2.处理异常

   2.1try{}catch{}finally{} 捕获异常

   代码示例:

package ExceptionTest;
//try{}catch{}finally{]语句
public class Demo03 {
    public static void main(String[] args) {
        System.out.println("大家加油");
        try{
            int a=2;
            int b= 0;
            System.out.println(a/b);
            int[] arr = new int[3];
            System.out.println(arr[4]);
            //虽然有两个异常,但是catch到一个异常后,后面的异常也不会去处理。
        }catch(ArithmeticException e){
            e.printStackTrace();
        }catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }finally {
            System.out.println("武汉加油");
        }

        System.out.println("中国加油");

    }
}
//运行结果:
//         大家加油
//         java.lang.ArithmeticException: / by zero
//	        at ExceptionTest.Demo03.main(Demo03.java:9)
//         武汉加油
//         中国加油

    注意:try、catch、finally三个语句块应注意的问题

              第一:try、catch、finally三个语句块均不能单独使用,三者可以组成 try...catch...finally、try...catch、try...finally三种结           构,catch语句可以有一个或多个,finally语句最多一个。

              第二:try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可         以访问,则需要将变量定义到这些块的外面。

               第三:多个catch块时候,最多只会匹配其中一个异常类且只会执行该catch块代码,而不会再执行其它的catch块,且匹         配catch语句的顺序为从上到下,也可能所有的catch都没执行。

              第四:先Catch子类异常再Catch父类异常 

  2.2  throw 抛出异常对象

         例如员工都有员工ID编号 ID编号为6位数字 如果超出6位或者少于6位,那么我们抛出异常。

public void checkPersonId(String id){
		
		if(id.length() == 6){
			System.out.println("这是我们的员工");
		}else{
			throw new IllegalArgumentException("他的ID不是6位");
		}
} 

   2.3 throws 声明异常 

      throws关键字用于方法体外部的方法声明部分,用来声明方法可能会抛出某些异常。仅当抛出了非运行时异常,该方法的调用者才必须处理或者重新抛出该异常。

import java.io.File;
import java.io.IOException;

public class Demo07 {

    public static void main(String[] args) throws IOException {
        Demo07 d1 = new Demo07();
        d1.show(); //此处也可以try{}catch{}异常
    }
    public void show() throws IOException {
        File f1 = new File("1.txt");
        f1.createNewFile();
    }
}

 

 3.自定义异常

        实现方式比较简单 自己创建个类  继承Exception或者Exception的相关类

        如果希望他是一个运行时异常 那么就继承 RumTimeException

        如果希望不是一个运行时异常 那么就可以继承Exception 或者是非RumTimeException

        对自定义的类中构造方法进行书写  基本就可以

  代码示例:

public class MyException extends Exception{
	
	//构造方法都是用super关键字调用父类的构造方法
	public MyException() {
		super();
	}
	
	public MyException(String message){
		super(message);
	}
	
	public MyException(String message,Throwable te){
		super(message, te);
	}
	
	public MyException(Throwable te){
		super(te);
	}
	
	//剩下里面的其他代码 就是要看你的需求是什么
	

	
	
}

 

 

 

 

 

 

 

             

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值