如何在java中抛出异常?

如何在java中抛出异常?,java,exception,Java,Exception,嗯。。以下是给我的指示: 支持与其他货币对象进行加减运算 如果货币不兼容,则引发异常 嗯。。我已经得到了一个包含add()的money类。在这种情况下,我应该如何抛出异常?我的意思是,我知道怎么做,但我应该在哪里做呢?我是在同一个级别上做的吗?或者应该在main()中的某个地方抛出异常,在那里发生所有其他事情 public class Money { Currency currency; int dollar; int cents; //constructor

嗯。。以下是给我的指示:

支持与其他货币对象进行加减运算
如果货币不兼容,则引发异常

嗯。。我已经得到了一个包含add()的money类。在这种情况下,我应该如何抛出异常?我的意思是,我知道怎么做,但我应该在哪里做呢?我是在同一个级别上做的吗?或者应该在main()中的某个地方抛出异常,在那里发生所有其他事情

public class Money {

    Currency currency;
    int dollar;
    int cents;

    //constructor
    public Money(Currency currency, int dollar, int cents) {
        super();
        this.currency = currency;
        this.dollar = dollar;
        this.cents = cents;
    }
    .
    .
    .
    .
    public Money add(Money moneyToBeAdded){
        Money result = new Money(moneyToBeAdded.getCurrency(),0,0);
        Money totalInCents;

        if(compareCurrency(moneyToBeAdded)){
            totalInCents = new Money(moneyToBeAdded.getCurrency(),0,(moneyToBeAdded.toCents() + cents));
            result = totalInCents.toDollars();
        }//to do convert currency

        return result;
    }

    public Money subtract()

    public boolean compareCurrency(Money money){
        return money.currency.equals(currency);
    }
}
<>但是,我会考虑创建一个APP或<代码>货币< /代码>特定的异常,根据您的需要对代码< >异常> /代码>或<代码>运行时异常< /代码>进行分类。

如果事情必须是细粒度的,可能是一个
MoneyConversionException
扩展
MoneyException

<>但是,我会考虑创建一个APP或<代码>货币< /代码>特定的异常,根据您的需要对代码< >异常> /代码>或<代码>运行时异常< /代码>进行分类。


如果事情必须是细粒度的,可能是一个
MoneyConversionException
扩展
MoneyException

一个应该抛出任何
异常的方法需要一个throw子句:

public Money add(Money moneyToBeAdded) throws MoneyException{..}
在该方法中,您需要过滤掉希望抛出异常的情况(例如使用if子句),然后执行以下操作:

throw new MoneyException("don't like that currency");
在本例中,MoneyException是一个扩展Exception的类:

class MoneyException extends Exception {..}

应该抛出任何
异常的方法需要一个throw子句:

public Money add(Money moneyToBeAdded) throws MoneyException{..}
在该方法中,您需要过滤掉希望抛出异常的情况(例如使用if子句),然后执行以下操作:

throw new MoneyException("don't like that currency");
在本例中,MoneyException是一个扩展Exception的类:

class MoneyException extends Exception {..}

请参阅Oracle网站上的课程


参考Oracle网站上的课程


正如其他人所提到的,有大量资源可供您使用(例如)。不管怎样,抛开这一点,我会小心抛出自定义异常。相反,抛出一个现有的(例如,
IllegalArgumentException
),以最小化复杂性。

正如其他人所提到的,您可以使用大量资源(例如)。不管怎样,不管怎样,我会小心抛出一个自定义异常。相反,抛出一个现有的异常(例如,
IllegalArgumentException
),以最小化复杂性。

抛出异常就是报告错误,必须作为方法声明的一部分进行声明。例如:

class SomeMoneyProblem extends Exception {
      public SomeMoneyProblem() {
            super();
      }

      public SomeMoneyProblem(String msg) {
            super(msg);
      }
}

    public class Money {

       ...

       public Money() { 

       }

       public Money someMoneyMethod(Money moreMoney) throws SomeMoneyProblem {
               ....
               if ( someProblemCondition )
                      throw new SomeMoneyProblem();

               if ( someOtherProblem ) 
                      throw new SomeMoneyProblem("Other Problem");

       }

       public static void main() {

               Money m = new Money();
               try {
                    m.someMoneyMethod();
               } catch (SomeMoneyProblem p) {
                    System.err.println(p);
               }
       }
    }

抛出异常是关于报告错误的,必须将其声明为方法声明的一部分。例如:

class SomeMoneyProblem extends Exception {
      public SomeMoneyProblem() {
            super();
      }

      public SomeMoneyProblem(String msg) {
            super(msg);
      }
}

    public class Money {

       ...

       public Money() { 

       }

       public Money someMoneyMethod(Money moreMoney) throws SomeMoneyProblem {
               ....
               if ( someProblemCondition )
                      throw new SomeMoneyProblem();

               if ( someOtherProblem ) 
                      throw new SomeMoneyProblem("Other Problem");

       }

       public static void main() {

               Money m = new Money();
               try {
                    m.someMoneyMethod();
               } catch (SomeMoneyProblem p) {
                    System.err.println(p);
               }
       }
    }

我认为这是一个使用未检查异常的好地方;任何添加不兼容货币的尝试都是由于编程错误造成的。所以我建议:

if (!compareCurrency(moneyToBeAdded))
  throw new IllegalArgumentException("Mismatched currencies.");
由于
IllegalArgumentException
派生自
RuntimeException
,因此不需要声明
add()
方法可以抛出它


不要创建
RuntimeException
的自定义子类。当应用程序试图从特定错误中恢复时,自定义异常类型非常有用,而不仅仅是使用相同的日志记录或警报机制来处理每个异常。程序不应该试图从这样的特定编程错误中恢复。

我认为这是使用未检查异常的好地方;任何添加不兼容货币的尝试都是由于编程错误造成的。所以我建议:

if (!compareCurrency(moneyToBeAdded))
  throw new IllegalArgumentException("Mismatched currencies.");
由于
IllegalArgumentException
派生自
RuntimeException
,因此不需要声明
add()
方法可以抛出它


不要创建
RuntimeException
的自定义子类。当应用程序试图从特定错误中恢复时,自定义异常类型非常有用,而不仅仅是使用相同的日志记录或警报机制来处理每个异常。程序不应该试图从这样的特定编程错误中恢复。

有很多关于这方面的可用资源,可以通过a找到,这些资源对您没有帮助吗?我想我只是不确定如何进行。:)得了吧,别这么苛刻。在这方面有很多可用的资源,可以通过a找到,这些资源对你没有帮助吗?我想我只是不知道该怎么做。:)拜托,不要这么苛刻。这是一个不检查异常的好地方,但是自定义运行时异常是个坏主意。它们鼓励泄漏的抽象。这是一个不检查异常的好地方,但自定义运行时异常是个坏主意。他们鼓励漏洞百出的抽象。