异常就是程序出现的问题;
Integer.valueOf("aaaa");
因为写代码时经常会出现问题,Java的设计者们早就为我们写好了很多个异常类,来描述不同场景下的问题。而有些类是有共性的所以就有了异常的继承体系
Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来,说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它
Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的子类来封装程序出现的问题
运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)(非受检)
int[] arr = {1,2,3,4,5};
Sysout.out.println(arr[5]);
产生ArrayIndexOutOfBoundsExcpetion异常
编译时异常:编译阶段就会出现错误提醒的(如:日期解析异常)(受检)
如果企业自己的某种问题,想通过异常来表示,那就需要自己来定义异常类了。
应用:
public class Test01 {
public static void main(String[] args) {
}
public static void saveAge(int age) throws AgeOutOfBroundException {
if(age > 0 && age < 150 ){
info("年龄保存成功");
}else {
throw new AgeOutOfBroundException("年龄超出范围");
}
}
}
class AgeOutOfBroundException extends Exception{
public AgeOutOfBroundException() {
}
public AgeOutOfBroundException(String 年龄超出范围) {
}
}
注意咯,自定义异常可能是编译时异常,也可以是运行时异常
1.如果自定义异常类继承Excpetion,则是编译时异常。
特点:方法中抛出的是编译时异常,必须在方法上使用throws声明,强制调用者处理。
2.如果自定义异常类继承RuntimeException,则运行时异常。
特点:方法中抛出的是运行时异常,不需要在方法上用throws声明。
比如有如下的场景:A调用用B,B调用C;C中有异常产生抛给B,B中有异常产生又抛给A;异常到了A这里就不建议再抛出了,因为最终抛出被JVM处理程序就会异常终止,并且给用户看异常信息,用户也看不懂,体验很不好。
此时比较好的做法就是:1.将异常捕获,将比较友好的信息显示给用户看;2.尝试重新执行,看是是否能修复这个问题。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test02 {
public static void main(String[] args) {
try {
test1();
} catch (ParseException e) {
System.out.println("你想要找的文件不存在");;
} catch (FileNotFoundException e) {
System.out.println("你要解析的时间不正确");
throw new RuntimeException(e);
}
}
public static void test1() throws ParseException, FileNotFoundException {
SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
Date date = dateFormat.parse("2028-02-28 22:18:46");
System.out.println(date);
test2();
}
private static void test2() throws FileNotFoundException {
InputStream inputStream = new FileInputStream("D:/movie.pang");
}
}
第一种处理方式是,在main方法中对异常进行try...catch捕获处理了,给出友好提示。
第二种处理方式是:在main方法中对异常进行捕获,并尝试修复
import java.util.Scanner;
/**
* 目标:掌握异常的处理方式:捕获异常,尝试修复。
*/
public class Test03 {
public static void main(String[] args) {
while (true){
try {
System.out.println(getmoney());
break;
} catch (Exception e) {
System.out.println("你输入有误");//打印错误信息
}
}
}
public static double getmoney(){
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入你的钱数");
double money = scanner.nextDouble();
if(money > 0){
return money;
}else {
System.out.println("你输入的价格不合适");
}
}
}
}