Java入门学习-学会try/catch/throw的用法。做出一个计算器除法功能,除以0时程序必须给出提示。

一、try/catch/throw含义理解

因为程序运行着,可能会产生一些错误,这些错误并不是语法错误(语法错误编译器会识别提示),而是到了特定的操作就是产生。
所以需要引入try/catch/throw,
try相当于是监控区域,在try{}块里尝试着各种可能产生异常的调用。
当try里抛出了异常后,就需要catch处理这个异常,如果有多种异常,则可以写多个catch语句。
throw可以直接抛出/产生异常,导致控制流程转到catch块。主要应用于自定义异常

1.将当前捕获的异常再次抛出:throw e;
2.重新生成一个异常,并抛出:throw new Exception(“some message”);
3.重新生成并抛出一个新的异常,该异常包含了当前异常的信息:throws newException(“some message”,e); 然后用e.getCause()来得到内部异常

二、try/catch/throw语句书写

try{
    throw value;
}
catch(valuetype v){
//处理异常
}

三、做出一个计算器除法功能,除以0时程序必须给出提示。

import java.util.Scanner;
public class temp {
    public static void main(String[] args) {
        double a,b,c;
        System.out.println("请输入第一个数字:");
        a=GetDouble();     //该方法会抛出非数字异常
        System.out.println("请输入第二个数字:");
        b= GetNonZeroDouble(); //该方法会抛出非数字异常和自定义数字不能0异常
        c=a/b;
        System.out.println(a+"/"+b+"="+c);  
    }
    public static  double  GetDouble() {
        double x;
        try{
            Scanner s=new Scanner(System.in);
            x=s.nextDouble();
        }catch (Exception e) {
            System.out.println("输入非法,请输入数字:");
            return GetDouble();
        }
        return x;
    }
    public static  double  GetNonZeroDouble() {
    //此方法捕获两种异常,所以异常需确定顺序:子类型必须要在父类型之前进行catch。当MyException写在Exception后时,会报错:
    //Unreachable catch block for MyException. It is already handled by the catch block for Exception
    //catch与分支逻辑是一致,如果父类型先被catch,那么后被catch的分支根本得不到运行机会。
        double x;
        try{
            Scanner s=new Scanner(System.in);
            x=s.nextDouble();
            if (x==0) {
                throw  new  MyException("被除数不能为0");
            }
        }catch (MyException e) {
            // TODO: handle exception
            System.out.println("输入非法:"+e.getMessage()+",请输入非0数字:");
            return GetDouble();
        }catch (Exception e) {
            // TODO: handle exception
            System.out.println("输入非法,请输入非0数字:");
            return GetDouble();
        }
        return x;
    }
}
class MyException extends Exception{
    public MyException(String message) {
        super(message);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值