处理程序运行阶段的错误,不是编译阶段。
image.png
异常处理分类
- 抛出异常
-
捕获异常
image.png
package com.alan.test;
import java.util.Scanner;
public class TryDemoOne {
public static void main(String[] args) {
/*
// 定义两个整数,输出两数之商
int one = 12;
int two = 2;
22
System.out.println("one和two的商:"+(one/two));
*/
// 定义两个整数,接收用户的键盘输入,之后输出两数之商
Scanner sc = new Scanner(System.in);
System.out.println("=====运算开始=====");
try {
System.out.print("请输入第一个整数one:");
int one = sc.nextInt();
System.out.print("请输入第二个整数one:");
int two = sc.nextInt();
System.out.println("one和two的商:"+(one/two));
//catch块捕获异常后,程序会继续向下执行。如果不捕获异常,接下来的程序都无法执行
}catch(Exception e) {
System.out.println("程序出错了~~");
e.printStackTrace();
}finally {
System.out.println("=====运算结束=====");
}
}
}
throw与throws
package com.alan.test;
import java.util.Scanner;
public class TryDemoThree {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
testAge2();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//描述酒店入住规则:年龄小于18或者大于80,必须有亲友陪同
/*
* throw抛出异常对象的处理方案
* 1、通过try catch 包含throw语句,自己抛出异常,自己捕获处理。
* 2、通过throws在方法声明出抛出异常类型--谁调用谁处理--调用者可以自己处理,也可以继续上抛。
* */
public static void testAge() {
try {
System.out.println("请输入年龄:");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
if(age<18 || age>80) {
throw new Exception("年龄小于18或者大于80,必须有亲友陪同");
}else {
System.out.println("欢迎光临本酒店~~~");
}
}catch (Exception e) {
e.printStackTrace();
}
}
public static void testAge2() throws Exception {
System.out.println("请输入年龄:");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
if(age<18 || age>80) {
throw new Exception("年龄小于18或者大于80,必须有亲友陪同");
}else {
System.out.println("欢迎光临本酒店~~~");
}
}
}
throw
package com.alan.test;
import java.util.Scanner;
public class TryDemoThree {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
testAge2();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//描述酒店入住规则:年龄小于18或者大于80,必须有亲友陪同
/*
* throw抛出异常对象的处理方案
* 1、通过try catch 包含throw语句,自己抛出异常,自己捕获处理。
* 2、通过throws在方法声明出抛出异常类型--谁调用谁处理--调用者可以自己处理,也可以继续上抛。
* */
public static void testAge() {
try {
System.out.println("请输入年龄:");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
if(age<18 || age>80) {
throw new Exception("年龄小于18或者大于80,必须有亲友陪同");
}else {
System.out.println("欢迎光临本酒店~~~");
}
}catch (Exception e) {
e.printStackTrace();
}
}
public static void testAge2() throws Exception {
System.out.println("请输入年龄:");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
if(age<18 || age>80) {
throw new Exception("年龄小于18或者大于80,必须有亲友陪同");
}else {
System.out.println("欢迎光临本酒店~~~");
}
}
}
自定义异常
package com.alan.test;
public class HotelAgeException extends Exception {
public HotelAgeException() {
super("年龄小于18或者大于80,必须有亲友陪同");
}
}
package com.alan.test;
import java.util.Scanner;
public class TryDemoThree {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
testAge2();
} catch (HotelAgeException e) {
System.out.println(e.getMessage());
System.out.println("酒店前台工作人员不允许办理入住登记");
}
}
//描述酒店入住规则:年龄小于18或者大于80,必须有亲友陪同
/*
* throw抛出异常对象的处理方案
* 1、通过try catch 包含throw语句,自己抛出异常,自己捕获处理。
* 2、通过throws在方法声明出抛出异常类型--谁调用谁处理--调用者可以自己处理,也可以继续上抛。
* */
public static void testAge() {
try {
System.out.println("请输入年龄:");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
if(age<18 || age>80) {
throw new Exception("年龄小于18或者大于80,必须有亲友陪同");
}else {
System.out.println("欢迎光临本酒店~~~");
}
}catch (Exception e) {
e.printStackTrace();
}
}
public static void testAge2() throws HotelAgeException {
System.out.println("请输入年龄:");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
if(age<18 || age>80) {
throw new HotelAgeException();
}else {
System.out.println("欢迎光临本酒店~~~");
}
}
}
网友评论