如何在Java代码中抛出异常?
我找到了一种打印动物名字的方法。 如果id不是给定的id之一,我现在需要打印出一个错误。 它是如何工作的如何在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
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()
可能只是一个输入错误,或者他想强调的是,他只是在那里调用了这个方法(后面是他真实代码中的正确参数)