Java-异常(一)-异常的概述和常见异常的举例

news2024/11/18 5:57:11

🐶b站视频

124-异常处理-异常的概述与常见异常的举例_哔哩哔哩_bilibili

目录

b站视频

5.1 异常概念

5.2 Error 示例代码

5.3 Exception异常划分

❓面试题:常见的异常有哪些?举例说明


🐶5.1 异常概念

在使用计算机语言进行项目开发的过程中,即使程序员把代码写的尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常进行,这就是异常(开发过程中的语法错误和逻辑错误不是异常)

异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.

Java程序在执行过程中所发生的异常事件可分为两类:

  • Error: Java 虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError(栈溢出)OOM(内存溢出)。一般不编写针对性的代码进行处理。

  • Exception:其他因编程错误或者偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。

      例如:

      对于这些错误,一般有两种解决办法:

    • 空指针 访问

    • 试图读取不存在的文件

    • 网络连接中断

    • 数组角标越界

    • 一是遇到错误就终止程序的运行

    • 另一种办法是由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。

🐶5.2 Error 示例代码

1. 栈溢出:java.lang.StackOverflowError

原因:函数调用栈太深了,注意代码中是否有了循环调用方法而无法退出的情况

        StackOverflowError,是一个java中常出现的错误,在jvm运行时的数据区域中有一个java虚拟机栈,当执行java方法时会进行压栈弹栈的操作。

        在栈中保存局部变量,操作数栈,方法出口等等,jvm规定了栈的最大深度,当执行时栈的深度大于了规定的深度,就会抛出StackOverflowError错误。

package Day1109;


import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;

public class TestDemo02 {
    public static void main(Stringargs){
        main(args);
    }
}

  结果:

 2. 堆溢出:java.lang.OutOfMemoryError

原因:java中所有的对象都存储在堆中,通常如果jvm无法再分配新的内存,内存耗尽,垃圾回收无法及时回收内存,就会抛出OutOfMemoryError.

package Day1109;

public class TestDemo02 {
    public static void main(Stringargs) {
        Integerarr = new Integer[1024 1024 1024 1024];
    }
}

🐶5.3 Exception异常划分

我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序。

异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?

  • 编译时异常:

    • 是指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。编译器要求Java程序必须捕获或声明所有编译时异常。

    • 对于这类异常,如果程序不处理,可能会带来意想不到的结果。

  • 运行时异常:

    • 是指编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该积极避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。

    • 对于这类异常,可以不作处理,因为这类异常很普遍,若全处理可能会影响程序的可读性和运行效率。

❓面试题:常见的异常有哪些?举例说明

运行时异常(RuntimeException)举例

  1. ArrayIndexOutOfBoundsException 数组下标越界异常

import java.util.Date;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
    public static void main(String[] args)  throws Exception{
        int[] a=new int[10];
        System.out.println(a[10]);
    }
}

结果:

 2. NullPointerException 空指针异常

import java.util.Date;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
    public static void main(String[] args)  throws Exception{
        //当你让字符串指向null时,并试图调用String类的一些方法,就会引发空指针异常
        String str="Hello";
        System.out.println(str.toString());
        str=null;
        System.out.println(str.toString());
    }
}

 结果:

3. ClassCastException 类型转换异常

import java.util.Date;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
    public static void main(String[] args)  throws Exception{
        //当年定义了一个Object类型的字符串,并试图强制转换成Interger会引发类型转换异常
        Object str="abc";
        Integer in1=(Integer) str;
       // Integer in=Integer.parseInt(str);



    }
}

结果:

4. NumberFormatException 数字格式异常

通常是由字符串转换成数字时引起的

import java.util.Date;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
    public static void main(String[] args)  throws Exception{
        //当定义了一个Object类型的字符串,将其强制转换成字符串类型,这就是可以的,
        //但试图将字符串类型通过Integer.parseInt方法去进行转换,就会引发数字格式异常
        Object str="abc";
        //Integer in1=(Integer) str;
        String str1= (String) str;
        System.out.println(str1);
        Integer in=Integer.parseInt(str1);



    }
}

