java基础-异常

异常:就是程序出现的问题

异常的作用:

1、用来检查bug的关键参考信息

2、异常可以作为方法内部的特殊返回值,以便通知调用者底层的执行情况

异常的处理方式:

1、JVM默认的处理方式

2、自己处理

格式:

try{

可能出现异常的代码;

}catch (异常类名 变量名){

异常的处理代码;

}

例如:

复制代码
package Day05;

public class ExceptionTest01 {
    //异常:自己处理
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6};
        try{
            System.out.println(arr[10]);
        }catch (Exception e){
            System.out.println("数组索引越界");
        }
        System.out.println("看看谁打印了");
    }

}

捕获异常:

问一:如果try中没有遇到问题,就会把try中的全部代码都执行完毕,不会执行catch中的代码,所以只有当出现了异常,才会执行catch中的代码

问二:如果try中遇到多个问题,会第一个异常发生的时候,就去catch中查找是否有对应的捕获代码,如果有就紧接着执行catch和之后的代码。try中其他的异常代码不会再去判断了,如果第一个try中异常发生了,但是并未在catch中捕获到,那么JVM会自己抛出异常

注意:如果说try里面是不同的异常,你想在catch中用不同的处理方式,那么就要一个try对应一个catch,但是实际开发中,其实程序员也不知道自己try里面是什么异常,所以可能一个try后面跟着很多catch

细节:如果多个异常,存在父子关系,那么父类一定要写在子类的下面

在jdk7之后也可以这样,把两种异常放在一起,用相同的方法来处理

问三:

如果try里面的异常没有被捕获,JVM虚拟机会默认自己把异常打印在控制台,catch里面的代码和后续的代码都不会被执行

问四:

如果try中遇到了异常,直接就会去执行catch中的内容,不会再继续执行try异常后续的代码,如果catch中有捕获到,那就正常执行catch里面的内容,如果没有捕获到,那就JVM帮你默认捕获

---是不是觉的JVM还怪好的

异常的常用方法:

最常用的是printStackTrace()

异常的最后一种处理方式:抛出异常

一般异常抛出后呢,会程序调用处会对异常进行相关的输出,比如

异常小练习:

复制代码
package Day05;

import java.util.Scanner;

public class ExceptionTest03 {
    public static void main(String[] args) {
        //创建键盘输入的对象
        Scanner sc=new Scanner(System.in);
        //创建girlFriend对象
        GirlFriend gf = new GirlFriend();
        while (true) {
            try {
                //接受gf的姓名
                System.out.println("输入姓名");
                String name = sc.nextLine();
                gf.setName(name);
                //接受gf的年龄
                System.out.println("输入年龄");
                String age = sc.nextLine();
                gf.setAge(Integer.parseInt(age));
                break;//如果所有的数据都是正确的,跳出循环
            } catch (NumberFormatException e) {
                System.out.println("年龄的格式有误,请输入正确的年龄格式");
            } catch (RuntimeException e) {
                System.out.println("姓名的长度/年龄的范围有误");
            }
        }
        System.out.println(gf);
    }
}
复制代码
package Day05;

public class GirlFriend {
    private String name;
    private int age;


    public GirlFriend() {
    }

    public GirlFriend(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        if(name.length()<3||name.length()>20){
            throw new RuntimeException();
        }
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        if(age<18||age>40){
            throw new RuntimeException();
        }
        this.age = age;
    }

    public String toString() {
        return "GirlFriend{name = " + name + ", age = " + age + "}";
    }
}

自定义异常:

相关推荐
一定要AK3 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao3 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao4 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
lly2024064 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨4 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9994 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4944 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n4 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨4 小时前
python扫码登录dy
开发语言·python
我是唐青枫4 小时前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net