Java 如何使这个if语句为true,从而不捕获异常?

Java 如何使这个if语句为true,从而不捕获异常?,java,exception,Java,Exception,我试图编写一个if语句,既捕获异常又不捕获异常。我捕获了异常,但我无法确定如何使条件为true,以便它不捕获异常并返回所需的值。代码如下: 主要 畜生 食物 肉 狼 输出 它想让我捕获肉类作为一个例外,但我想使肉类不是一个例外,并与if语句中的肉类条件相关,如下所示: public Food eat(Food x) throws Exception { if (x instanceof Meat) { return x; } else {

我试图编写一个if语句,既捕获异常又不捕获异常。我捕获了异常,但我无法确定如何使条件为true,以便它不捕获异常并返回所需的值。代码如下:

主要

畜生

食物

输出

它想让我捕获肉类作为一个例外,但我想使肉类不是一个例外,并与if语句中的肉类条件相关,如下所示:

public Food eat(Food x) throws Exception

{ 
    if (x instanceof Meat) {
            return x;
        } else {
           throw new Exception("Carnivores only eat meat!");
        }    
}
这一点应该是正确的:

Food Meat = new Food("Steak");
        System.out.println("Wolves eat " + wolfExample.eat(Meat));
所需的输出将是:

 ************Wolf Exception example************
    java.lang.Exception: Carnivores only eat meat!
    ************Wolf Non-Exception example************
    Wolves eat Meat

我知道我犯了一个错误,但我正在努力想办法解决它,任何帮助都会很好,谢谢。

如果一个方法有可能抛出一个选中的异常,这将在其签名中声明。如果调用一个声明可能引发异常的方法,则必须为该异常提供一个处理程序,或者声明您也可以引发该异常。在编写练习时,您碰巧知道在这种情况下不应获得异常,这一事实并不能免除您的这一要求

您需要做的是将调用该方法的代码放在一个try块中,并为选中的异常提供一个catch块,在这种情况下,该方法声明它可能抛出异常。这并不意味着会抛出异常(在本例中不会),但Java坚持知道如果抛出异常,它应该做什么


有些人——特别是Spring社区——并不真正喜欢这种行为,所以他们几乎对所有事情都使用未经检查的异常。未经检查的异常是从RuntimeException或Error派生的异常,尽管Error通常是为更严重的情况保留的。不过,Java最初的设计是确保每个检查过的异常最终都会到达一个处理程序。

您没有打印狼群吃肉的原因,但是一个异常是,您仍然需要在每次调用.eat时使用try-catch块,即使您知道不会抛出异常

在打印行之前出现的异常是RuntimeException,因为代码不可编译

这不起作用的第二个原因是,你给狼的肉是食物而不是肉:

这些小小的变化将使它发挥作用:

Food meat = new Meat("Steak");    // you create a Meat object and store it in a Food variable (so to speak)
try{     
    System.out.println("Wolves eat " + wolfExample.eat(meat));   // must be surrounded by a try-catch block
}catch(Exception ex){
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);  // better way to log the exception than ex.printStackTrace();
}
顺便说一句:变量应该以小写字母Food-meat开头,而不是Food-meat。。否则,如何知道Meat是类还是变量

编辑
另一个旁注:您的类Food应该重写toString方法以使其能够正确打印。否则,System.out.printlnmait将以类似com.my.package的形式结束。Meat@5113de03

这里的代码太多了。请发表一篇文章,这样你的问题就清楚多了。你有一份带有名称约定的沙拉,为什么eat方法会返回与你作为参数给出的相同的值?只要不要抛出异常,你可以简单地让eat方法返回一个布尔值:如果食物正常,则为true,否则为false。作业的目的是演示例外的使用,因此我别无选择,只能这样做。”。。。“捕获异常和不捕获异常”在术语上是矛盾的。我添加了一个try-and-catch块,但它仍然认为这是一个异常,即使食物被称为肉类,肉类应该返回肉类的价值,而不是抛出异常?谢谢,这很有效,帮助很大。我得到的唯一问题是输出是Wolfs eat QuestionEditor。Meat@6d06d69c是的,请看一下我的编辑——这里的最佳实践是在您的类Food中创建一个公共字符串toString方法,该方法只返回食物或其他东西的名称。然后它会说:狼吃牛排,我可以帮忙。
package QuestionEditor;

public class Wolf extends Carnivore
{

Wolf()   
{
    name = "Alex";
    age = 4;

}
    public void makeNoise()  
    {
        noise = "Woof!";
    }
    public String getNoise()  
    {
        return noise;
    }
    public String getName() 
    {
        return name;
    }  
    public int getAge()
    {
        return age;
    }

    public Food eat(Food x) throws Exception
    { 
        if (x instanceof Meat) {
                return x;
            } else {
               throw new Exception("Carnivores only eat meat!");
            }
    }    
}
************Wolf Exception example************
java.lang.Exception: Carnivores only eat meat!
************Wolf Non-Exception example************
    at QuestionEditor.Wolf.eat(Wolf.java:34)
    at QuestionEditor.Main.main(Main.java:15)
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - unreported exception java.lang.Exception; must be caught or declared to be thrown
    at QuestionEditor.Main.main(Main.java:25)
C:\Users\lee-pc\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
public Food eat(Food x) throws Exception

{ 
    if (x instanceof Meat) {
            return x;
        } else {
           throw new Exception("Carnivores only eat meat!");
        }    
}
Food Meat = new Food("Steak");
        System.out.println("Wolves eat " + wolfExample.eat(Meat));
 ************Wolf Exception example************
    java.lang.Exception: Carnivores only eat meat!
    ************Wolf Non-Exception example************
    Wolves eat Meat
Food meat = new Food("Steak");   // no matter what name you give the food, it is still of the class Food
Food meat = new Meat("Steak");    // you create a Meat object and store it in a Food variable (so to speak)
try{     
    System.out.println("Wolves eat " + wolfExample.eat(meat));   // must be surrounded by a try-catch block
}catch(Exception ex){
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);  // better way to log the exception than ex.printStackTrace();
}