项目 异常 和泛型 总结篇

本文深入解析Java中的异常处理机制,包括Throwable类的构成、Exception与Error的区别、异常捕获与抛出的技巧,以及如何自定义异常。通过实例演示了异常处理在代码健壮性中的作用。

1.代码中的异常

  Throwable类

     java中所有异常的超类,在java中所有的异常,错误的基类就是Throwable类

Throwable有两部分组成

    1.Exception  异常,可以处理,代码中还有拯救的可能性

    2.Error  错误  无法拯救

 

Throwable 常用方法:

 

    Constructor: 

            Throwable构造方法,Throwable类对象中,存储的异常或者错误信息为null

            Throwable(String message);Throwable构造方法,Throwable类对象中,存储的异常或者错误信息为message

   Metgod:

            String getMessage();获取Throwable对象存储中的异常或者错误信息

            String toString();返回当前异常或者错误的简要描述

            void  printStackTrace();展示错误的前因后果,【红色字体】

package throwable;

public class Demo1 {
	public static void main(String[] args) {
		Throwable throwable =new  Throwable();
		
		System.out.println(throwable.getMessage());
		
		System.out.println(throwable.toString());
		
		
		throwable.printStackTrace();
		//System.out.println(throwable.getMessage());
		
		test();
	}
	
	public static void  test(){
		new Throwable("异常测试").printStackTrace();
	}

}

 

 

1.1Exception和Error区别

 

 

   Exception  异常  可以处置

    Error   错误  不可以处置   只能避免

1.2异常处理

 

1.2.1捕获异常

 

     try - catch结构

 

 

    格式  

   try{

//有可能出现异常代码

}catch(处理对应的异常对象)

{

//处理方法

}

 

/*
 * 捕获异常问题总结:
 *         1. 代码中从异常发生位置开始,之后的代码都不在运行
 *         2. 代码中有多个异常,可以使用多个catch块进行捕获操作,分门别类处理
 *         3. 当前情况下,只能展示异常情况,后期可以讲异常情况做成log日志文件
 *         4. 异常被捕获之后代码可以正常运行。

  try  - ccatch -finally  结构

1.2.2抛出异常

关键字 

throw:在方法内抛出异常

throws:在【方法声明】位置,告知调用者当前方法有哪些异常抛出 

 

 

总结:

1.一个代码块内有且只能抛出一个异常

2.从throw位置开始,之后的代码不再运行

3.代码中存在使用throw抛出异常,在方法的声明位置必须告知 这里有异常

 

 

   

package throwable;

import java.rmi.AccessException;

public class Demo4 {
	//调用带有异常抛出的犯法,如果选择继续抛出需要在当前方法的声明位置
	//告知其他调用者  这里有异常抛出
	
	public static void main(String[] args) throws AccessException {
		
		//调用一个带有异常抛出的 方法
		//捕获处理
		try {
			test(10, 2, null);
			
		} catch (ArithmeticException e) {
			System.out.println(e.getMessage());
		}catch (NullPointerException e) {
			System.out.println(e.getMessage());
		}
		
	}
	
	public static  void test(int num1,int num2,int[] arr) throws AccessException,NullPointerException{
		
		//参数合法性判断
//		
//		if(0 == num2 || null == arr){
//			System.out.println("Input Parameter is Invalid");
//			return;
//			
//		}
		
		//抛出异常方式来处理当前的参数合法性判断
		
		if(0 == num2 ){
			//有可能会导致算数异常

			throw new AccessException("算数异常");
			


		}
		if(null == arr){
			
			//存在数组操作空指针异常
			throw new  NullPointerException("数组空指针异常");
			
		}
		System.out.println(num1/num2);
		arr[10]=0;
		
		
		
	}

}

1.2.3 抛出和捕获的对比

   捕获之后,代码 可以正常运行,要保证处理之后的异常不会导致其他问题

     例如:

             用户密码错误,不能采用捕获异常

             用户指定路径问题,也不能采用捕获异常

抛出的确可以解决很多问题,并且可以让代码健壮性很强。到用户层面说什么都不能抛出异常

 

用户密码错误情况:

  1.捕获异常

  2.通过异常处理  catch将错误抛出

  3.给于用户的友好提示

1.2.4  为什么不使用大异常

 

不能所有的异常都使用Exception捕获或者抛出无法得知具体的异常类型。、

1.2.5 RuntimeException

运行时异常: 

     JVM在运行过程中可以非检查异常

例如:

          ArrayIndexOutOfBoundException
         NullPointerException        
         StringIndexOutOfBoundException        
         ArithmeticException        
    

1.2.6自定义异常


```
代码运行的过程中存在一定的生活化
    例如:
        用户名密码错误
        NoGirlFriendException 没有女朋友异常

自定义异常格式:
    class 自定义异常类名 extends Exception {
        // No Fields Constructor
        
        // String Field Constructor
    }
    自定义异常类名:
        必须Exception结尾!!!
 

```javapackage com.qfedu.a_throwable;/* * 自定义异常 */class NoGirlFriendException extends Exception {    /**     * 无参数构造方法     */    public NoGirlFriendException() {}        /**     * 带有String类型参数的构造方法     *      * @param message 描述当前的异常信息     */    public NoGirlFriendException(String message) {        super(message);    }}public class Demo5 {    public static void main(String[] args) throws NoGirlFriendException {        try {            buyOneFreeOne(false);        } catch (NoGirlFriendException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                buyOneFreeOne(false);    }        /**     * 买一送一方法,需要判断是不是单身狗     *      * @param singleDog boolean类型数据,true是单身,false表示有女朋友     * @throws NoGirlFriendException 没有女朋友异常     */    public static void buyOneFreeOne(boolean singleDog)             throws NoGirlFriendException {        if (singleDog) {            throw new NoGirlFriendException("两只黄鹂鸣翠柳,你还没有女朋友");        }                System.out.println("买蜜雪冰城甜筒一个送保时捷一辆");    }}

     

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值