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

自定义异常:

相关推荐
TEC_INO4 分钟前
STM32_11:DMA
java·前端·stm32
韩曙亮5 分钟前
【Web APIs】浏览器本地存储 ② ( window.sessionStorage 本地存储常用 API 简介 | 代码示例 )
开发语言·前端·javascript·localstorage·sessionstorage·web apis·浏览器本地存储
郑州光合科技余经理5 分钟前
私有化B2B订货系统实战:核心模块设计与代码实现
java·大数据·开发语言·后端·架构·前端框架·php
五阿哥永琪7 分钟前
基于 Spring AOP 的角色权限校验实现指南&&注解类型避坑指南
java·后端·spring
chillxiaohan8 分钟前
GO学习踩坑记录
开发语言·学习·golang
czlczl2002092513 分钟前
Quartz基本原理与工程实践
java·spring boot·后端
callJJ16 分钟前
Builder模式详解:从困惑到理解
java·建造者模式·智谱
2301_7644413316 分钟前
python实现罗斯勒吸引子(Rössler Attractor)
开发语言·数据结构·python·算法·信息可视化
大猫和小黄17 分钟前
若依从零到部署:前后端分离和微服务版
java·微服务·云原生·架构·前后端分离·若依
Geoking.17 分钟前
【设计模式】享元模式(Flyweight)详解:用共享对象对抗内存爆炸
java·设计模式·享元模式