JAVA 异常与Object类

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

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值