首页 > 编程语言 >java基础-异常

java基础-异常

时间:2023-04-09 15:15:47浏览次数:74  
标签:语句 java 抛出 基础 方法 try finally 异常

1.简介

如果某个方法不能按照正常的途径完成任务,在这种情况下会抛出一个封装了错误信息的对象,此时这个方法会立刻退出同时不返回任何值,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器

自定义异常的话是继承一个异常类,通常是RumtimeException或者Exception

异常使用的原则

不要将异常处理用于正常的控制流

优先使用标准的异常,建议抛出更加具体的异常

异常信息一定要有意义,每个方法抛出的异常都要有文档,使用日志打印异常之后就不要再抛出异常了

不要在catch中忽略掉捕获到的异常

Java语言如何进行异常处理

Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。try用来指定—块预防所有异常的程序;catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型;throw语句用来明确地抛出一个异常;throws用来声明一个方法可能抛出的各种异常(当然声明异常时允许无病呻吟);finally为确保一段代码不管发生什么异常状况都要被执行

try语句可以嵌套,每当遇到一个try语句,异常的结构就会被放入异常栈中,直到所有的try语句都完成。如果下一级的try语句没有对某种异常进行处理,异常栈就会执行出栈操作,直到遇到有处理这种异常的try语句或者最终将异常抛给JVM

Throwable类常用方法

String getMessage():返回异常发生时的简要描述

String toString():返回异常发生时的详细信息

String getLocalizedMessage():返回异常对象的本地化信息。使用Throwable的子类覆盖这个方法,可以生成本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与getMessage返回的结果相同

void printStackTrace():在控制台上打印Throwable对象封装的异常信息

finlly不会执行的情况

在finally语句块第一行发生了异常。因为在其他行finally块还是会得到执行

在前面的代码中用了System.exit(int)已退出程序。exit是带参函数,若该语句在异常语句之后,finally会执行

程序所在的线程死亡

关闭cpu

try里有一个return语句,那么紧跟在这个try后的finally里的代码会不会被执行,什么时候被执行,在return前还是后

会在方法返回调用者前执行

如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,就会返回修改后的值

在finally中直接返回值也是不好的,因为这样会直接在finally中就把结果返回了,因此C#中直接用编译错误的方式来阻止程序员干上面两种龌龊的事情,Java中也可以通过提升编译器的语法检查级别来产生警告或错误

2.异常分类

受检查异常编译器在编译期间检查,对于这种异常,方法强制处理或者通过throws子句声明,不处理的话无法通过编译器的检查

非受检查异常是RuntimeException的子类,在编译阶段不受编译器的检查

受检异常

没有匹配方法的异常,没有匹配属性的异常,类找不到异常,方法找不到异常

运行时异常(非受检异常):

3.异常的处理方式

3.1.throw,throws抛出异常

位置不同:throws用在函数上,后面跟的是异常类,可以跟多个,而throw用在函数内,后面跟具体异常

功能不同:throws用来声明异常,让调用者只知道该方法可能出现的问题,可以给出预先的处理方式,throw抛出具体的问题对象,执行到throw方法就已经结束了,并将具体的问题对象抛给调用者

两者都是消极处理异常的方式,只是抛出或者可能抛出异常,真正的处理异常由函数的上层调用处理

3.2.try catch finally捕获异常

Try块必须存在,catch和finally可以不存在,但不能同时不存在

3.3.try with resources

面对必须要关闭的资源,我们应该优先使用try-with-resources而不是try-finally,因此这样的代码更简短清晰

到了java1.7后try-with-resources可以写成下面的形式

 

 

标签:语句,java,抛出,基础,方法,try,finally,异常
From: https://www.cnblogs.com/zz-coding/p/17300327.html

相关文章

  • 9_1 程序设计语言与语言处理程序基础
    9.1法律法规知识(知识产权)前言9.2法律法规知识(保护期限)9.3法律法规知识(知识产权人确定)委托创作,合作开发9.4法律法规知识(侵权判定)9.5法律法规知识(标准的分类与标准的编号)......
  • kotlin minOf 发出NoSuchElementException异常,该如何解决
    kotlinminOf发出NoSuchElementException异常,该如何解决minOf函数在处理空集合时会抛出NoSuchElementException异常。解决该问题的方法取决于你的具体需求和代码实现方式。如果你期望集合可能为空,你可以使用minOrNull函数代替minOf函数。minOrNull函数返回集合中的最小......
  • 【Java】FileInputStream和FileOutputStream基本使用
    文章目录InputStream-字节输入流1.FileInputStream介绍2.FileOutputStream介绍3.文件的拷贝IO流-体系图文件VS流InputStream-字节输入流InputStream抽象类是所有类字节输入流的超类InputStream常用的子类FileInputStream:文件输入流BufferedInputStream:缓冲字节输入流O......
  • 【Java】FileReader和FileWrite基本使用
    文章目录1.FileReader和FileWriter是字符流,即按照字符来操作IO2.FileWriter常用方法3.案例演示1.FileReader和FileWriter是字符流,即按照字符来操作IOFileReader相关方法:newFileReader(File/String)read:每次读取单个字符,返回该字符,如果到文件末尾返回-13)read(char[):批量......
  • java设计模式之责任链模式
    责任链模式定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。其过程实际上是一个递归调用。特点: 1、有多个对象共同对一个任务进行处理。  2、这些对象使用链式存储结构,形成一......
  • Java for Web学习笔记(二六):JSTL(2)Core Tag(上)
    可以在JSP中替代Java代码的几乎所有功能,包括条件编程,循环,迭代和内容输出。taglib的directive如下:<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><c:out>AttributesNameRequiredRequest-timeTypeDescriptionvaluetruetruejava.lang.StringExpression......
  • Java for Web学习笔记(三):Servlet(1)Maven
    什么是Maven在http://maven.apache.org/中对Mavent进行介绍,可以:一、发布project信息二、管理Jar包三、提供uniformbuildsystem,使用POM(projectobjectmodel)如果我们使用Eclipse是最新的Mars版本,Maven已经集成进来,所以不需要进行额外的配置,当然,如果我们需要自行安装一个特定位......
  • java-信息安全(二十)国密算法 SM1,SM2,SM3,SM4
    一、概述国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法。SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进......
  • java基础-序列化和拷贝
    1.序列化1.1.定义如果我们需要持久化Java对象,或者在⽹络传输Java对象,这些场景都需要⽤到序列化,简单来说序列化就是将数据结构或对象转换成⼆进制字节流的过程,反序列化就是将在序列化过程中所⽣成的⼆进制字节流转换成数据结构或者对象的过程对于Java这种⾯向对象编程语⾔来说,......
  • Java生成PDF几种方式
    ##1、itextPDF直接填充<!--PDF工具类--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency>......