首页 > 编程语言 >Java异常 小白版

Java异常 小白版

时间:2024-08-15 23:49:27浏览次数:8  
标签:Java 代码 try println catch 异常 白版

什么是异常

在程序运行时打断正常程序流程的任何不正常的情况称为错误或异常。异常包括用户造成的异常和

系统造成的异常。

例如:网络连接中断、操作符越界、加载的类找不到

异常产生的原因和分类

1. 异常产生的原因

在Java中异常产生,主要是有三种原因:

  • 编写程序代码中的错误产生的异常,比如数组越界、空指针异常等,这种异常叫做未检查的异常,一般需要在类中处理这些异常

  • Java内部错误发生的异常,Java虚拟机产生异常

  • 通过throw(抛出异常)语句手动生成的异常,这种异常叫做检查的异常,一般是用来给方法调用者一些必要的信息

2.异常分类

Throwable:是异常类根类,其派生出两个重要的子类, Error 和 Exception

  • Exception类 表示可预料异常,可以处理或恢复;
  • Error类 表示不可预料异常,不能处理或恢复。

异常处理方法

1.捕获并处理异常

try-catch-finally语句

try-catch-finally语句捕获程序中产生的异常,然后针对不同的情况采取不同的处理程序进行处理。

try-catch-finally语句基本格式
try{
    Java statements  //一条或多条可能抛出异常的Java语句
}catch(Exception e){
    Java statements  //Exception类型的异常(所有可处理的异常)执行的代码
}finally{
    //无论是否存在异常,始终被执行的代码
}
执行情况:
  • 情况1:try块中代码没有出现异常,不执行catch块代码,执行catch块后面的代码;
  • 情况2:try块中代码出现异常,catch中异常类型匹配(相同或者父类),Java会生成相应的异常对象,Java系统寻找匹配的catch块。执行catch块后面的代码,try块中代码不会执行;
  • 情况3:try块中代码出现异常,catch中异常类型不匹配,不执行catch块代码,只执行finally{}中的代码,不执行catch块后其他的代码。
  • 情况4:一段代码可能会引发多种类型的异常,当引发异常时,会按顺序来查看每个 catch 的异常类型,并只执行第一个与异常类型匹配的 catch 中的异常处理代码,其他的 catch 中的异常处理代码将不会执行

注:catch块中如何处理异常:其中一种方式——自定义内容输出

例1:情况1

public class ExceptionDemo01 {
    public static void main(String[] args) {
        int a =10;
        int b = 2;
        try {
            int c = a / b;
            System.out.println(c);
        } catch (ArithmeticException e) {  //捕获ArithmeticException异常,对于初学者来说,建议直接写Exception,因为它可以捕获所有异常
            System.out.println("除数不能为0");
        }finally {
            System.out.println("程序结束");
        }
    }
}
//运行结果:
5
程序结束

例2:情况2

public class ExceptionDemo01 {
    public static void main(String[] args) {
        int a =10;
        int b = 0;
        try {   
            int c = a / b;   //除数为0,出现异常
            System.out.println(c);
        } catch (ArithmeticException e) {  //catch中异常类型匹配,执行catch块后面的代码
            System.out.println("除数不能为0");
        }finally {
            System.out.println("程序结束");
       }
    }
}
//运行结果
除数不能为0
程序结束

例3:情况3

import java.util.InputMismatchException;

public class ExceptionDemo01 {
    public static void main(String[] args) {
        int a =10;
        int b = 0;
        try {          
            int c = a / b;   //除数为0,出现异常          
            System.out.println(c);
        } catch (InputMismatchException e) {   //catch中异常类型不匹配,不执行catch块代码
            System.out.println("除数不能为0");
        }finally {     //执行
            System.out.println("程序结束");
        }

        System.out.println("程序结束0000"); //不执行
    }
}
//运行结果
程序结束

2.将方法中的异常抛出

两种抛出异常方式:throw和throes

throw用于在代码中抛出异常

格式如下:

throw new 异常类型;

throws用于在方法中抛出异常

格式如下:

方法名() throws 异常类型{
  //方法体
}

例:

//提取一个方法:两个数相除
public static void devide() throws Exception { //throws
        int a =10;
        int b = 0;
        if(b == 0) { //如果b等于0,抛出异常
            //人为制造异常对象
            throw new Exception("除数不能为0");  //throw
        }else {
            System.out.println("两个数相除:"+a/b);

        }
    }
throw和throws的区别:
  • 位置不同:throw在方法内部;throws在方法的声明处
  • 内容不同:throw + 异常对象;throws + 异常类型
  • 作用不同:throw:异常出现的源头,制造异常;throws在方法声明处,告诉方法调用者,这个方法可能会出现我声明的这些异常。然后调用者对这个异常进行处理:要么自己处理要么继续向外抛出异常。

异常的传播

当某个方法抛出异常时,如果当前方法没有捕获异常,异常就会抛到上层调用方法,知道遇到某个try...catch被捕获为止。

public class Main{
    try{
        process1();
    }catch(Exception e){
        e.printStackTrace();
    }
}

static void process1(){
    process2();
}

