百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

程序员必备:异常的十个关键知识点

lipiwang 2024-10-23 14:02 8 浏览 0 评论

一. 异常是什么

异常是指阻止当前方法或作用域继续执行的问题。比如你读取的文件不存在,数组越界,进行除法时,除数为0等都会导致异常。

一个文件找不到的异常:

运行结果:

Exception in thread "main" java.io.FileNotFoundException: jaywei.txt (系统找不到指定的文件。)

at java.io.FileInputStream.open0(Native Method)

at java.io.FileInputStream.open(FileInputStream.java:195)

at java.io.FileInputStream.<init>(FileInputStream.java:138)

at java.io.FileInputStream.<init>(FileInputStream.java:93)

at exception.TestException.main(TestException.java:10)

二. 异常的层次结构

Error

表示编译时或者系统错误,如虚拟机相关的错误,OutOfMemoryError等,error是无法处理的。

Exception

代码异常,Java程序员关心的基类型通常是Exception。它能被程序本身可以处理,这也是它跟Error的区别。

它可以分为RuntimeException(运行时异常)和CheckedException(可检查的异常)。

常见的RuntimeException异常:

- NullPointerException 空指针异常

- ArithmeticException 出现异常的运算条件时,抛出此异常

- IndexOutOfBoundsException 数组索引越界异常

- ClassNotFoundException 找不到类异常

- IllegalArgumentException(非法参数异常)

常见的 Checked Exception 异常:

- IOException (操作输入流和输出流时可能出现的异常)

- ClassCastException(类型转换异常类)

  • Checked Exception就是编译器要求你必须处置的异常。
  • 与之相反的是,Unchecked Exceptions,它指编译器不要求强制处置的异常,它包括Error和RuntimeException 以及他们的子类。
  • 三、异常处理

    当异常出现后,会在堆上创建异常对象。当前的执行路径被终止,并且从当前环境中弹出对异常对象的引用。这时候异常处理程序,使程序从错误状态恢复,使程序继续运行下去。

    异常处理主要有抛出异常、捕获异常、声明异常。如图:

    捕获异常

    try{

    // 程序代码

    }catch(Exception e){

    //Catch 块

    }finaly{

    //无论如何,都会执行的代码块

    }

    声明抛出异常

    //该方法通过throws声明了IO异常。

    private void readFile() throws IOException {

    InputStream is = new FileInputStream("jaywei.txt");

    int b;

    while ((b = is.read()) != -1) {

    }

    }

    抛出异常

    throw关键字作用是抛出一个 Throwable类型的异常,它一般出现在函数体中。在异常处理中,try语句要捕获的是一个异常对象,其实此异常对象也可以自己抛出。

    例如抛出一个 RuntimeException 类的异常对象:

    throw new RuntimeException(e);

    任何Java代码都可以通过 Java 的throw语句抛出异常

    Java异常类的几个重要方法

    getMessage

    Returns the detail message string of this throwable.

    getMessage会返回Throwable的 detailMessage属性,而 detailMessage就表示发生异常的详细消息描述。

    举个例子, FileNotFoundException异常发生时,这个 detailMessage就包含这个找不到文件的名字。

    getLocalizedMessage

    Creates a localized description of this throwable.Subclasses may override this

    method in order to produce alocale-specific message. For subclasses that do not

    override thismethod, the default implementation returns the same result

    as getMessage()

    throwable的本地化描述。子类可以重写此方法,以生成特定于语言环境的消息。对于不覆盖此方法的子类,默认实现返回与相同的结果 getMessage()。

    getCause

    Returns the cause of this throwable or null if thecause is nonexistent or unknown.

    返回此可抛出事件的原因,或者,如果原因不存在或未知,返回null。

    printStackTrace

    Prints this throwable and its backtrace to thestandard error stream.

    The first line of output contains the result of the toString() method for

    this object.Remaining lines represent data previously recorded by the

    method fillInStackTrace().

    该方法将堆栈跟踪信息打印到标准错误流。

    输出的第一行,包含此对象toString()方法的结果。剩余的行表示,先前被方法fillInStackTrace()记录的数据。如下例子:

    java.lang.NullPointerException

    at MyClass.mash(MyClass.java:9)

    at MyClass.crunch(MyClass.java:6)

    at MyClass.main(MyClass.java:3)

    相关推荐

    前端入门——css 网格轨道详细介绍

    上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...

    Islands Architecture(孤岛架构)在携程新版首页的实践

    一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...

    HTML中script标签中的那些属性

    HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...

    CSS 中各种居中你真的玩明白了么

    页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...

    CSS样式更改——列表、表格和轮廓

    上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...

    一文吃透 CSS Flex 布局

    原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...

    css实现多行文本的展开收起

    背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...

    css 垂直居中的几种实现方式

    前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...

    WordPress固定链接设置

    WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...

    面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿

    前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...

    3种CSS清除浮动的方法

    今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...

    2025 年 CSS 终于要支持强大的自定义函数了?

    大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...

    css3属性(transform)的一个css3动画小应用

    闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...

    CSS基础知识(七)CSS背景

    一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...

    CSS 水平居中方式二

    <divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...

    取消回复欢迎 发表评论: