Java——异常

Error和Exception

什么是异常

  • 实际工作中遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要求打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序在跑着,内存或硬盘可能满了等等。

  • 软件程序在运行过程中,非常可能遇到刚刚提到的这些异常问题,我们叫异常,英文名是:Exception,意思是例外。这些,例外情况,或者叫异常,怎么让我们写的程序作出合理的处理而不至于程序崩溃。

  • 异常指程序运行中出现的不期而至的各种情况,如:文件找不到、网络连接失败、非法参数等。

  • 异常发生在程序运行期间,他影响了正常程序执行流程

简单分类

  • 要理解Java异常处理是如何工作的,你需要掌握一下三种类型的异常:

  • 异常处理框架

  • 检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

  • 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略

  • 错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,他们在编译时检查不到的

异常体系结构

  • Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类
  • 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error(无法预料)和异常Exception(可以预料)

Error

  • Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写这所执行的操作无关
  • Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机一般会选择线程终止
  • 还有发生在虚拟机试图执行应用时,如类定义错误(NoClassDefFoundError)、链接错误(LinkageError)。这些错误是不可检查的,因为它们在引用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的情况

Exception

Exception

异常处理机制

  • 抛出异常

  • 捕获异常

  • 异常处理五个关键字

    • try、catch、finally、throw、throws

异常

package com.java.exception;

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




        //System.out.println(11/0);-------->ArithmeticException//除零异常


        //new Demo01().a();  ----->栈溢出错误(error)StackOverflowError
    }
//    public void a(){
//        b();
//    }
//    public void b(){
//        a();
//    }
}

package com.java.exception;

public class Test {
    public static void main(String[] args) {
         int a=1;
         int b=2;
         try {//监控区域内代码
             System.out.println(a/b);
         }catch (ArithmeticException e){//如果要捕获多个异常,应当从小到大排序⬇
             System.out.println("程序异常,请检查程序,b不能为零喵");
         }catch (Throwable  t){
             System.out.println("Throwable喵");
         } finally {//处理善后工作,无论出不出现错误,都会执行
             System.out.println("结束了喵");
         }

    }
}

package com.java.exception;

import org.w3c.dom.ls.LSOutput;

public class Demo02 {


    public static void main(String[] args) {
        int a=1;
        int b=0;
        try {
            new Demo02().chu(a,b);
        } catch (ArithmeticException e) {
            System.out.println("坏掉了喵~");
        } finally {
        }
    }
    //假设这个方法中处理不了这个异常,可以用throws向上抛出异常
    public void chu(int a,int b) throws ArithmeticException{
        if (b==0){//  throw   throws
            throw new ArithmeticException();//主动抛出异常,一般在方法中使用
        }
        System.out.println(a/b);
    }

}
/*
if (b==0){//  throw   throws
            throw new ArithmeticException();//主动抛出异常
        }

        try {//cmd/alt + ctrl + t 快捷生成
            System.out.println(a/b);
        } catch (Exception e) {//catch(想要捕获的异常类型)捕获异常
            throw new RuntimeException(e);//打印错误的栈信息
        } finally {
        }
 */

自定义异常

自定义异常

总结

package com.java.exception.demo02;

public class MyException extends Exception{
    //传递数字>10
    private int detail;

    public MyException( int a) {
        this.detail = a;
    }

    //toString  异常的打印信息
    @Override
    public String toString() {
        return "MyException{"  + detail + '}';
    }
}

package com.java.exception.demo02;

public class Test {
    //先写一个可能存在异常的方法
    public static void Test(int a) throws MyException {
        System.out.println("传递的参数是"+a+"喵");
        if (a>10){
            throw new MyException(a);//抛出异常方法就结束了
        }
        System.out.println("结束了喵");
    }

    public static void main(String[] args) {
        try {
            Test(11);
        } catch (MyException e) {
            //增加一些处理异常的代码,将损失降到最小
            System.out.println("这是我自定义的异常喵=>"+e);
        }
    }
}

Java基础的学习已经告一段落,但Java安全之路才刚刚开始

posted @ 2026-01-16 23:31  yorkchain  阅读(3)  评论(1)    收藏  举报