原来这就是Java中的异常(abnormal),小白看完也懂了,学习总结②

throw&throws

throws

使用throws声明异常类型

定义

使用throws关键字,标明将要抛出的任何类型的异常,通过throw将将要产生的异常抛出。

可能这样有些抽象,不是很好理解。举个例子,汽车在行驶的过程中可能会产生毛病,故障,但是汽车本身是不会有处理故障的能力的,那么就会由开车的人去解决这些故障。类似。当我们的方法中可能会出现异常牡丹石方法自身无能力处理异常,这是我们就可以在方法的声明处,由throws抛出异常,谁来使用该方法,谁去解决这个异常。

常见的语法结构是这样的:在方法定义时声明该方法要抛出的异常类型

public void method() throws Exception1, Exception2, Exception3... ExceptionX{
        //可能会产生异常的代码片段
}

案例

次处的案列链接的是案例代码位置未解决完的片段,定义了一组除数。让我们看看怎样进行修改自己不需要处理,由调用者去解决这些问题。

  1. 在方法声明处添加throws关键字
  2. 将可能发生异常的类型放在throws后面
  3. 删除相关自己的处理语句,调整并且保留
package com.kilig.test;

import java.util.Scanner;

public class tryDemoThree {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int result = test();
		System.out.println("The Quotient of two numbers is : "+result);
	}

	private static int test() throws ArithmeticException {
		
		Scanner input =new Scanner(System.in);
		System.out.println("======BEGAIN======");
//		try {
		System.out.print("Please input first number: ");
		int one = input.nextInt();
		System.out.print("Please input secound number: ");
		int two = input.nextInt();
//		return one/two;
//		}catch(ArithmeticException e) {
			System.out.println("Divider cannot be zero");	
//			return 0;
		
//		}finally {
		System.out.println("======OVER======");
//		return -1000000;
//		}
		return one/two;

	}

}

 在调用者位置,我们需要对该片段进行try-catch处理,因为这一部分是会发生异常的,在eclips中,有快捷键去操作,如图,右键选中代码块,然后选择Surrond With,然后选择Try-catch块。会发现程序自动棒我们分割了try-catch块,然后我们补充完他

代码正常运行

正常报错

这个是由于我们没有对这个异常进行报备,所以由printStackTrace直接告诉异常的原因

此时我们可以通过“”来标识不同异常原因进行报备,使得运行代码程序正常的到结果。

方案:throws后面接多个异常类型,然后中间用逗号分割


throw

在Java中,throw用来抛出一个异常。常见语法

throw new IOException();

throw抛出的只可以是可抛出类Throwable或者其子类的实例对象

比如:

方案一:自己生成的异常自己处理

public void method(){
    try{
        //代码段1
        throw (异常类型 ex);
    
    }catch(){
        //对异常进行处理的片段2
    }
}

方案二:谁调用异常方法,谁来处理异常

public void method() throws 异常类型{
        //代码段1
            throw new 异常类型();
        }

问题

问:我们都想着避免抛出异常,但是为什么在这儿我们要着急自己写出异常类型呢?

答:由于在程序运行过程中,我们有时不可规避的会面对异常,其实这样做

  • 规避可能出现的风险
  • 完成一些程序逻辑

这样做可以完成一些特定的场景组合

案例场景

加入我们自己经营一家旅馆KiligHouse,那么大家在住宿时规定是必须要提供身份证明ID的。而且如果年龄在18岁以下的小朋友是必须有亲属陪同入住,不可以单独入住。针对这一场景,我们就可以借助throw抛出异常处理异常进行解决。

方法1:谁调用异常方法,谁来处理异常

package com.kilig.test;

import java.util.Scanner;

public class TryDemoFour {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		testAge();

	}
	
//	描述KiligHouse的入住规则,年龄在18岁以下,需要有人陪同
	public static void testAge() throws Exception {
		System.out.println("===请输入年龄信息!===");
		Scanner input =new Scanner(System.in);
		int age = input.nextInt();
		if (age<18 || age>80) {
			throw new Exception("年龄在18岁以下,需要有人陪同");
		}else {
			System.out.println("===欢迎光临!===");
		}
	}

}

但是dang当输入字母时呢?

可以看到,在input处就会产生异常,而不会产生其他的异常信息。这就是在在特定条件下处理的信息。

方法2:自己生成的异常自己处理(调用者可以选择自己处理或者继续向上抛异常)

那么结果呢?

 

我们可以看到,是一样的

注意:当用throws在方法声明处抛出异常时,此时可以抛出与throw对象相同的异常类型或者是父类,不可以是子类!!

 

 

👺👺:这是Java异常学习总结 一

👺👺:这是Java异常学习总结 三

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值