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

🐶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);


    }
}

 结果:

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的校园心理健康网站的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

PostGIS学习教程十二:地理

PostGIS学习教程十二:地理 坐标为"地理(geographics)“形式或者说是” 纬度(latitude)/经度(longitude)"形式的数据非常常见。 与Mercator(墨卡托)、UTM&…

【jitterbuffer】2:OnCompleteFrameCallback 送去FrameBuffer 处理的流程

【jitterbuffer】2:OnCompleteFrameCallback 送去FrameBuffer 处理的流程 基于m98版本。 WebRtc Video Receiver(六)-FrameBuffer原理 大神有个详细的论述。 Finder的FID设计 H.264 没有FID,使用RtpSeqNumOnlyRefFinder ,比较复杂,要做出决定 RtpSeqNumOnlyRefFinder cla…

canvas 有趣的弹簧效果

先上效果 两个小球之间有一根弹簧,这里有一条线表示,其中左球固定,在点击开始后,右球开始做自由落体 思路 先做受力分析 经过受力分析可以发现,整个系统一共有三个力在起作用,我们分别把他们求出来并合成…

鸿蒙原生应用再添新丁!同花顺入局鸿蒙

鸿蒙原生应用再添新丁!同花顺入局鸿蒙 来自 HarmonyOS 微博12月11日消息,同花顺已完成#鸿蒙原生应用#beta版本,并正在进行全量版本开发,进一步丰富了#鸿蒙原生应用#的覆盖领域。同花顺作为股民和券商首选的一站式金融理财服务平台…

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

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

Linux系统编程(一):基本概念

参考引用 Unix和Linux操作系统有什么区别?一文带你彻底搞懂posix Linux系统编程(文章链接汇总) 1. Unix 和 Linux 1.1 Unix Unix 操作系统诞生于 1969 年,贝尔实验室发布了一个用 C 语言编写的名为「Unix」的操作系统&#xff0…

nginx中的正则表达式及location和rewrite

目录 常用的Nginx 正则表达式 location和rewrite的区别 location location 大致可以分为三类 location 常用的匹配规则 location 优先级 location 示例说明 location优先级的总结 rewrite rewrite的功能 rewrite实现跳转的条件 rewrite的执行顺序 rewrite的语法格式…

C# 任务的异常和延续处理

写在前面 当Task在执行过程中出现异常或被取消等例外的情况时,为了让执行流程能够继续进行,可以使用延续方法实现这种链式处理;还可以针对前置任务不同的执行结果,选择执行不同的延续分支方法。子任务执行过程中的任何异常都会被…

【收获】成长之路

目录 一、前言二、计算机方面三、专业知识方面四、总结 一、前言 四年,对于一个人的成长来说,是一个相当重要的阶段。在这段时间里,我经历了许多挑战、收获了许多成就,也在不断地成长和改变。回首这四年的点点滴滴,我深…

linux docker 怎么更换镜像源

要设置Docker镜像,您可以按照以下步骤进行: 1. 打开终端并登录到Docker主机上。 运行以下命令来编辑 Docker 的配置文件 "/etc/docker/daemon.json"(如果不存在则新建): sudo nano /etc/docker/daemon.js…

Django系列之Celery异步框架+RabbitMQ使用

在Django项目中,如何集成使用Celery框架来完成一些异步任务以及定时任务呢? 1. 安装 pip install celery # celery框架 pip install django-celery-beat # celery定时任务使用 pip install django-celery-results # celery存储结果使用2. Django集成…

URIBuilder与SSRF

在使用一个静态扫描工具时,报了一个SSRF的问题,经过数据流的分析,导致此工具报SSRF的原因是在调用URIBuilder的setPath函数时,参数是从请求里获取的,导致了数据流被污染,因此认为由URIBuilder构造的URL也被…

作为一个产品经理带你了解Axure的安装和基本使用

1.Axure的简介 Axure是一种强大的原型设计工具,它允许用户创建交互式的、高保真度的原型,以及进行用户体验设计和界面设计。Axure可以帮助设计师和产品经理快速创建和共享原型,以便团队成员之间进行沟通和反馈。Axure提供了丰富的交互组件和功…

【EI会议征稿中|JPCS出版】第三届电子与集成电路技术国际学术会议(EICT 2024)

第三届电子与集成电路技术国际学术会议(EICT 2024) 2024 3rd International Conference on Electronics and Integrated Circuit Technology 第三届电子与集成电路技术国际学术会议(EICT 2024)将于2024年4月12至14日在南昌市举行…

Vue3封装一个轮播图组件

先看效果 编写组件代码 CarouselChart.vue <template><div classimg-box><el-button clickpreviousImages v-ifprops.showBtn>←</el-button><div classimg><div styledisplay: flex;gap: 20px idmove><imgclassimg-item v-for(item…

Github上火爆的个人知识管理AI大脑:Quivr

Github上火爆的个人知识管理AI大脑&#xff1a;Quivr。 演示视频&#xff1a; Github上火爆的个人知识管理AI大脑&#xff1a;Quivr 点击上面视频观看&#xff01;&#xff01;&#xff01; II. Quivr 的强大功能 与文件和应用程序聊天 把你的文件和应用看成你的对话伙伴&…

“险棋”更是“好棋”,鸿蒙生态为什么值得加入?

作者 | 曾响铃 文 | 响铃说 支付宝大张旗鼓与鸿蒙合作后&#xff0c;已经有高德地图、哔哩哔哩、阿里钉钉、美团、支付宝、小红书等十多个领域的独角兽企业集体宣布将开发鸿蒙原生应用&#xff0c;携手华为共同推动鸿蒙生态发展。 早前&#xff0c;有关华为鸿蒙系统可能将于…

Java中的IO流③——转换流、序列化流、反序列化流、打印流

目录 转换流 代码演示 总结 序列化流&反序列化流 序列化流 构造和成员方法 细节 代码演示 反序列化流 代码演示 序列化流和反序列化流细节 综合练习 打印流 字节打印流 代码演示 字符打印流 代码演示 总结 转换流 转换流可以将字节流转成字符流&#xff0…

【MySQL】:表的操作

表的操作 一.创建表二.查看表结构三.修改表四.删除表 一.创建表 field 表示列名。 datatype 表示列的类型。 character set 字符集&#xff0c;如果没有指定字符集&#xff0c;则以所在数据库的字符集为准。 collate 校验规则&#xff0c;如果没有指定校验规则&#xff0c;则以…