首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习Try-Catch

学习Try-Catch
EN

Stack Overflow用户
提问于 2009-05-08 03:56:46
回答 6查看 4.6K关注 0票数 3

我是一个Java初学者,所以请容忍我

代码语言:javascript
复制
static int load = 100;
static int greet;

public void loadDeduct(int cLoad, int c){
    int balance;
    balance = cLoad - 7;
    System.out.println("Your balance: " + balance);
}

public void loadDeduct(int tLoad){
    int balance;
    balance = tLoad - 1;
    System.out.println("Your balance is: " + balance);
}

public static void main (String [] args){
    int choice;
    Scanner scan = new Scanner(System.in);

    System.out.println("I'm a cellphone, what do you want to do?");
    System.out.println("Press 1 to send SMS / Press 2 to Call");

    choice = scan.nextInt();

    CellphoneLoad N95 = new CellphoneLoad();

    if (choice == 1){
        N95.loadDeduct(load);
    }else if (choice == 2){
        N95.loadDeduct(load, greet);
    }else{
        System.out.println("Invalid Option!!!");
    }

如何在这个程序中实现异常处理?我不太确定如何使用catch块,因为我们还没有学习到整个异常的事情。这只是我们被要求做的一个练习。我想用try-catch块替换if else语句...这有可能吗?

EN

回答 6

Stack Overflow用户

发布于 2009-05-08 04:17:37

对于Java中的异常,需要考虑的一个重要原则是有两种类型: 1.运行时2.类型化/显式(因为缺少更好的词)

当存在编程错误时,应该抛出运行时异常,并且通常不应该捕获它们,除非您在顶层捕获以报告错误。

类型化/显式异常被修饰在方法调用上,并且应该在那里,以便调用者可以对它们采取一些操作。

在上面的代码中,没有一个地方让人感觉它应该使用异常处理。

正如Patrick指出的,您通常不希望使用异常来进行流控制。

票数 2
EN

Stack Overflow用户

发布于 2009-05-08 04:02:56

使用异常进行流控制并不理想。从您的代码中,不清楚可能会抛出哪些异常。也许你可以更详细一点。

票数 1
EN

Stack Overflow用户

发布于 2009-05-08 04:04:49

您的代码中唯一可能抛出异常的部分是调用:

代码语言:javascript
复制
scan.nextInt();

根据JavaDocs,这可能抛出以下可能的异常:

  • InputMismatchException (如果下一个标记与整数正则表达式不匹配或超出范围)
  • NoSuchElementException (如果输入为exhausted)
  • IllegalStateException (如果此扫描仪已关闭)

因此,如果你想让你的代码考虑到抛出这些异常的可能性,你应该像这样重写它:

代码语言:javascript
复制
try {
    choice = scan.nextInt();
} 
catch (InputMismatchException e) {
  System.out.println(e.getMessage());
}
catch (NoSuchElementException e) {
  System.out.println(e.getMessage());
}
catch (IllegalStateException e) {
  System.out.println(e.getMessage());
}

通常,您希望您的"catch“块从特定的或很可能发生在不太可能/更一般的性质中开始。

您还可以“抛出”异常,这样无论发生异常的方法都不会处理它--调用导致异常的方法的方法必须处理它(或者再次抛出它,直到它到达Java运行时)。

如果是您想要替换的"if“语句,我建议使用"switch”语句:

代码语言:javascript
复制
switch (choice) {
    case 1:  N95.loadDeduct(load);
             break;
    case 2:  N95.loadDeduct(load, greet);
             break;
    default: System.out.println("Invalid Option!!!");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/838177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档