Discuss / Java / 【笔记+作业】-抛出异常

【笔记+作业】-抛出异常

Topic source

首先明确抛出异常的目的:

是为了在代码执行发生错误的时候,停止,或者进行处理,以及抛出信息帮助程序员定位出现bug的位置

所以,需要在可能发生异常的地方,使用 throw 语句抛出异常

异常抛出之后,需要对异常进行捕获

(注意:IllegalArgumentException不属于RuntimeException子类的异常,是不需要捕获的异常)

如果某个方法或者函数,有可能抛出非RuntimeException子类的异常,则

(1)将调用这个方法或者函数的时候,将这个可能抛出异常的方法或者函数,放在try catch语句的 try 语句块中,使用 catch来捕获异常并处理

或者

(2)在定义这个可能出现异常的函数或者方法的时候就声明,可能抛出的异常,例如:

static double tax(int salary, double rate) throws IllegalArgumentException{
      //TODO;
}

但是光声明还不够,也需要在调用这个方法或者函数的时候使用try catch语句捕获可能出现的异常


作业:

package com.itranswarp.learnjava;

public class Main {

	public static void main(String[] args) {	
		
		try {
			System.out.println(tax(2000, 0.1));
			System.out.println(tax(-200, 0.1));
			System.out.println(tax(2000, -0.1));
		} catch (IllegalArgumentException e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			System.out.println("END of tax()");
		}
		
	}

	
	static double tax(int salary, double rate) throws IllegalArgumentException{
	
		// TODO: 如果传入的参数为负,则抛出IllegalArgumentException
		if (salary<0 || rate<0) {
			throw new IllegalArgumentException("传入参数不能为负值");
		}
		return salary * rate;
	}
	
}

作业中,IllegalArgumentException不属于RuntimeException子类的异常,是不需要捕获的异常

所以在mian方法中,即使不使用try catch 语句,也能正常执行,不会出现编译不通过的情况

(注意:IllegalArgumentException不属于RuntimeException子类的异常,是不需要捕获的异常)

你这句话写的有问题的,java异常那一节老师已经说了,不是RuntimeException子类的异常,是需要捕获的异常,否则编译不通过的。而且IllegalArgumentException是RuntimeException的子类,你可以去看源码。


  • 1

Reply