异常
异常就是代表程序出现的问题
1.认识异常
2.自定义异常
1.DIV_Exception
package cn.hdc.oop7.diy;
public class DIY_Exception {
public static void main(String[] args) {
// 需求:保存一个合法的年龄
saveAge1(170);
try {
saveAge(170);
} catch (IllegalAgeException e) {
throw new RuntimeException(e);
}
}
public static void saveAge1(int age) {
if (age > 0 && age < 150) {
System.out.println("年龄被成功保存" + age);
} else {
// 用一个异常对象来封装这个问题
// throw抛出异常对象至上一层
// throws用在方法上,抛出方法内部的异常
throw new IllegalAgeRuntimeException("年龄不合法");
}
}
public static void saveAge(int age) throws IllegalAgeException {
// throws用在方法上,抛出方法内部的异常
if (age > 0 && age < 150) {
System.out.println("年龄保存成功" + age);
} else {
throw new IllegalAgeException("年龄不合法");
}
}
}
2.IllegalAgeException
package cn.hdc.oop7.diy;
//必须让这个类继承自Exception,才能成为一个编译时异常类。
public class IllegalAgeException extends Exception {
public IllegalAgeException() {
}
public IllegalAgeException(String message) {
super(message);
}
}
3.IllegalAgeRuntimeException
package cn.hdc.oop7.diy;
//必须让这个类继承自RuntimeException,才能成为一个运行时异常类。
public class IllegalAgeRuntimeException extends RuntimeException {
public IllegalAgeRuntimeException() {
}
public IllegalAgeRuntimeException(String message) {
super(message);
}
}
3.异常的处理
1.记录异常并响应合适的信息给用户
package cn.hdc.oop7.solve;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* 异常的处理
*/
public class Exception1 {
public static void main(String[] args) {
try {
test1();
} catch (FileNotFoundException e) {
System.out.println("文件未找到");
throw new RuntimeException(e);
} catch (ParseException e) {
System.out.println("解析异常");
throw new RuntimeException(e);
}
}
public static void test1() throws ParseException, FileNotFoundException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.parse("2020-11-06 11:32:22");
test2();
}
private static void test2() throws FileNotFoundException {
InputStream is = new FileInputStream("D:/MEINv.PNG");
}
}
优化
Exception是所有异常类的祖宗类,所以统一抛出Exception
package cn.hdc.oop7.solve;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* 异常的处理
*/
public class Exception1_1 {
public static void main(String[] args) {
try {
test1();
} catch (Exception e) {
System.out.println("您当前操作有问题");
e.printStackTrace();
}
}
public static void test1() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.parse("2020-11-06 11:32:22");
test2();
}
private static void test2() throws Exception {
InputStream is = new FileInputStream("D:/MEINv.PNG");
}
}
2.尝试修复
package cn.hdc.oop7.solve;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
/**
* 异常的处理
*/
public class Exception2 {
public static void main(String[] args) {
//需求:调用一个方法,让用户输入一个合适的价格返回为止
//尝试修复
while (true) {
try {
//捕获原因,用户输入字符串等非法数据会终止程序
System.out.println(getMoney());
break;
} catch (Exception e) {
System.out.println("请您输入合法的价格:");
}
}
}
private static double getMoney() {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入一个合适的价格:");
double a = sc.nextDouble();
if (a >= 0) {
return a;
} else {
System.out.println("您输入的价格不合适");
}
}
}
}