视频链接:黑马Java异常处理
一,异常简介
误区:不是让我们以后不出现异常,而是程序出了异常之后,该如何处理
二,异常的结构
三,异常举例
public class ExceptionDemo {
public static void main(String[] args) {
//编译时异常(在编译阶段需要手动处理,否则代码报错)
String time="2023年9月23日";
SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy年mm月dd日");
Date date=simpleDateFormat.parse(time);
System.out.println(date);
//运行时异常(在编译阶段不需要处理,是代码运行时出现的异常)
int[] arr={1,2,3,4,5};
System.out.println(arr[10]);
}
}
四,异常的作用
五,异常的处理
1,JVM默认的处理方式
- 把异常的名称,异常的原因及异常出现的位置等信息输出在了控制台
- 程序停止执行,下面的代码就不会再执行了
2,自己处理(捕获异常)
- 格式:
- 目的:当代码出现异常时,可以让程序继续往下执行
- 举例:
- 注意:
1,如果try中没有遇到问题,怎么执行?
会把try里面的所有代码全部执行完毕,不会执行catch里面的代码
2,如果try中遇到多个问题,怎么执行?
会写多个catch与之对应,父类异常需要写在下面
3,如果try中遇到的问题没有被捕获,怎么执行?
相当于try......catch白写了,当前异常会交给虚拟机处理
4,如果try中遇到了问题,try下面的其他代码还会执行吗?
不会执行了,try中遇到问题,直接跳转到对应的catch,如果没有对应的catch与之匹配,则交给虚拟机处理
3,抛出处理
六,异常的常用方法
常用的是printStackTrace方法,功能包含了其他两种方法
七,自定义异常
当不知道抛出的异常是什么类型的时候,可以自定义异常类型
public class NameFormatException extends RuntimeException{
//NameForm:当前异常的名字,表示命名格式化问题
//Exception:表示当前类是一个异常类
//运行时:RuntimeException 核心 就表示由于参数错误而导致的问题
//编译时:Exception 核心 提醒程序员检查本地信息
public NameFormatException(){
}
public NameFormatException(String message){
super(message);
}
}
八,综合练习
public class GirlFriend {
private String name;
private int age;
public GirlFriend() {
}
public void setName(String name) {
int len=name.length();
if(len<3||len>10){
throw new RuntimeException();
}
this.name = name;
}
public void setAge(int age) {
if(age<18||age>40){
throw new RuntimeException();
}
this.age = age;
}
@Override
public String toString() {
return "GirlFriend{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class ExceptionDemo {
public static void main(String[] args) {
//1,创建键盘输入的对象
Scanner scanner=new Scanner(System.in);
//2,创建女朋友对象
GirlFriend gf=new GirlFriend();
while (true) {
try {
//3,接收女朋友的姓名
System.out.println("请输入女朋友名字:");
String name=scanner.nextLine();
gf.setName(name);
//4,接收女朋友的年龄
System.out.println("请输入女朋友年龄:");
int age= Integer.parseInt(scanner.nextLine());
gf.setAge(age);
//如果所有的数据都是正确的,那么跳出循环
break;
} catch (NumberFormatException e) {
System.out.println("年龄的格式有误!重新输入");
}catch (RuntimeException e) {
System.out.println("姓名的长度 或 年龄的范围有误!重新输入");
}
}
//5,打印信息
System.out.println(gf.toString());
}
}