如何在Java代码中抛出异常?

如何在Java代码中抛出异常?,java,Java,我找到了一种打印动物名字的方法。 如果id不是给定的id之一,我现在需要打印出一个错误。 它是如何工作的 class Methode { static final int DEER = 0; static final int BIRD = 1; static final int COW = 2; static final int PIG = 3; public static void main(String[] args) { p

我找到了一种打印动物名字的方法。 如果id不是给定的id之一,我现在需要打印出一个错误。 它是如何工作的

class Methode {
    static final int DEER = 0;
    static final int BIRD = 1;
    static final int COW = 2;
    static final int PIG = 3;

    public static void main(String[] args) {
            printAnimal();
    }

    public static void printAnimal (int id) {
        if (id == DEER) {
            System.out.println("Deer");
        }
        else if (id == BIRD) {
            System.out.println("Bird");
        }
        else if (id == COW) {
                System.out.println("COW");
        }
        else if (id == PIG) {
            System.out.println("Pig");
        }
    }
}

如果您所说的错误是指
异常
(否则我不知道您为什么不像在
else If
分支中那样简单地打印一条“错误”消息),那么您需要创建一个扩展
异常
的自定义类,并将其抛出到新的
else
分支中。以下是一个例子:

例外情况:

public class NoSuchAnimalException extends Exception {
 public NoSuchAnimalException(String message) {
     super(message);
 }
}
public static void printAnimal(int id) throws NoSuchAnimalException {
    if (id == DEER) {
        System.out.println("Deer");
    } else if (id == BIRD) {
        System.out.println("Bird");
    } else if (id == COW) {
        System.out.println("COW");
    } else if (id == PIG) {
        System.out.println("Pig");
    } else {
        throw new NoSuchAnimalException("No such animal");
    }
}

public static void main(String[] args) {
    try {
        printAnimal(6);
    } catch (NoSuchAnimalException e) {
        System.out.println(e.getMessage());
    }
}
测试:

public class NoSuchAnimalException extends Exception {
 public NoSuchAnimalException(String message) {
     super(message);
 }
}
public static void printAnimal(int id) throws NoSuchAnimalException {
    if (id == DEER) {
        System.out.println("Deer");
    } else if (id == BIRD) {
        System.out.println("Bird");
    } else if (id == COW) {
        System.out.println("COW");
    } else if (id == PIG) {
        System.out.println("Pig");
    } else {
        throw new NoSuchAnimalException("No such animal");
    }
}

public static void main(String[] args) {
    try {
        printAnimal(6);
    } catch (NoSuchAnimalException e) {
        System.out.println(e.getMessage());
    }
}

异常将在最后一个
else
(方法调用中提供的id不符合前面的要求)中抛出,并将在
公共静态void main()
方法中处理。

首先,您在不带参数的情况下调用
printAnimal()
方法。那不好

其次,Java中有两种异常,检查的和未检查的。你需要考虑你和谁在一起工作。 选中表示您的函数必须由以下人员声明:

methodName()引发一些异常{
…}

因此,调用方必须捕获异常

未选中意味着您可以在不执行此操作的情况下抛出异常,但其他程序员不会意识到(相反,也不会被迫处理)抛出的任何异常

应该创建异常,就像类一样,继承异常的基本类型

检查异常

class someException extends exception{...}
class someException extends RuntimeException{...}
throw new Exception ('message');
throw new RuntimeException ('message');
未检查异常

class someException extends exception{...}
class someException extends RuntimeException{...}
throw new Exception ('message');
throw new RuntimeException ('message');
对于非自定义异常,将按如下方式抛出:

选中的异常

class someException extends exception{...}
class someException extends RuntimeException{...}
throw new Exception ('message');
throw new RuntimeException ('message');
未检查的异常

class someException extends exception{...}
class someException extends RuntimeException{...}
throw new Exception ('message');
throw new RuntimeException ('message');
请仔细阅读。 异常是OOP的重要组成部分


(这是写在电话上的,因此可能会有一些打字错误等。)

应使用枚举并切换此任务:

public class Methode {

    public enum Animal {
        DEER (0),
        BIRD (1),
        COW (2),
        PIG (3);

        private final int value;
        private static Map valueMap = new HashMap<>();

        Animal(int value)
        {
            this.value = value;
        }

        static {
            for (Animal enumVal : Animal.values()) {
                valueMap.put(enumVal.value, enumVal);
            }
        }

        public static Animal valueOf(int animalId) {
            return (Animal) valueMap.get(animalId);
        }

        public int getValue()
        {
            return value;
        }
    }

    public static void main(String[] args) throws Exception {
        printAnimal(1);
    }

    public static void printAnimal (int id) throws Exception {
        Animal animal = Animal.valueOf(id);

        if(animal == null) {
            throw new Exception("Animal not found"); //better use own exception
        } else {
            switch (animal) {
                case DEER:
                    System.out.println("Deer");
                    break;
                case BIRD:
                    System.out.println("Bird");
                    break;
                case COW:
                    System.out.println("COW");
                    break;
                case PIG:
                    System.out.println("Pig");
                    break;
                default:
                    System.out.println(animal.name());
            }
        }
    }

}
公共类方法{
公畜{
鹿(0),
鸟(1),
牛(2),,
猪(3);
私有最终整数值;
私有静态映射valueMap=newhashmap();
动物(智力值)
{
这个值=值;
}
静止的{
for(动物枚举值:Animal.values()){
valueMap.put(enumVal.value,enumVal);
}
}
公共静态动物价值(国际动物){
return(动物)valueMap.get(animalId);
}
public int getValue()
{
返回值;
}
}
公共静态void main(字符串[]args)引发异常{
版画动物(1);
}
公共静态void printAnimal(int id)引发异常{
动物=动物。值(id);
如果(动物==null){
抛出新异常(“未找到动物”);//最好使用自己的异常
}否则{
开关(动物){
案例鹿:
System.out.println(“Deer”);
打破
案例鸟:
System.out.println(“Bird”);
打破
案例牛:
系统输出打印项次(“COW”);
打破
病例猪:
系统输出打印号(“Pig”);
打破
违约:
System.out.println(animal.name());
}
}
}
}

只要添加一个else子句:
else{System.out.println(“Error”);}
else{throw new IllegalArgumentException();}
如果需要异常。
printAnimal()这将抛出一个错误。您应该传入一个整数。第二,什么样的错误?您想抛出一个错误还是打印一个错误。对于后者“您可以只打印错误”@papaya除了不会抛出“错误”(不管是什么)之外,还会抛出异常。捕获已知的异常并用有意义的信息和消息重新抛出自定义异常(这是理想的做法)。我认为
printAnimal()
只是一个小错误。@SebastianI。我指的是这样一个事实,在这个示例中,调用时没有参数,这将导致编译器错误是的,我知道,但我的意思是,他的示例中的
printAnimal()
可能只是一个输入错误,或者他想强调的是,他只是在那里调用了这个方法(后面是他真实代码中的正确参数)