异常体系及自定义路径

news2024/11/28 21:40:32

异常( Exception)

定义:

        异常代表程序出现的问题

        

        图来自黑马程序员

  分类:

  1. 运行时异常:RuntimeException以及其子类,编译阶段不会出现异常提醒,运行时出现的异常(如数组越界异常)
  2. 编译时异常:编译阶段就会出现异常提醒的(如日志解析异常),直接继承于Exception

                                图来自黑马程序员网课 

作用:

  1. 用来查询bug的关键参考信息
  2. 可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

异常处理方式:

1.JVM默认的处理方式

        把异常的名称,异常原因及异常出现的位置等信息输出在控制台

        程序停止执行,下面的代码不会执行

        

package com.lazyGirl.exceptiondemo;

public class Demo1 {
    public static void main(String[] args) {
        System.out.println("hhhhhhhhhhhhhhhhhhh");
        System.out.println(2 / 0);
        System.out.println("gggg");
    }
}

        输出:

      2. 捕获异常

                图来自黑马程序员

package com.lazyGirl.exceptiondemo;

public class Demo2 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};



        try {
            System.out.println(arr[5]);
        }catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("索引越界");;
        }
        System.out.println("看看我执行了吗");
    }
}

        输出:

 

         若try语句出现异常,程序就会在这里创建一个异常对象,拿着这个对象到catch小括号中对比,看括号中的变量是否可以接受这个对象,如果能被接受,就表示该异常能被捕获,执行catch里对应的代码,当try。。catch执行完毕,接着执行下面其他代码

问题一:如果try中没有遇到问题,怎么执行?

        会把try里面的代码全部执行完毕,不会执行catch里面的代码,因此,当出现异常才会执行catch里面的语句

package com.lazyGirl.exceptiondemo;

public class Demo3 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};



        try {
            System.out.println(arr[0]);
        }catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("索引越界");;
        }
        System.out.println("看看我执行了吗");
    }
}

        输出:

        

问题二:如果try中遇到多个问题,怎么执行?

        会写多个catch与之对应,若捕获多个异常,这些异常中如果存在父子关系的话,那么父类一定要写在下面

package com.lazyGirl.exceptiondemo;

public class Demo3 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        try {

            System.out.println(arr[5]);
            System.out.println(2 / 3);

        }catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("索引越界");;
        }catch (ArithmeticException e) {
            System.out.println("除0异常");
        }
        System.out.println("看看我执行了吗");
    }
}

        输出: 

        

问题三: 若try中遇到的问题没有被捕获,怎么执行?

         JVM默认处理异常方式

问题四: 若try中遇到的问题没有被捕获,怎么执行?

        若try中遇到了异常,直接跳转到对应的catch当中,执行catch里面的语句体,若没有与之匹配的catch,则会交给虚拟机处理

        Throwable的成员方法:

        

                图来自黑马程序员网课

        

package com.lazyGirl.exceptiondemo;

public class Demo4 {
    public static void main(String[] args) {


        int[] arr = {1,2,3,4,5};

        try {
            System.out.println(arr[5]);
        }catch (ArrayIndexOutOfBoundsException e){
            String message = e.getMessage();
            System.out.println(message);

            String str = e.toString();
            System.out.println(str);

            e.printStackTrace();

        }

        System.out.println("看看我执行了吗");
    }
}

        printStackTrace()在底层是利用System.err.println进行输出,把异常的错误信息以红色字体输出在控制台 ,仅打印信息,不会停止程序运行

        输出:

         

  3. 抛出异常 

         throws 与throw

        

                图来自黑马程序员 

                throw:

                

package com.lazyGirl.exceptiondemo;

public class Demo5 {
    public static void main(String[] args) {

        int[] a = null;
        System.out.println(getMax(a));

    }

    public static int getMax(int[] arr) {
        if(arr == null || arr.length == 0){
            throw new NullPointerException();
        }
        System.out.println("看看我执行了吗");
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }
}

        输出:

         

throws: 

        

    public static int getMax(int[] arr) throws NullPointerException ,ArrayIndexOutOfBoundsException{
        if(arr == null || arr.length == 0){
            throw new NullPointerException();
        }
        System.out.println("看看我执行了吗");
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }

