第二周:java异常和常用类 容器

这篇博客详细介绍了Java中的异常处理,包括异常的定义、继承关系、异常与错误的区别,以及如何通过try-catch和throws进行异常处理。此外,还讲解了Java常用类,如Object、String、StringBuffer、StringBuilder、Scanner、Math、Random、BigInteger和BigDecimal的使用。最后,文章概述了Java的容器,如List、Queue、Set和Map的基本概念和操作。
摘要由CSDN通过智能技术生成

一、java异常类

1.定义

异常就是在运行时产生的问题。通常用Exception描述。

在java中,把异常封装成了一个类,当出现问题时,就会创建异常类对象并抛出异常相关的信息(如详细信息,名称以及异常所处的位置)。

2.异常的继承关系

![Throwable类是所有错误跟异常类的超类(祖宗类)。

Exception异常类及其子类都是继承自Throwable类,用来表示java中可能出现的异常,并且合理的处理这些异常。

RuntimeException类是运行异常类,继承自Exception类,它以及它的子类只能在运行过程中存在,当出现时,只能修改源代码,此异常无法处理。

Error类是与Exception的平级的类,用来表示Java中存在的严重错误,只能通过修改代码来解决问题。](https://img-blog.csdnimg.cn/abdf8feed2e94360bbe0448f9c0666ae.png#pic_center)
继承体系的总结
Throwable: 它是所有错误与异常的超类(祖宗类)
|- Error 错误
|- Exception 编译期异常,进行编译JAVA程序时出现的问题
|- RuntimeException 运行期异常, JAVA程序运行过程中出现的问题

3.异常与错误的区别

异常是指程序在编译或者运行时出现的某种异常问题,我们可以对异常进行某种处理,如果不处理异常的话,程序将会停止运行。

错误是指程序在运行时出现的严重问题,无法处理,程序将会停止运行,Error通常都是系统级别的问题,都是虚拟机jvm所在系统发生的,只能通过修改源代码解决问题。

4.异常产生的过程

1.运行或编译时产生异常

2.创建异常类的对象

3.声明异常类

4.将异常类对象传给调用者(main()方法)处理

5.调用者无法处理,再将异常类对象传给jvm虚拟机

6.jvm虚拟机将异常类的信息(名称、详细信息、异常所处的位置)打印在屏幕上,并且停止程序的运行

5.java异常抛出

①使用try-catch块处理已检查的异常

语法格式:
try {
逻辑代码块1;
} catch(ExceptionType e) {
处理代码块1;
}

如果 try 语句块中发生异常,那么一个相应的异常对象就会被拋出,然后 catch 语句就会依据所拋出异常对象的类型进行捕获,并处理。处理之后,程序会跳过 try 语句块中剩余的语句,转到 catch 语句块后面的第一条语句开始执行。
如果 try 语句块中没有异常发生,那么 try 块正常结束,后面的 catch 语句块被跳过,程序将从 catch 语句块后的第一条语句开始执行。

package Demo02;
import java.util.Scanner;
    public class Test {
   
        public static void main(String[] args) {
   
            Scanner scanner = new Scanner(System.in);
            System.out.println("---------学生信息录入---------------");
            String name = ""; // 获取学生姓名
            int age = 0; // 获取学生年龄
            String sex = ""; // 获取学生性别
            try {
   
                System.out.println("请输入学生姓名:");
                name = scanner.next();
                System.out.println("请输入学生年龄:");
                age = scanner.nextInt();
                System.out.println("请输入学生性别:");
                sex = scanner.next();
            } catch (Exception e) {
   
                e.printStackTrace();
                System.out.println("输入有误!");
            }
            System.out.println("姓名:" + name);
            System.out.println("年龄:" + age);
        }
    }

在这里插入图片描述
try:该代码块中编写可能产生异常的代码。
catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。
finally:有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。
捕获异常的组合方式:

  1. try catch finally组合:检测异常,并传递给catch处理,并在finally中进行资源释放。
  2. try catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对异常进行捕获处理。
  3. 一个try 多个catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。
    注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
  4. try finally 组合: 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。

②在方法/构造函数声明中用throws子句指定。

a.throw出现在方法体中,用于抛出异常。当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw。
基本语法:throw ExceptionObject;
其中,ExceptionObject 必须是 Throwable 类或其子类的对象。如果是自定义异常类,也必须是 Throwable 的直接或间接子类。
当 throw 语句执行时,它后面的语句将不执行,此时程序转向调用者程序,寻找与之相匹配的 catch 语句,执行相应的异常处理程序。如果没有找到相匹配的 catch 语句,则再转向上一层的调用程序。这样逐层向上,直到最外层的异常处理程序终止程序并打印出调用栈情况。throw 关键字不会单独使用,它的使用完全符合异常的处理机制,但是,一般来讲用户都在避免异常的产生,所以不会手工抛出一个新的异常类的实例,而往往会抛出程序中已经产生的异常类的实例。
b.throws 声明异常
当一个方法产生一个它不处理的异常时,那么就需要在该方法的头部声明这个异常,以便将该异常传递到方法的外部进行处理。使用 throws 声明的方法表示此方法不处理异常。throws 具体格式如下:
returnType method_name(paramList) throws Exception 1,Exception2,…{…}

package Demo02;
import java.util.Scanner;
public class Test {
   
    public boolean validateUserName(String username) {
   
        boolean con = false;
        if (username.length() > 8) {
   
            // 判断用户名长度是否大于8位
            for (int i = 0; i < username.length(); i++) {
   
                char ch = username.charAt(i); // 获取每一位字符
                if ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
   
                    con = true;
                } else {
   
                    con = false;
                    throw new IllegalArgumentException("用户名只能由字母和数字组成!");
                }
            }
        } else {
   
            throw new IllegalArgumentException("用户名长度必须大于 8 位!");
        }
        return con;
    }
    public static void main(String[] args) {
   
        Test te = new Test();
        Scanner input = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = input.next();
        try {
   
            boolean con = te.validateUserName(username);
            if (con) {
   
                System.out.println("用户名输入正确!");
            }
        } catch 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值