JAVA异常
java异常是指代码出现了不正常的现象
1.java异常分类
父类Throwable
Throwable
的两个子类Error
(错误)和Exception
(异常)
Exception
(异常)分为编译时期异常和运行时期异常
编译时期异常:
语法没有错误,调用某个方法直接爆红(因为被调用的方法底层抛了一个编译时期异常)
Exception以及子类(除了RuntimeException)
运行时期异常:
语法没有错误,运行时报错
RuntimeException以及子类
2.异常默认处理方法
往上抛给jvm,答应异常信息,终止程序
3.异常处理★★★★★
throws
1.格式:在方法参数和方法体之间位置上写throws 异常
2.意义:处理异常,将异常往上抛
public class Demo04Exception {
public static void main(String[] args)throws FileNotFoundException {
String s = "a.txt1";
add(s);//添加功能
//add出现错误,下面的所有步骤都不会执行
delete();//删除功能
update();//修改功能
find();//查询功能
}
private static void add(String s)throws FileNotFoundException {
if (!s.endsWith(".txt")) {
//如果文件的末尾不是.txt 故意创建异常
throw new FileNotFoundException("文件找不到");
}
System.out.println("我要执行了");
}
private static void find() {
System.out.println("查询功能");
}
private static void update() {
System.out.println("修改功能");
}
private static void delete() {
System.out.println("删除功能");
}
}
throws多个异常
1.格式:throws 异常1,异常2
2.注意:
如果throws的多个异常之间有子父类继承关系,我们可以直接throws父类异常
如果不知道多个异常之间是否有子父类继承关系,我们可以直接throws Exception
try…catch
try{
可能出现异常的代码块
}catch(异常 对象名){
处理异常的代码->将来开发会将异常信息保存到日志文件中
}
public class Demo06Exception {
public static void main(String[] args){
String s = "a.txt1";
try{
add(s);//添加功能
}catch (FileNotFoundException e){
System.out.println(e);
}
delete();//删除功能
update();//修改功能
find();//查询功能
}
private static void add(String s)throws FileNotFoundException {
if (!s.endsWith(".txt")) {
//故意创建异常
throw new FileNotFoundException("文件找不到");
}
System.out.println("我要执行了");
}
private static void find() {
System.out.println("查询功能");
}
private static void update() {
System.out.println("修改功能");
}
private static void delete() {
System.out.println("删除功能");
}
}
多个catch
1.格式:
try{
可能出现异常的代码
}catch(异常 对象名){
处理异常的代码-> 将来开发会将异常信息保存到日志文件中
}catch(异常 对象名){
处理异常的代码-> 将来开发会将异常信息保存到日志文件中
}catch(异常 对象名){
处理异常的代码-> 将来开发会将异常信息保存到日志文件中
}catch(异常 对象名){
处理异常的代码-> 将来开发会将异常信息保存到日志文件中
}...
2.注意:
如果catch的多个异常之间有子父类继承关系,我们可以直接catch父类异常
如果不知道多个异常之间是否有子父类继承关系,我们也可以直接catch Exception
finally
finally:不管有没有异常都会执行的代码块,一般配合try…catch使用
使用场景:作为关闭资源使用,关闭GC回收不了的对象
public class Test {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("day13_exception_object\\1.txt");
fw.write("哈哈哈");//假如这里写失败或者写成功了
} catch (IOException e) {
throw new RuntimeException(e);
}finally {
if (fw!=null){
try {
fw.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
}
自定义异常
step1:定义一个类
该类继承Exception就是编译时期异常
继承RuntimeException就是运行时期异常
step2:提供构造方法,用来设置异常信息
1.需求:键盘录入一个用户名,实现登录功能,如果登录失败,抛出LoginUserException
public class LoginUserException extends Exception{
public LoginUserException() {//无参构造
}
public LoginUserException(String message) {//有参构造
super(message);
}
}
public class Demo11Exception {
public static void main(String[] args) throws LoginUserException {
//1.定义一个用户名,代表已经注册的用户
String username = "root";
//2.创建Scanner对象,录入用户名
Scanner sc = new Scanner(System.in);
System.out.println("请您输入要登录的用户名:");
String name = sc.next();
//3.判断用户名是否和已经存在的用户名一致
if (name.equals(username)){
System.out.println("登录成功了");
}else{//不一致调用自定义的构造方法
throw new LoginUserException("登录失败了,用户名或者密码有问题");
}
}
}
Object类
概述:所有类的根类,所有类都会直接或者间接继承Object
方法:★★★★★
toString-没有重写toString,直接输出对象名会默认调用Object中的toString,会输出地址值,重写了,默认调用重写的toString,输出对象的内容
equals-没有重写equals方法,比较的是对象的地址值,重写了比较的是对象的内容
经典接口
Comparable
Comparator