新手小白学JAVA 异常

Posted 程序媛 泡泡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新手小白学JAVA 异常相关的知识,希望对你有一定的参考价值。

异常

1 概述

异常是一些用来封装错误信息的对象
它由异常的类型、提示信息、报错的行号提示三部分组成

2 异常的继承结构

在这里插入图片描述

3 异常的处理方式

当程序中遇到了异常,通常有两种处理方式:捕获或者向上抛出
当一个方法抛出异常,调用位置可以不做处理继续向上抛出,也可以捕获处理异常
大家可以结合生活中的例子:如果工作中遇到了问题,我们可以选择自己处理(捕获),或者交给上级处理(抛出)

捕获方式:

在这里插入图片描述

抛出方式:

在可能会会发生异常的方法上添加代码:
throws 异常类型
例如:public static void main(String[] args) throws Exception{ }

4 练习:异常测试

创建包: cn.tedu.exception
创建类: ExceptionDemo.java

package cn.tedu.exception;

import java.util.InputMismatchException;
import java.util.Scanner;

/**本类用于测试JAVA中异常的入门案例*/
public class ExceptionDemo {
	//1.创建入口函数
	public static void main(String[] args)throws Exception{
		//method();//调用method()--暴露异常
		//method1();//调用,method1()--方案一,异常捕获
		//method2();//调用,method2()--方案二,异常抛出
		f();//创建f()是为了写标准写法,main()调用之前捕获处理异常,不能抛给main()
	}

	public static void f() {
		try {
			method2();
		} catch (Exception e) {
			System.out.println("请输入正确的数据");
		}
	}

	//创建method2(),练习BUG解决方案二
	/**总结8:
	 * 如果方法抛出异常,那么谁调用这个方法,就需要解决这个方法抛出的异常(捕获解决/继续抛出)
	 * 所以main()调用了method2(),如果main()不捕获处理,就也需要抛出异常
	 * 但是注意:我们一般会在main()调用之前捕获解决异常,而不是把问题抛给main()
	 * 因为没人解决了
	 * */
	//public static void method2() throws InputMismatchException,ArithmeticException,Exception{
	public static void method2() throws Exception{
		//1.复写刚刚可能会发生异常的代码
		System.out.println("请输入您要计算的第一个数据:");
		int a = new Scanner(System.in).nextInt();
		System.out.println("请输入您要计算的第二个数据:");
		int b = new Scanner(System.in).nextInt();
		System.out.println( a / b );
	}

	//4.创建method1(),练习BUG解决方案一
	/**异常捕获的语法规则:
	 * try{
	 * 	   可能会出现异常的代码
	 * }catch(异常类型 异常参数名){
	 *        如果捕获到异常的对应解决方案
	 * }
	 * */
	public static void method1() {
		//5.1按照捕获语法完成try-catch结构
		/**总结4:try中放的是可能会出现异常的代码*/
		/**总结5:如果发生异常,就会被catch捕获到,执行被匹配到的解决方案*/
		try {
			//5.2复写刚刚可能会发生异常的代码
			System.out.println("请输入您要计算的第一个数据:");
			int a = new Scanner(System.in).nextInt();
			System.out.println("请输入您要计算的第二个数据:");
			int b = new Scanner(System.in).nextInt();
			System.out.println( a / b );
		}catch(InputMismatchException e) {//异常捕获1
			System.out.println("输入类型不正确,请输入正确的整数~");
		/**总结6:由于程序中可能出现多种异常,所以catch可以配合多次使用*/
		}catch(ArithmeticException e) {//异常捕获2
			System.out.println("除数不能为0~");
		/**总结7:如果还有上述两种异常之外的异常,用exception匹配捕获
		 * 这个就是多态最为经典的一种用法,我们不关心子类的类型
		 * 只要是可解决的异常,都是Exception的子类,多态会把这些异常当做父类型来看
		 * 进而捕获,使用通用异常解决方案来解决
		 * */
		}catch(Exception e) {//异常捕获3-通用解决方案
			System.out.println("请输入正确的数据~");
		}

	}

	//2.创建method()用来人为的暴露异常
	public static void method() {
		//3.1提示并接收用户输入的数据
		System.out.println("请输入您要计算的第一个数据:");
		int a = new Scanner(System.in).nextInt();
		System.out.println("请输入您要计算的第二个数据:");
		int b = new Scanner(System.in).nextInt();
		//3.2计算输出除法运算的结果
		//输入8和2.2,报错:InputMismatchException[输入不匹配异常]
		//输入10和0,报错:ArithmeticException[算术异常,除数不能为0]
		System.out.println( a / b );
		/**1.不要害怕BUG,真正勇士敢于直面自己写的BUG*/
		/**2.学会看报错信息的错误提示,确定自己错误的方向*/
		/**3.学会看报错信息的行号提示,哪里报错点哪里
		 * 注意:源码不会错,要看的是自己写的代码*/
	}
}

快捷键小补充:
Ctrl + Shift + T :在eclipse当中查找你想找到的类
Ctrl + T : 查看类的继承结构
Ctrl + O : 查看类的结构信息(大纲)

以上是关于新手小白学JAVA 异常的主要内容,如果未能解决你的问题,请参考以下文章

新手小白学JAVA static final 静态/构造/局部代码块之间的关系

新手小白学JAVA_IDEA的第一个入门案例

新手小白学JAVA 继承 super

新手小白学JAVA 面向对象之多态

新手小白学JAVA JUnit单元测试方法

新手小白学JAVA 泛型 Collection List Set