java异常处理

捕获和抛出异常

异常处理的五大关键字:try,catch,finally,throw,throws

用法:

​ try{可能会出现异常的代码

​ } catch(Exception e)//catch后面跟想要捕获的异常类型

​ {异常的处理逻辑}

idea快捷键:ctrl+alt+t

eclipse快捷键alt+shift+z

代码示例:

public class Test1 {
    public static void main(String[] args) {
        int a=1;
        int b=0;

        try {
            //快捷键ctrl+ait+t选择try
            System.out.println(a/b);
        } catch (ArithmeticException e) {
            System.out.println("算术异常");;
        } finally {
            System.out.println("无论程序是否捕获到异常都会被执行");
        }
    }
}

输出:

算术异常
无论程序是否捕获到异常都会被执行

​ 通过throws关键字声明抛出这个异常,交给方法的调用者去处理,在这里main方法的调用者是JVM,即交给JVM去处理。

throws: 跟在方法声明后面,后面跟的是异常类名
throw: 用在方法体内,后面跟的是异常类对象名

throws: throws表示有出现异常的可能性,并不一定出现这些异常
throw: throw则是抛出了异常,执行throw一定出现了某种异常

throws: 表示抛出异常,由该方法的调用者来处理
throw: 表示抛出异常,由该方法体内的语句来处理

throws:后面可以跟多个异常。用逗号(,)隔开
throw:只能抛出一个异常对象名

代码示例:

public class Demo02 {
    //throws后面可以跟多个异常。用逗号(,)隔开
    public static void main(String[] args) throws Exception {
            Demo02 d=new Demo02();
            d.division(5.0,0.0);
    }
    public void division(double x,double y) throws ArithmeticException{//throws后面跟异常类
        double num=x/y;
        if (y==0) {
            throw new ArithmeticException("算术异常");//后面跟异常对象名
        } else {
            System.out.println(num);

        }
    }

    }

输出:

Exception in thread "main" java.lang.ArithmeticException: 算术异常
    at com.exception.Demo02.division(Demo02.java:11)
    at com.exception.Demo02.main(Demo02.java:6)

可以看到当if成立时,会抛出异常,也就是throw才会执行。而当没异常的时候则不会执行!

在java中除了,java中给我们定义的异常之外,我们还可以自定义异常。

在进行程序开发的过程中,自定义异常遵循以下四个步骤:

1.首先创建自定义异常类,语法格式:自定义异常类名 extends Exception。
2.在方法中通过关键字throw抛出异常对象。
3.若是在当前抛出异常的方法中处理异常,可以用try-catch语句捕获并处理;若不是,在方法的声明处通过关键字throws指明要抛出给方法调用的异常。
4.在出现异常方法的调用中捕获并理异常

eg:定义一个大于10就会从抛出的异常

//自定义异常类
public class CustomizeException extends Exception{
    private int a;

    public CustomizeException(int a) {
        this.a = a;
    }
    //toString:异常的打印信息
    @Override
    public String toString() {
        return "CustomizeException{"+a+'}';
    }
}

然后书写一个测试类,里面放可能会存在异常的方法

package com.exception;

public class TestCustomizeException {
    //定义一个可能会存在异常的方法
    static void test(int a) throws CustomizeException {
        System.out.println("传递的参数为"+a);
        if (a>10){
            throw new CustomizeException(a);
        }
        System.out.println("ok");
    }

    public static void main(String[] args) {
        try {
            test(11);
        } catch (CustomizeException e) {
            System.out.println("CustomizeException=>"+e);;
        }
    }
}

输出:

传递的参数为11
CustomizeException=>CustomizeException{11}

这就是自定义异常

  • 在处理运行时异常的时候,采用逻辑去合理规避同同时辅助try-catch处理
  • 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
  • 对于不确定的代码,也可以加上try-catch处理潜在的异常
  • 尽量去处理异常,而不是只调用PrintStackTrace()去打印输出
  • 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  • 尽量添加finally语句块去释放占用的资源

