异常:
异常就是代表程序出现的问题。
异常分类:
异常分类:Error、Exception。
Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来, 说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的孩子来封装程序出现的问题。
Exception:
Exception:
1.**运行时异常:**RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
2.编译时异常:编译阶段就会出现错误提醒的(不管代码对错,都会提醒)。(如:日期解析异常)
异常的处理方式:
throws处理异常:
throws的作用:抛出异常,如果有异常会抛给调用者( 甩锅)。
main方法throws异常给JVM虚拟机,JVM默认执行:打印异常信息,停止程序。
格式:
修饰符 返回值类型 方法名(参数) throws 异常类名1, 异常类名2 {
}
public static void test01() throws ParseException {
// 可能出现异常的代码
}
package com.ouyang.demo02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class demo01 {
public static void main(String[] args) throws ParseException {
test();
}
public static void test() throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2024-07-27");
System.out.println("date = " + date);
}
}
try…catch处理异常:
try…catch的作用:捕获异常,处理这个异常(程序正常执行,继续执行)。
格式:
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
} catch(异常类名 变量名) {
异常的处理代码;
}
try {
// 可能出现异常的代码
} catch (ParseException e) {
// 处理异常的代码
}
package com.ouyang.demo02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class demo01 {
/*
出现了日期解析异常,我们处理了这个异常!
啦啦啦啦啦!
*/
public static void main(String[] args) {
try {
test();
} catch (ParseException e) {
System.out.println("出现了日期解析异常,我们处理了这个异常!");
}
System.out.println("啦啦啦啦啦!");
}
public static void test() throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2024年07-27");
System.out.println("date = " + date);
}
}
finally代码块作用:
有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的。
在finally代码块中的代码一定会被执行。
catch可以不写。
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
} finally {
代码;
}
重写方法异常处理:
父类方法抛出异常,子类重写该方法,抛出异常要比父类少或者相同。
自定义异常:
自定义异常的步骤:
自定义异常的步骤
①定义类继承Exception/ RuntimeException
②编写构造器
③在需要的地方创建异常
package com.ouyang.demo02;
//1.定义类维承Exception/RuntimeException
public class U18Exception extends RuntimeException{
//2.编写两个构造器调用父类的构造器
public U18Exception() {
}
public U18Exception(String message) {
super(message);
}
}
package com.ouyang.demo02;
import java.util.Scanner;
public class demo02 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String name = sc.next();
int age = sc.nextInt();
try {
register(name,age);
} catch (U18Exception e) {
System.out.println("您的年龄未满18岁,不能注册!");
}
}
public static void register(String name,int age) throws U18Exception {
if(age<18){
//如果年龄小于18不能注册
// 制造异常/创建异常
throw new U18Exception();
}else {
System.out.println("注册成功!");
}
}
}