自定义异常 

步骤:

  1. 定义异常类
  2. 写继承关系
  3. 空参构造
  4. 带参构造
package com.lazyGirl.exceptiondemo;

public class NameFormatException extends RuntimeException {
    public NameFormatException() {}
    public NameFormatException(String message) {
        super(message);
    }
}
package com.lazyGirl.exceptiondemo;

public class BoyFriend {

    private String name;
    private int age;

    public BoyFriend() {
    }

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

    public String getName() {
        int len = name.length();
        if (len < 3 || len > 10){
            throw new NameFormatException(name + "格式长度有误");
        }
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age < 18 || age > 40) {
            throw new AgeOutOfBoundsException(age + "年龄有误");
        }
        this.age = age;
    }

    @Override
    public String toString() {
        return "BoyFriend{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package com.lazyGirl.exceptiondemo;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {


        BoyFriend bf = new BoyFriend();
        Scanner sc = new Scanner(System.in);
        while (true){

            try {
                System.out.println("男朋友的名字");
                String name = sc.nextLine();
                bf.setName(name);
                System.out.println("男朋友年龄");
                String ageStr= sc.nextLine();
                bf.setAge(Integer.parseInt(ageStr));
                break;
            }catch (NameFormatException e){
               e.printStackTrace();
            }catch (AgeOutOfBoundsException e){
                e.printStackTrace();
            }
        }
        System.out.println(bf);
    }
}

        输出: 

 

 

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1815813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 11 之 参数传递

c11参数传递.cpp #include <iostream> using namespace std;void swap1(int a, int b) {int temp a;a b;b temp;cout << "函数的a: " << a << endl;cout << "函数的b: " << b << endl; }void swap2(int *a,…

JUC并发编程第十一章——Synchronized与锁升级机制

1 入门知识介绍 synchronized锁&#xff0c;是不是默认实现了锁升级。代码中只需要直接使用synchronized&#xff0c;至于怎么从偏向锁升级为轻量锁再升级为重量级锁&#xff0c;这些底层jvm已经实现了。不需要程序员担心。 是的&#xff0c;Java 8中的synchronized关键字确实默…

为什么代理IP很难做到100%可用性?

在当今高度互联的网络环境中&#xff0c;代理IP已成为许多网络活动的重要支撑工具&#xff0c;从数据收集到业务推广&#xff0c;无所不包。然而&#xff0c;代理IP在很多场景中发挥着重要作用&#xff0c;却很难实现100%的可用性。 这种情况并非偶然&#xff0c;而是受到多重复…

如何给自己的项目实现在线测试的接口文档knife4j

配置实现Knife4j在线接口测试文档 为什么要是实现这个东西呢&#xff1f;肯定是对我们有用的&#xff0c;后端主要编写的就是接口&#xff0c;然后我们将接口编写好了之后肯定还是需要进行调试看是否能够正常使用且按照规范返回对应的数据。相信大家测试都是基本上使用的是一些…

JavaScript的数组(一维数组、二维数组、数组常用的方法调用)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Java MyBatis实战:QueryWrapper中的and和or拼接技巧

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、引言 在Java Web开发中&#xff0c;MyBatis是一个非常流行的持久层框架。它通过XML或注解的方式将Java对象与数据库表进行映射&#xff0c;从而实现数据的增删改查操作。在使用MyBatis的过程中&#xff0c;经常…

景联文科技:打造亿级高质量教育题库,赋能教育大语言模型新未来

随着人工智能技术的持续进步&#xff0c;从广泛的通用大语言模型到针对各行业的垂直大语言模型&#xff0c;已成为人工智能大语言模型技术深化演进的必然趋势。 教育大语言模型是适用于教育场景、具有庞大规模参数、融合了广泛的通用知识和专业知识训练形成的人工智能模型。能为…

【牛客面试必刷TOP101】Day31.BM65 最长公共子序列(二)和BM66 最长公共子串

文章目录 前言一、BM65 最长公共子序列(二)题目描述题目解析二、BM66 最长公共子串题目描述题目解析总结 前言 一、BM65 最长公共子序列(二) 题目描述 描述&#xff1a; 给定两个字符串str1和str2&#xff0c;输出两个字符串的最长公共子序列。如果最长公共子序列为空&#xf…