5. InputMismatchException 输入不匹配异常

package day1124;

import java.util.Scanner;

public class DemoTest01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        int in=sc.nextInt();
        System.out.println(in);
    }
}

结果:

 6. ArithmeticException 算数异常

package Day1109;

public class TestDemo02 {
    public static void main(Stringargs) {

        int a=10;
        int b=0;
        System.out.println(a/b);
    }
}

编译时异常

1. ClassNotFoundException 类找不到异常

Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都将导致该类被加载到JVM内存中,如果这个类在类路径中没有被找到,那么此时就会在运行时抛出ClassNotFoundException异常。

package day1124;

import day1103.Student;

import java.util.Scanner;

public class DemoTest01 {
    public static void main(String[] args) {
        Class clz=Class.forName("java.lang.String");


    }
}

结果:

 2. FileNotFoundException

原因:文件找不到异常通常是两种情况:1)系统找不到指定的路径 2)拒绝访问(指定的是目录时,就会报拒绝访问异常)

package Day1109;

import java.io.FileInputStream;

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

        FileInputStream fis=new FileInputStream("a.txt");
    }
}

 结果

3. IOException

package day1124;

import day1103.Student;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class DemoTest01 {
    public static void main(Stringargs) throws FileNotFoundException {
        FileInputStream fis=new FileInputStream("C:\\Users\\35014\\Idea46\\src\\day1120\\a.txt");
        //汉字是两个字节,read函数是一个字节一个字节的读
        int data=fis.read();
        System.out.println(data);


    }
}

 结果:

 

 

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

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

相关文章

HarmonyOS应用开发-手写板

