【java初学】异常和集合

异常和集合

1. 异常 CTRL + 1
1.1 生活中的异常
生病
	医生: 你是怎么了?
	我: 我难受
	医生: 你那里难受
	我: 我肚子疼
	医生: 怎么回事
	我: 周六放纵了一波,吃了一个甜筒
	医生: 支付宝消费65元,输液吧

甜筒:
	百因必有果,你的报应就是我
1.2 开发中的异常
 主要划分为两大类
 	Error
 	Exception
 统一的父类
 	Throwable 异常和错误的基类
 
 主要了解的方法:
 构造方法 Constructor
 	Throwable();
 		创建或者说生成一个异常/错误类对象,异常/错误信息为null
 	Throwable(String message);
 		创建或者说生成一个异常/错误类对象,异常/错误信息为message
 
 成员方法:
 	String toString();
 		展示当前异常/错误的简要信息
 	String getMessage();
 		获取当前异常/错误的信息方法
 	void printStackTrace();
 		展示错误/异常的前因后果【红字】
package com.qfedu.a_throwable;

/**
 * Throwable常用方法演示
 * @author Anonymous
 *
 */
public class Demo1 {
	public static void main(String[] args) {
		// 创建了一个Throwable类对象 
		// Throwable throwable = new Throwable();
		Throwable throwable = new Throwable("急性肠胃炎");
		
		System.out.println(throwable.getMessage());
		System.out.println(throwable.toString());
		// throwable.printStackTrace();
		
		testThrowable();
	}
	
	public static void testThrowable() {
		new Throwable("测试错误").printStackTrace();
	}
}
1.3 异常和错误的区别
Exception 
	异常 可以处理,代码中也就不存在异常
Error 
	错误 只能避免

错误和异常根据报错结尾来判断不同的情况。

错误只能避免
异常有两种处理方式
	1. 捕获
	2. 抛出
1.4 捕获异常
格式:
	try {
		有可能出现异常的代码
	} catch (异常对象) {
		对应当前异常处理方式
	}
	
	try {
		有可能出现异常的代码
	} catch (异常对象) {
		对应当前异常处理方式
	} finally {
		用于关闭当前程序使用到的资源。
	}
package com.qfedu.a_throwable;

/*
 * 异常捕获注意事项:
 * 		1. 当代码捕获异常之后,JVM会认为当前程序中并没有异常存在,继续执行代码
 * 		2. 代码从异常发生开始,不在正常运行
 * 		3. 代码中如果出现了多个异常,可以添加多个catch块进行捕获处理,对症下药
 * 		4. Exception可以处理所有异常,但是不能处理所有的异常都用Exception,
 * 		可以使用Exception捕获多余问题,或者说未发现问题
 * 		5. 可以使用 | 位或在同一个catch 中捕获多个异常。后期IDE工具会鄙视你
 */
public class Demo3 {
	public static void main(String[] args) {
		test(20, 0, null);
	}
	
	public static void test(int num1, int num2, int[] arr) {
		int ret = 0;
		
		try {
			// 有可能出现异常的代码
			arr[0] = 10;
			System.out.println("你猜我运行吗???");
			ret = num1 / num2;
		} catch (ArithmeticException | NullPointerException e) {
			System.out.println("都是异常");
		} catch (Exception e) {
			System.out.println("Exception是所有异常的基类");
		}
		
		System.out.println("ret : " + ret);
	}
}
1.5 抛出异常
关键字:
	throw 
		在代码中满足条件的情况下,抛出异常
	throws 
		在【方法声明】位置告知调用者,这里有哪些异常抛出
package com.qfedu.a_throwable;

/*
 * 抛出异常特征:
 * 		1. 抛出异常就是一个高级版的参数合法性判断
 * 		2. 代码中如果使用throw抛出指定异常,必须在代码声明位置告知调用者
 * 		当前方法存在哪些异常抛出
 * 		3. 异常从抛出位置开始,之后的代码就不再运行。
 * 		4. 同一个代码块中不得抛出多个异常,如果代码需要抛出多个异常,需要执
 * 		行不同的判断条件。
 * 		5. 如果调用的方法存在抛出异常, 这里需要采用异常处理方式,
 * 			a. 捕获异常
 * 			b. 抛出异常
 * 		NullPointerException
 * 		ArrayIndexOutOfBoundException
 */
public class Demo4 {
	public static void main(String[] args) 
			throws ArithmeticException, NullPointerException {
		try {
			test(10, 0, null);
		} catch (ArithmeticException | NullPointerException e) {
			System.out.println("当前代码存在异常问题");
		}
		
		test(10, 0, null);
 	}
	
	/**
	 * 方法功能概述
	 * 
	 * @param num1 参数1
	 * @param num2 参数2
	 * @throws ArithmeticException 当前方法抛出算术异常。
	 * @throws NullPointerException 数组首地址不得为null
	 */
	public static void test(int num1, int num2, int[] arr) 
			throws ArithmeticException, NullPointerException {
		// 在方法的声明位置告知调用者,该方法有哪些异常抛出。
		// 参数合法性判断
		/*
		 * if (0 == num2) { System.out.println("Input Parameter is Invalid"); return; }
		 */
		if (0 == num2) {
			// throw new 异常构造方法();
			throw new ArithmeticException("算术异常");
		}
		
		if (null == arr) {
			throw new NullPointerException("数组异常");
		}
		
		
		int ret = num1 / num2;
		System.out.println(ret);
	}
}
1.6 抛出和捕获使用情况图例

在这里插入图片描述

1.7 自定义异常
Java中异常众多!!!
	也满足不了我们的日常!!!

单身狗异常
网线断了异常
	Java中现有异常无法满足,自定义异常玩一玩了!!!
格式:
	class 自定义异常 extends Exception {
		// 无参数构造方法
		// 有参数构造方法
	}
	SingleDogException
	
package com.qfedu.a_throwable;

/**
 * 单身狗异常完毕!!!	
 * 		错误日志记录
 * @author Anonymous
 *
 */
class SingleDogException extends Exception {
	
	// 无参数构造方法
	public SingleDogException() {}
	
	/**
	 * 带有Message异常信息参数的构造方法
	 * 
	 * @param message String类型异常信息
	 */
	public SingleDogException(String message) {
		/*
		 * 调用父类的String类型构造方法。
		 * super()	
		 * 		就可以直接调用父类的构造方法,会根据实际参数来选择对应的
		 * 		构造方法执行。
		 */
		super(message);
	}
}

public class Demo5 {
	public static void main(String[] args) throws SingleDogException {
		try {
			buyOneFreeOne(true);
		} catch (SingleDogException e) {
			// TODO Auto-generated catch block
			System.out.println(e.getMessage());
		}
		
		buyOneFreeOne(true);
	}
	
	/**
	 * 买一赠一
	 * 
	 * @param single boolean true 真·单身狗
	 * @throws SingleDogException 单身狗异常
	 */
	public static void buyOneFreeOne(boolean single) throws SingleDogException {
		if (single) {
			throw new SingleDogException("路见不平一声吼,大哥没有男朋友");
		}
		
		System.out.println("书亦烧仙草买一送一, 美团有券9.9RMB");
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值