实现:当输入的整数在18~80之间时,程序正常执行,否则,使用throw抛出异常对象,以下有两种处理方案:
方案一:通过try-catch包含throw语句——自己抛自己处理。
package java_exception;
import java.util.Scanner;
public class TryDemoFour {
public static void main(String[] args) {
testAge(); //同类的静态方法直接调用
}
/**
* throw抛出异常对象的处理方案:
* 1.通过try-catch包含throw语句——自己抛自己处理
*/
//描述酒店的入住规则:限制年龄,18岁以下、80岁以上的住客必须由亲友陪同
public static void testAge(){
try {
System.out.println("请输入年龄:");
Scanner input = new Scanner(System.in);
int age = input.nextInt();
if(age<18 || age>80){
throw new Exception("18岁以下、80岁以上的住客必须由亲友陪同");
} else {
System.out.println("欢迎入住本酒店");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
方案二:在方法声明处添加throws,在调用方法处继续使用throws或使用try-catch都可以。
package java_exception;
import java.util.Scanner;
public class TryDemoFour {
// public static void main(String[] args) throws Exception {
// testAge(); //同类的静态方法直接调用
// }
public static void main(String[] args) {
try {
testAge();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* throw抛出异常对象的处理方案:
* 1.通过try-catch包含throw语句——自己抛自己处理
* 2.通过throws在方法声明处抛出异常类型(在testAge()处添加throws)——谁调用谁处理——调用者可以自己处理,也可以继续上抛(在main处添加throws)
*/
public static void testAge() throws Exception{
System.out.println("请输入年龄:");
Scanner input = new Scanner(System.in);
int age = input.nextInt();
if(age<18 || age>80){
throw new Exception("18岁以下、80岁以上的住客必须由亲友陪同");
} else {
System.out.println("欢迎入住本酒店");
}
}
}
输出:
请输入年龄:
25
欢迎入住本酒店
请输入年龄:
14
java.lang.Exception: 18岁以下、80岁以上的住客必须由亲友陪同
at java_exception.TryDemoFour.testAge(TryDemoFour.java:43)
at java_exception.TryDemoFour.main(TryDemoFour.java:11)
请输入年龄:
89
java.lang.Exception: 18岁以下、80岁以上的住客必须由亲友陪同
at java_exception.TryDemoFour.testAge(TryDemoFour.java:43)
at java_exception.TryDemoFour.main(TryDemoFour.java:11)
请输入年龄:
a
java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at java_exception.TryDemoFour.testAge(TryDemoFour.java:41)
at java_exception.TryDemoFour.main(TryDemoFour.java:11)
也可以抛出与throw对象相同的类型或其父类(Throwable),同时catch后也要改为Throwable:
package java_exception;
import java.util.Scanner;
public class TryDemoFour {
public static void main(String[] args) {
try {
testAge();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* throw抛出异常对象的处理方案:
* 1.通过try-catch包含throw语句——自己抛自己处理
* 2.通过throws在方法声明处抛出异常类型(在testAge()处添加throws)——谁调用谁处理——调用者可以自己处理,也可以继续上抛(在main处添加throws)
* 也可以抛出与throw对象相同的类型或其父类(Throwable)
*/
//描述酒店的入住规则:限制年龄,18岁以下、80岁以上的住客必须由亲友陪同
public static void testAge() throws Throwable{
System.out.println("请输入年龄:");
Scanner input = new Scanner(System.in);
int age = input.nextInt();
if(age<18 || age>80){
throw new Exception("18岁以下、80岁以上的住客必须由亲友陪同");
} else {
System.out.println("欢迎入住本酒店");
}
}
}