这是一个基于HarmonyOS做的一个手写板应用,只需要简单的几十行代码,就可以实现如下手写功能以及清空画布功能。 一、先上效果图: 二、上代码 Entry Component struct Index {//手写路径State pathCommands: string ;build() {Column() {//…

HCIA-H12-811题目解析(10)

1、【单选题】DHCP客户端在租期到达哪个比例时第一次发送续租报文? 2、【单选题】在WLAN中用于标识无线网络, 区分不同的无线网络的是? 3、【单选题】我们在笔记本电脑上搜索可接入无线网络时,显示出来的网络名称实际是 4、【单…

leetcode 904. 水果成篮(优质解法)

代码: class Solution {public int totalFruit(int[] fruits) {int lengthfruits.length;int []fruitNumsnew int[length1]; //用于记录各个种类摘了多少个水果int count0; //用于记录当前采摘了几种水果int sum0; //用于记录当前共摘了多少水果for(int left0…

mmseg上手自己的数据集

制作自己的数据集,VOC格式为例。 这三个文件包括数据集的名称。可以使用labelme脚本自动生成。 跟据预测类别修改配置文件 D:\projects\mmsegmentation-main\mmseg\datasets\voc.py 因为是voc格式的数据集,在这个文件里进行配置,修改成自己数…

at least 1 bean which qualifies as autowire candidate

No qualifying bean of type com. spdbcccdl.mapper.dl.DatabaseDaoavailable: expected at least 1 bean which qualifies as autowire candidate.

《PySpark大数据分析实战》-02.了解Hadoop

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

PC 机与单片机通信(RS232 协议)

PC 机与单片机通信(RS232 协议) 目录: 1、单片机串口通信的应用 2、PC控制单片机IO口输出 3、单片机控制实训指导及综合应用实例 4、单片机给计算机发送数据: [实验任务] 单片机串口通信的应用,通过串口,我们的个人电脑和单…

智能优化算法应用:基于阴阳对算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于阴阳对算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于阴阳对算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.阴阳对算法4.实验参数设定5.算法结果6.参考文…

搜集怎么绘制三维曲线和曲面?

1、针对函数对象是单一变量、两个函数的情况。用plot3函数;(三维曲线) 看一下matlab官方的例子: t 0:pi/50:10*pi; st sin(t); ct cos(t); plot3(st,ct,t) 绘制出来的曲线: 几个比较关键的点: &…

手把手教你玩转ESP8266(原理+驱动)

在嵌入式开发中,无线通信的方式有很多,其中 WIFI 是绕不开的话题。说到 WIFI 通信,就不得不提 ESP8266了。 ESP8266 是一款高性能的 WIFI 串口模块,实现透明传输。只要有一定的串口知识,不需要知道 WIFI 原理就可以上…

数据结构:第13关:查找两个单词链表共同后缀的起始结点

任务描述编程要求 输入输出测试说明来源 任务描述 本关任务:假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀空间。 例如,“loading”和“being”的存储映像如下图所示: 设str1和str2…

论文阅读《Domain Generalized Stereo Matching via Hierarchical Visual Transformation》

论文地址:https://openaccess.thecvf.com/content/CVPR2023/html/Chang_Domain_Generalized_Stereo_Matching_via_Hierarchical_Visual_Transformation_CVPR_2023_paper.html 概述 立体匹配模型是近年来的研究热点。但是,现有的方法过分依赖特定数据集上…

使用 PyTorch FSDP 微调 Llama 2 70B

通过本文,你将了解如何使用 PyTorch FSDP 及相关最佳实践微调 Llama 2 70B。在此过程中,我们主要会用到 Hugging Face Transformers、Accelerate 和 TRL 库。我们还将展示如何在 SLURM 中使用 Accelerate。 完全分片数据并行 (Fully Sharded Data Paral…

游戏中小地图的制作__unity基础开发教程

小地图的制作 Icon标识制作制作摄像机映射创建地图UI效果“不一样的效果” 在游戏中经常可以看到地图视角的存在,那么地图视角是如何让实现的呢? 这一期教大家制作一个简易的小地图。 💖点关注,不迷路。 老样子,我们还…

使用MfgTool烧写前需准备的文件

一. 简介 本文我们就来学习,如何将我们编译的 uboot,zImage(内核镜像),xxx.dtb设备树文件,还有制作的根文件系统,这四个文件烧写到开发板中,最后 开发板能正常启动。 本文这里使用…

Linux实用操作篇-下篇

Linux实用操作篇-上篇:Linux实用操作-上篇-CSDN博客 一、网络传输 1.1 ping命令 网络是否可联通 可以通过ping命令,检查指定的网络服务器是否是可联通状态 语法: ping [-c num] ip或主机名 选项:-c,检查的次数,…

# 一些视觉-激光、加速度传感器类的铣削振动测试方法案例

一些视觉-激光类的铣削振动测试方法 1. 基于激光测振仪的振动测试2. 切削加工的 加速度传感器实测信号2.1 x轴向信号2.2 Y轴向信号2.3 第二次廊坊实验3. 关于数值频域积分1. 基于激光测振仪的振动测试 【1】舜宇LDV|激光测振—机床铣刀寿命预测 新刀具为100hz主频 旧刀具为800…

多源异构数据融合是什么,在进行故障预测、诊断、辨识的时候有什么有优点和缺点!

文章目录 1、多源异构数据融合是什么2、多源异构数据融合的优点主要包括:3、多源异构数据融合进行故障辨识的缺点 1、多源异构数据融合是什么 多源异构数据融合是将来自于不同设备、传感器、系统或网络等多个数据源的数据进行整合并综合分析处理的一种技术。这种数…

AcWing 95. 费解的开关(递推)

题目链接 活动 - AcWing 本活动组织刷《算法竞赛进阶指南》,系统学习各种编程算法。主要面向有一定编程基础的同学。https://www.acwing.com/problem/content/97/ 题解 只要第一行开关的状态确定,则所有开关的状态都可以被推出来。第一行开关总共有种操…

了解 git rebase

了解 git rebase 大多数人习惯使用 git merge 将更改从功能分支合并到主分支,但还有其他方法。我们是否曾经遇到过 git rebase 这个术语并想知道它是什么?或者我们可能听说过 rebase 和 merge ,但不确定何时使用哪个?不用担心&am…