《Java》Java“异常捕捉机制”实际应用

一、任务目标

1.完成一个 java application应用程序,完成c=a/b 的计算并输出c的结果,可以为a和b在程序中赋初值、或者接收用户通过键盘输入a和b的数值文本后转换为数字等,在程序要求当 b 为0时c的计算结果正确。
2.完成一个 java application应用程序,完成一个计算绝对值表达式 |a-b|的功能。要求当b比a大时人为抛出一个自定义异常,在计算绝对值时通过异常捕捉机制完成此绝对值表达式的计算。

二、“异常”概述

1. 异常

    在程序中,错误可能产生于程序员没有预料到的各种情况,在Java中这种在程序运行时可能出现的一些错误成为异常。异常是一个在程序执行期间发生的事情,它中断了正在执行的程序的正常指令流。如下图:
在这里插入图片描述
程序运行的结果报告发生了算术异常,在算术表达式“3/0”中,0作为除数出现,系统不再执行下去,提前结束。

2. 捕捉异常
2.1. try、catch和finally语句

    Java语言的异常捕获结构由 try、catch和finally 3部分组成。其中,try 语句块存放的是可能发生异常的 Java 语句;catch 程序块在 try 语句块之后,用来激发被捕捉的异常;finally 语句块是异常处理结构的最后执行部分,无论 try 语句块中的代码如何退出,都将执行 finally 语句块。
    语法如下:

try{
	//程序块代码
}
catch(Exceptiontype e){
	//对Exceptiontype e的处理
}
...
finally{
	//程序块
}
2.2. try — catch语句块

    try — catch语句块执行原理流程图:
在这里插入图片描述
    当 try 代码块中的语句发生异常时,程序就会跳转到 catch 代码块中执行,执行完 catch 代码块的其他代码,而不会执行 try 代码块中发生异常语句后的代码。由此可知,Java的异常处理是结构化的,不会因为一个异常影响整个程序的执行。

3. 自定义异常

    使用Java内置异常类可以描述在编程时出现的大部分异常情况。除此之外,用户只需要继承Exception类即可自定义异常类。
    在程序中使用自定义异常类,大体克分为可分为以下几个步骤:
(1)创建自定义异常类。
(2)在方法中通过throw类关键字抛出异常对象。
(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用的异常,继续进行下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常。

public class MyException(子类名) extends Exception{ //创建自定义方法,继承Exception类
	 public MyException(String ErroorMessage){  //构造方法
	 			super(ErroorMessage)      //父类构造方法
	}
	static int avg(int number1,int number 2)throws MyException{  //定义方法,抛出异常
		//语句块
	}
	public static void main(String[] args){  //主方法
		try{              //try方法代码块处理可能出现异常的代码
			int result = avg(102,150);
		}catch (MyException e){
			System.out.println(e);
		}
	} 
}

三、“异常捕捉机制”实际应用

任务1:

程序代码:

import java.util.Scanner;  //导入Scanner类

class  Count   //创建类Count
{
	public static void main(String[] args)   //主函数
	{
		System.out.println("请输入a的值:");  
		Scanner str1 = new Scanner(System.in);   //键入a的值并存入String类型变量str1中
		int a = Integer.valueOf(str1.nextLine());  /*nextline()方法读取a的值并通过valueOf()方法
		将String类型的数据转换为int型数据*/
		System.out.println("请输入b的值:");   //键入b的值并存入String类型变量str2中
		Scanner str2 = new Scanner(System.in);
		int b = Integer.valueOf(str2.nextLine());
		int c = 0;
		try{     //try代码块处理可能出现的异常信息
			c = a/b;
		}catch(Exception e){  
			System.out.println("除数b不能为0,请重新输入b的值:");
			Scanner str3 = new Scanner(System.in);   
			int B = Integer.valueOf(str3.nextLine());
			c = a/B;
		}
		System.out.println("c = "+c);
	}
}

运行结果:
在这里插入图片描述


任务2:

程序代码:

import java.util.Scanner;    //导入Scanner类

class Tran {    //创建类Tran
	static class MyException extends Exception{   //创建自定义方法,继承Exception类
		public MyException(String Error){   //构造方法
			super(Error);   //父类构造方法
		}
	}
	public static void absolute(int num1, int num2)throws MyException {
		if(num2 > num1){  //定义方法,抛出异常
			throw new MyException("b大于a");  //错误信息
		}
	}

	public static void main(String[] args) { //主函数
		// TODO Auto-generated method stub
		System.out.println("请输入a的值:");  
		Scanner str1 = new Scanner(System.in);  //键入a的值并存入String类型变量str1中
		int a = Integer.valueOf(str1.nextLine());
		System.out.println("请输入b的值:");  //键入b的值并存入String类型变量str2中
		Scanner str2 = new Scanner(System.in);
		int b = Integer.valueOf(str2.nextLine()); /*nextline()方法读取a的值并通过valueOf()方法
		将String类型的数据转换为int型数据*/
		int c = 0;
		try{   //try代码块处理可能出现的异常信息
			c = a - b;
			absolute(a,b);  //调用方法,抛出异常
		}catch(MyException e){  
			c = b - a;  
		}
		System.out.println("|a - b| = " +c);
	}
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yga_airspace/article/details/82873766