Original: https://www.cnblogs.com/lingstar/p/16482435.html
Author: 星余明
Title: java异常处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/594122/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Dubbo3 源码系列 — 环境准备

    Dubbo3 源码系列 — 环境准备 前言工作中一直使用Dubbo项目,借着这次机会通过源码的方式来学习下Dubbo的源码内容。目前市面上很多都是的Dubbo2系列的教…

    Java 2023年6月10日
    089
  • 时间复杂度

    要找到一个数组里面最大的一个数,要把n个变量都扫描一遍,操作次数为n,那么算法复杂度是O(n). 用冒泡排序排一个数组,对于n个变量的数组,需要交换变量位置n^2 次,那么算法复杂…

    Java 2023年6月9日
    080
  • Spring Cloud Stream 简介

    一、概述 Spring Cloud Stream 是一个建立在 Spring Boot 和 Spring Integration 之上的框架,有助于创建事件驱动或消息驱动的微服务。…

    Java 2023年5月30日
    066
  • 机械师实时调度示例(I)-实时规划

    OptaPlanner创办人Geoffrey De Smet及其团队,在Red Hat 技术峰会上主题会场上,演示了一个通过OptaPlanner实现实时规划与调度的示例。Geof…

    Java 2023年6月16日
    080
  • Spring HttpInvoker 从实战到源码追溯

    Spring HttpInvoker 作为 Spring 家族中老牌远程调用模型 (RPC 框架),深受开发者喜爱。 其主要目的是来执行基于 HTTP 的远程调用(轻松穿越防火墙)…

    Java 2023年5月29日
    066
  • javaNIO:Socket通道

    Socket通道 上文讲述了通道、文件通道,这篇文章来讲述一下Socket通道,Socket通道与文件通道有着不一样的特征,分三点说: 1、 NIO的Socket通道类可以运行于非…

    Java 2023年5月29日
    058
  • Java基础语法(二)

    Java基础语法(二) 合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。 ——《道德经》 Java基础语法(二) – 十、用户交互 Scanner 类(引用…

    Java 2023年6月9日
    058
  • Java学习-085-Springboot 解决 InetAddress.getLocalHost().getHostName() took 13387 milliseconds to respond. Please verify your network configuration

    在启动 Springboot 时,发现启动耗时较长,启动日志提示:InetAddress.getLocalHost().getHostName() took 13387 milli…

    Java 2023年5月29日
    061
  • 十八、IO流(完结)

    十八、IO流 18.1 File 类 18.1.1 File 类介绍 java.io.File 类是 文件 和 目录 的 路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操…

    Java 2023年6月5日
    065
  • 程序员转行做运营,曾被逼得每天想离职,最后…

    做程序员的时候的时候觉得做运营肯定很轻松,转运营后我曾经每天都想着离职。 用了一年才终于适应了运营这个角色,这一年的经历颠覆我对运营这个工作本身的认知,也改变了我对个人成长、职场发…

    Java 2023年6月9日
    0191
  • spring boot集成RabbitMQ-SpringBoot(24)

    认识RabbitMQ 1.1介绍RabbitMQ RabbitMQ 是开源的高级消息队列协议(Advanced Message Queueing Protocol, AMQP) 的…

    Java 2023年6月13日
    072
  • 如何自动化你的Excel导入导出(Java)?

    如遇图片无法显示,请前往掘金查看原文 GitHub | 中文 | English | 博客 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发…

    Java 2023年5月29日
    087
  • 入门clash 及 proxy 坑点

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    073
  • 学习笔记

    狂神说ssm:https://blog.csdn.net/qq_33369905/article/details/105828924 Original: https://www.c…

    Java 2023年6月7日
    045
  • 初踩坑JS加载与audio接口:点击头像开始/暂停背景音乐

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月5日
    063
  • IDEA清空控制台以及Java中运行cmd命令实现清屏操作

    在网上有看到各种的实现方法,比如: Runtime.getRuntime().exec("cls"); 或者&amp…

    Java 2023年6月15日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球