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 + "}";
    }
}

自定义异常:

相关推荐
千里马-horse2 小时前
Napi::Array
开发语言·array·napi
kkkkkkkkl242 小时前
Spring Boot 中基于线程池的订单创建并行化实践
java·spring boot·juc
lly2024062 小时前
Julia 的复数和有理数
开发语言
春日见2 小时前
如何提升手眼标定精度?
linux·运维·开发语言·数码相机·matlab
廋到被风吹走2 小时前
【Spring】ThreadLocal详解 线程隔离的魔法与陷阱
java·spring·wpf
星辰离彬2 小时前
2025 IDEA运行报错:运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。
java·后端·intellij-idea·jar
古城小栈2 小时前
Java 响应式编程:Spring WebFlux+Reactor 实战
java·开发语言·spring
攻心的子乐2 小时前
sentinel使用指南 限流/熔断 微服务 ruoyi-cloud使用了
java·开发语言
zsyy@2 小时前
Maven本地仓库有jar还会向远程仓库下载依赖的问题
java·服务器·maven