首页 > 编程语言 >Java:什么是异常?一篇让你明白异常

Java:什么是异常?一篇让你明白异常

时间:2024-07-15 14:01:08浏览次数:16  
标签:Java 一篇 int System println 异常 public out

目录

1.什么是异常?

2.为什么需要异常处理

3.异常处理的类型

  3.1 try-catch方式

  3.2 处理多种异常

  3.3 异常捕获的原理

  3.4 异常处理的方式throws

4.Exception下常用的api方法

5.finally关键字

6.throw关键字

7.自定义异常


1.什么是异常?

异常就是程序在运行时出现意外,而导致程序无法正常往下执行(终止)。

2.为什么需要异常处理

异常处理的目的就是想让程序继续执行

public class Test {
    public static void main(String[] args) {
        int a=10;
        int b=0;
        System.out.println("开始计算===============");
        int result=a/b;
        System.out.println("结束计算==============");
    }
}

 我们发现上面再14行发生异常,而导致14行以下的内容都无法正常执行。从而导致程序再14终止了。我们应该处理这种异常。能让程序继续执行

3.异常处理的类型

Java中提供了两种异常处理的方式:

  1.  try{可能发生异常的代码}catch(异常类型 对象){捕获异常}finally{异常的出口 }
  2. 抛出异常throws

3.1 try-catch方式

public class Test {
    public static void main(String[] args) {
        int a=10;
        int b=0;
        System.out.println("开始计算===============");
        try {
            int result = a / b;
        }catch (ArithmeticException e){
            System.out.println("捕获算术异常");
        }
        System.out.println("结束计算==============");
    }
}

 处理完异常后我们的程序可以继续执行了。

3.2 处理多种异常

public class Test {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        String c1=scanner.next();
        System.out.print("请输入二个数字:");
        String c2=scanner.next();
        System.out.println("开始计算===============");
        try {
            int a=Integer.parseInt(c1);
            int b=Integer.parseInt(c2);
            int result = a / b;
        }catch (ArithmeticException e){
            System.out.println("捕获算术异常");
        }catch (NumberFormatException e){
            System.out.println("格式化转化异常");
        }
        System.out.println("结束计算==============");
    }
}

try后面可以跟多个catch捕获。不同的catch捕获不同的异常。但是这样会先的比较麻烦。

3.3 异常捕获的原理

这些异常有一个公共的父类,异常的根类是Throwable, Throwable下有两个子类:

  • Exception: 异常类,我们程序员可以处理的异常。一般使用该异常就了。
  • Error: 错误类。这种异常程序员无法处理。比如内存溢出。

根据多态,在异常捕获时可以使用Exception异常来捕获

 注意:如果你使用多个catch,范围大的必须放在范围小的后面。

 3.4 异常处理的方式throws

把异常抛出,使用再方法名()后面. 抛给了方法调用者。

 public static void main(String[] args) throws Exception {//JVM
            fun();//方法调用者

    }
    public static void fun() throws Exception{
        int a=10;
        int b=0;
        int c=a/b;
    }

 如果我们抛出的异常为RuntimeException下的异常。不要强制调用者处理。

4.Exception下常用的api方法

getMessage():获取异常信息。

toString():获取异常信息以及异常种类。

printStackTrace():打印异常信息以及异常种类和异常发生的位置。

5.finally关键字

 使用异常处理中,作为最终执行的代码,不管有没有异常都会执行finally中代码。后期使用在资源关闭中。

如果执行了return,finally也会被执行,因为return语句执行了,方法直接返回到调用处,但是在返回之前,会执行finally块中的代码

public class Test02 {
    public static void main(String[] args) {
        int c = fun();
        System.out.println("c========" + c);
    }

    public static int fun() {
        int a = 10;
        int b = 2;
        int c = a / b;
        try {
            return c;
        } catch (Exception e) {
            System.out.println("异常");
        } finally {
            c = 15;
            System.out.println("finally~~~~~~~");
//          return c;
        }
        return 0;
    }
}

 注意: try{}可以finally单独使用try{}finally{}:没有捕获异常

6.throw关键字

我们前面讲解的异常,都是程序自己产生的异常对象。 我们也可以自己定义异常对象。并把该异常对象抛出。