static void process2(){
    lnteger.parselnt("abc"); //抛出异常
}
printStackTrace()方法

可以打印出方法的调用栈,对于调试错误非常有用(每层方法调用均给出了源代码的行号,可以直接定位产生异常的代码位置

Java异常结构图

Exception的分类

RuntimeException 运行时异常(非检查型异常)

编译器不强制处理异常。常见运行时异常(非检查型异常)

NullpointerException:空指针异常
ClassCastException:类型强制转换异常
IllegalArgumentException:传递非法参数异常
IndexOutOfBoundsException:下标越界异常
NumberFormatException:数字格式异常
ArrayIndexOutOfBoundsException: 数组越界异常。
ArrayStoreException:数组类型不一致异常
ArithmeticException:算术异常(除0异常)
BufferOverflowException:缓冲区溢出异常

CheckedException 非运行时异常(检查型异常)

编译器强制处理异常,否则显示编译错误。常见非运行时异常 (检查型异常):

ClassNotFoundException:找不到指定 class 异常
IOException:IO 操作异常
FileNotFoundException:文件不存在异常
SQLException:SQL语句异常
InterruptedException:中断异常


异常处理机制的特点

  1. 通过异常传播可以将异常传递到合适的位置再处理,使得Java语言的异常处理更加灵活;
  2. 可以在源代码级别将正在执行的逻辑代码和异常处理的代码相分离,更加便于代码阅读和维护;
  3. 过度使用异常处理将降低程序的执行效率,增加语法的复杂度。

标签:Java,代码,try,println,catch,异常,白版
From: https://www.cnblogs.com/wmshun/p/18362063

相关文章

  • Java中的四层框架
    一、实体层别名:model层,domain层,entity层用途:用于存放实体类,与数据库中的属性值基本保持一致,实现set和get的方法。二、mapper层别名:dao层用途:对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的,主要实现一些增删改查操作,在mybatis中方法主要与xxx.xml内相互一......
  • [Java并发]Synchronized底层原理
    synchronized底层语义原理Java虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现。在Java语言中,同步用的最多的地方可能是被synchronized修饰的同步方法。同步方法并不是由monitorenter和monitorexit指令来实现同步的,而是由方法调用指令读取运行时......
  • TypeScript 之 JavaScript文件类型检查
    启用对JavaScript文件的类型检查在TypeScript编译选项compilerOptions全部配置项中,可以通过以下2个属性配置JavaScriptSupport:allowJs是否允许编译JavaScript文件。默认值是false。在默认情况下,TypeScript编译器只处理.ts、.tsx和.d.ts文件,不会编译.js......
  • Java 入门指南:Bean 特殊的Java类
    JavaBeanJavaBean是一种符合特定约定的Java类,用于在Java程序中封装数据和行为。它是一种重要的编程模式,用于简化和统一对象的创建、访问和操作,使得其他Java类可以通过自省(反射)机制来发现和操作这些JavaBean的属性。JavaBean可以用于实现数据封装、数据传输、持久......
  • Java 入门指南:接口(Interface)
    引言在Java编程中,接口(Interface)是一种非常重要的概念,它不仅是面向对象编程(OOP)的基石之一,也是实现高内聚、低耦合设计原则的关键工具。接口定义了一组方法,但不提供这些方法的实现细节,而是由实现接口的类来具体实现。这种机制使得Java程序更加灵活、易于扩展和维护。定义接......
  • java方法
    Java方法System.out.println()方法是语句的集合原则:一个方法只完成一个功能,利于我门后期的拓展定义类似于其他语言的函数,用来完成特定功能的代码片段packagecom.yang.Method;publicclassDemo0{//main方法publicstaticvoidmain(String[]args){......
  • java中运算符的详细知识点
    算数运算符a++先赋值再加1++a先加1在赋值--的道理是一样的赋值运算符1.=+=-=*=/=%=当=两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则支持连续赋值=+=-=*=/=%=不会改变基础类型测试一下:比较运算符运算结果为布尔类型==!=适......
  • JavaScript 中,`'10' < '1'` 的结果为 `false`,原因
    在JavaScript中,'10'<'1'的结果为false,这是因为JavaScript在进行比较操作时,会将字符串按照字符编码进行比较,而不是将它们转换为数字。字符编码比较:字符串'10'的第一个字符是'1',而字符串'1'的第一个字符也是'1'。由于两个字符串的第一个字符相同,所以JavaScript......
  • java网站重建绕密常用技巧
    在进行网站分析时的一大重点就是如何登录到管理后台,这就需要我们去绕过/获取管理员的密码,在php、nodejs等站点中就很简单,我们只需要找到目标逻辑所在的代码,直接修改代码就可以实现目的。但是当我们遇到java类站点时,没有办法很轻松地修改代码,只能去分析密文的算法,从而自己生成对应......
  • Java volatile关键字剖析
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录1.volatile关键字介绍2.volatile变量可见性问题3.volatile变量可见性保证3.1Fullvolatile完全易失性可见性保证3.2指令重新排序挑战3.3volatile的Happens-Before保证4.volatile并不......