外星人Aurora R15 intel版 原厂Windows11oem系统

装后恢复到您开箱的体验界面&#xff0c;包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http://w…

Django之文件上传(二)

一、自定义上传文件重命名 重名名好处: 重命名文件也可以避免文件名冲突的问题可以根据自己情况,针对性增加描述信息1.1、生成文件名方法 import os from uuid import uuid4 # 生成文件的名称 def generate_filename(filename):# filename: 上传文件的名称ext = os.path.spl…

通配符(泛域名)SSL证书怎么申请?在哪能能申请到?

通配符SSL证书的申请过程可以概括为以下几个关键步骤&#xff0c;以确保条理清晰、通俗易懂且步骤尽量精简&#xff1a; 选择CA机构&#xff1a; 选择一个受信任的证书颁发机构&#xff08;Certificate Authority&#xff0c;简称CA&#xff09;&#xff0c;如JoySSL、DigiCe…

跟着AI学AI_09 PyTorch 简介

PyTorch 简介 PyTorch 是一个开源的深度学习框架&#xff0c;由 Facebook 的人工智能研究团队&#xff08;FAIR&#xff09;开发。它提供了灵活且高效的张量计算功能&#xff0c;并支持动态计算图。PyTorch 的易用性和灵活性使其成为深度学习研究和生产应用中广泛使用的工具。…

shell条件测试和if语句

“C:\Users\Jessica\Desktop\6.12.assets\image-20240612094159578.png”# shell条件测试和if语句 一、条件测试 1、$? 返回码 判断命令或者脚本是否执行成功&#xff08;最近的一条&#xff09; 0 true 为真就是成功 成立 非0 false 失败或者异常 2、test命令 可以进行…

python实现高斯(Gauss)迭代自动计算

实现高斯&#xff08;Gauss&#xff09;迭代自动计算 输入系数矩阵mx、值矩阵mr、迭代次数n&#xff0c;即可得到答案。本人在原博主的代码基础上优化了数据输出形式&#xff0c;原文链接&#xff1a;python实现高斯(Gauss)迭代法_python中gausspp-CSDN博客 运算结果如下图&am…

小程序必看:https证书强制使用攻略

为了提升网络安全性和用户数据保护&#xff0c;自2017年1月1日起&#xff0c;微信小程序要求所有的网络请求必须通过HTTPS协议进行。这意味着小程序在与服务器进行数据交互时&#xff0c;必须使用HTTPS加密连接&#xff0c;以确保数据传输的安全性。这样做可以防止数据在传输过…

基于java的英文翻译字典

基于java的英文翻译字典&#xff0c;附有源代码&#xff0c;源数据库初始化文件 源码地址 dict_demo: 提取一段英文对话中的英文词汇&#xff0c;输出为英文单词字典形式 解析json字条 private void readFile(String pathname) {long start System.currentTimeMillis(); //…

金石传拓非遗技艺端午专场活动之精彩瞬间

6月10日端午节下午&#xff0c;由致公党润州区基层委二支部举办的“凝心铸魂强根基&#xff0c;端午追远贺盛世”金石传拓体验活动在镇江万达广场隆重举行。近30名党员及其家属参加了本次活动&#xff0c;活动由润州区二支部主委吴娉主持。 端午节&#xff0c;又称端阳节&#…

181.二叉树:验证二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

【机器学习】GANs网络在图像和视频技术中的应用前景

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 1. &#x1f525;引言 背景介绍 研究意义 2. &#x1f388;GANs的基本概念和工作原理 生成对抗网络简介 工作原理 3. &#x1f916;GANs在图像生成中的应用 图像超分辨率 工作原理 图像去噪 工作原理 图…

【附带源码】机械臂MoveIt2极简教程(五)、第二个demo - rviz可视化

系列文章目录 【附带源码】机械臂MoveIt2极简教程(一)、moveit2安装 【附带源码】机械臂MoveIt2极简教程(二)、move_group交互 【附带源码】机械臂MoveIt2极简教程(三)、URDF/SRDF介绍 【附带源码】机械臂MoveIt2极简教程(四)、第一个入门demo 【附带源码】机械臂Move…