class Student{
     private String name;
     private Integer age;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age){
        if(age<=0){
//            System.out.println("年龄有误");//只能在控制看到 不允许出现sout语句
            throw new RuntimeException("年龄有误");
        }
        this.age = age;
    }
}

7.自定义异常

当系统提供的异常类型无法满足客户需求时,程序员可以自己定义异常类型。目的可以达到见名知意。

创建一个异常类并继承RuntimeException:

public class AgeException extends RuntimeException {
	//创建一个构造函数
    public AgeException(String msg){
        super(msg);
    }
}

使用自定义的异常类:

标签:Java,一篇,int,System,println,异常,public,out
From: https://blog.csdn.net/m0_65224643/article/details/140434622

相关文章

  • JavaSE项目--图书管理系统代码
    结构代码展示Book类代码packagecom.xszx.beans;//实体类publicclassBook{privateintid;privateStringname;privateintbsum;publicBook(){}publicBook(intid,Stringname,intbsum){this.id=id;......
  • Java面试八股之Redis哨兵机制
    Redis哨兵机制RedisSentinel(哨兵)模式是一种高可用解决方案,用于监控和自动故障转移Redis主从集群。以下是对哨兵模式详细过程的描述:1.初始化与配置部署哨兵节点:在不同的服务器上部署一个或多个RedisSentinel节点,它们作为独立进程运行,负责监控Redis主从集群的状态。配置......
  • java操作Oracle 方式三 ( 全局一个连接,当操作时发现连接断开了,则再次连接,单线程 )
    全局一个连接,当操作时发现连接断开了,则再次连接,单线程这种方式好处是,全局一个连接,不会每次都发启连接,适用于某一时刻,频繁操作数据库,如:每晚同步数据OracleUtil.java基础类代码详见:https://www.cnblogs.com/hailexuexi/p/18302732完整代码dbCdrOneConnect.javapackagecom.Ja......
  • java操作Oracle 方式一 ( 连接-》操作-》断开连接 )
    连接-》操作-》断开连接这种方式的特点是每次都是新的连接,单线程,缺点是网络环境不好时连接oracle比较费时。OracleUtil.java基础类代码详见:https://www.cnblogs.com/hailexuexi/p/18302732完整代码dbCDR.javapackagecom.JavaRabbitMQToDataBase.dbOracle;importjava......
  • java操作Oracle 方式二 ( 多线程 )
    多线程方式 也是 连接-》操作-》断开连接  这样的操作过程,只是采用了多线程这种方式的特点是每次都是新的连接,多线程,解决了网络环境不好时连接oracle比较费时,影响主程序其它功能的响应。OracleUtil.java基础类代码详见:https://www.cnblogs.com/hailexuexi/p/1830273......
  • java连接oracle执行sql语句
    一个简单的示例importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;publicclassOracleJdbcExample{publicstaticvoidmain(String[]args){//Oracle数据库的JDBCURL,用户名和密码......
  • Windows环境黑客入侵应急与排查(非常详细)零基础入门到精通,收藏这一篇就够了
    “在网络安全的世界里,预防是上策,而有效的应急响应则是最后的防线。”INSPIRATION1文件分析1.1临时目录排查黑客往往可能将病毒放在临时目录(tmp/temp),或者将病毒相关文件释放到临时目录,因此需要检查临时目录是否存在异常文件。假设系统盘在C盘,则通常情况下的临时目录......
  • Java计算机毕业设计教学资料管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:在教育信息化的大潮中,教学资料作为知识传播的重要载体,其管理与利用效率直接影响到教学质量与学生学习效果。传统的教学资料管理方式多依赖于纸质文档......
  • 关于java装饰器模式在ai生成举例不可用的问题
    定义首先描述下定义,然后举例说明。网上定义装饰器模式(DecoratorPattern)是一种结构型设计模式,它允许向对象添加新的功能或职责,同时保持对象类的原始结构。这种模式提供了一种替代继承的机制来扩展功能,因为继承通常是在编译时固定的,而装饰器模式则允许在运行时动态地添加......
  • Java中的静态与动态绑定
    Java中的静态与动态绑定大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!静态与动态绑定的基本概念在面向对象编程中,静态绑定(StaticBinding)和动态绑定(DynamicBinding)是Java中重要的概念。本文将深入探讨这两种绑定方式的特点、使用场景以及在实际开发中......