首页 > 编程语言 >java基础-异常处理(六)

java基础-异常处理(六)

时间:2023-04-23 13:33:59浏览次数:29  
标签:java 处理 抛出 try catch 异常 throws


异常处理,

出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系

--------java.lang.Throwable

Throwable可抛出的。

    |--Error错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。

    |--Exception异常,可以有针对性的处理方式

无论是错误还是异常,它们都有具体的子类体现每一个问题,它们的子类都有一个共性,就是都以父类名才作为子类的后缀名

 

这个体系中的所有类和对象都具备一个独有的特点;就是可抛性。

可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字所操作。

在开发时,如果定义功能时,发现该功能会出现一些问题,应该将问题在定义功能时标示出来,这样调用者就可以在使用这个功能的时候,预先给出处理方式。

 

如何标示呢?通过throws关键字完成,格式:throws 异常类名,异常类名...

这样标示后,调用者,在使用该功能时,就必须要处理,否则编译失败。

 

处理方式有两种:1、捕捉;2、抛出。

对于捕捉:java有针对性的语句块进行处理。

异常的代码块固定格式

try {
    需要被检测的代码;
}
catch(异常类 变量名){
    异常处理代码;
}
fianlly{
    一定会执行的代码;
}

 

异常处理原则:功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。

 

特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。

 

不要简单定义一句,e.printStackTrace();

也不要简单的就书写一条输出语句,这些异常信息要打印到一个文件里

 

自定义异常:

必须是自定义类继承Exception

继承Exception原因:

异常体系有一个特点,因为异常类和异常对象都被抛出 

他们都具备可抛性,这个可抛性是Throwable这个体系中独有特点,只有这个体系中的类和对象才能被 throw 和throws 操作

 

对多异常的处理:

1、声明异常时,建议声明更为具体的异常,这样处理的可以更具体

2、对方声明几个异常,就对应有几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常catch块在最下面

 

throws和throw的区别

throws使用在函数上

throw使用在函数内

throws后面跟的异常类,可以跟多个,用逗号隔开

throw后跟的异常对象

 

自定义异常时,如果该异常的发生,无法在继续进行计算

就让自定义异常继承RuntimeException。 

 

对于异常可以分类两种:

1、编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。

声明的原因:是需要调用者对该异常进行处理。

2、运行时异常如果在函数内被抛出,在函数上不需要声明。

不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正

 

定义异常处理时,什么时候定义try,什么时候定义throws呢?

功能内部如果出现异常,如果内部可以处理,就用try;

如果功能内部处理不了,就必须声明出来,让调用者处理。

 

 

自定义异常的步骤:

1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性。

2:通过throw 或者throws进行操作。

class Demo
{
    int div(int a ,int b)
    {
        return a/b;
    }
}
class ExceptionDemo
{
    public static void main(String[] args)
    {
        
        Demo d = new Demo();
        int x = d.div(4,1);
        System.out.println("x+"+x);
        System.out.println("over");

    }    
}

 

总结:

异常是什么,是对问题的描述,将问题进行对象封装

异常体系:

Throwable

       |--Errror

       |--Exception

                |--RuntimeException

异常体系的特点:异常体系的所有类以及建立的对象都具有可抛性

                            也就是说可以被throw和throws关键字所操作

                            只有异常体系具备这个特点

throw 和throws的用法:

throw 是在函数内,抛出的异常对象

throws是在函数上,抛出的是异常类,并且可以抛出多个 用逗号隔开

当函数内有异常抛出的时候,需要再函数上声明异常,否则编译失败

但是函数内如果有个特殊的是抛出RuntimeException异常的时候,在函数上不用声明

 

当函数上声明了异常的时候,调用者就要用try {}catch(){}  或者抛出throws给虚拟机

异常的有两种:

编译时的异常,该异常在编译时,如果没有处理(没有抛也没有try),编译失败

该异常被标识,代表这可以被处理

运行时的异常,(编译时不检测)

在编译时,不需要处理,编译不检查

该异常的发生建议不处理,让程序停止,需要对代码进行修正。

 

异常的处理代码块有三种:

1、try
{
}catch()
{
}
2、try
{
}
catch()
{
}
finally
{
} 
3、try
{
}
finally
{
}

记住一点:catch是处理异常的,如果没有catch就代表没有处理异常,如果这个异常是检测时异常,那么必须声明

 

自定义异常的 继承的两个类 一个Exception 一个是RuntimeException 

1、让自定义类具备可抛性

2、让该类具备操作异常的共性方法

异常信息传递给父类的构造函数

class MyException extends Exception
{
    MyExcetpion(String msg)
    {    
        super(msg);
    }
}

异常的好处,

1、将问题进行封装

2、将正常流程代码和问题处理代码相分离,方便阅读

异常的处理原则

1、处理方式有两种一种是 try 一种是throws 

2、调用到抛出异常的功能时,抛出几个,就处理结果

3、多个catch,父类的catch放到最下面

4、catch内,要定义针对性的处理方式,不要简单的定义printStackTrace ,输出语句

 

标签:java,处理,抛出,try,catch,异常,throws
From: https://blog.51cto.com/u_16084838/6217463

相关文章

  • jmeter之仅一次控制器、If控制器、前置处理器beanshell、后置处理器beanshell
    1、仅一次控制器作用是把请求放到仅一次里面的时候,不管循环数写几次,放到仅一次控制器里的请求都只跑一次,大部分用在登录,一般就登录一次就可以了,还有jdbc连接也是连接一次就可以了,不用重复连接。2、If控制器如果(If)控制器,if控制器如果里面的条件不满足,是不执行里面的请求的,看用户自......
  • odoo中打印模板处理selection字段
    在odoo中处理selection字段,通常情况下,如果拿到的是key,还要再翻译成value.这里可以用fields_get()这个函数,来实现这个问题${dict(item.fields_get(allfields=['type_id'])['type_id']['selection']).get(item.type_id)} 这里的item是数据集‘type_id’selection的字段......
  • Java SpringBoot 7z 压缩、解压
    JavaSpringBoot7z压缩、解压JavaSpringBoot7z压缩、解压cmd7z文件压缩7z压缩测试添加依赖<dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.12</versi......
  • Docker 启动异常 不显示报错信息
    错误的启动配置sudodockerrun--rm-d\-p80:80-p443:443nginx执行结果为返回容器id,但容器未启动,无报错信息sudodockerrun--rm-itd\-p80:80-p443:443nginxbash执行结果为容器启动并在后台挂起,但nginx未启动成功,无报错信息sudodockerrun......
  • 关于ssh密码忘记的处理
    01.任意文件位置运行 GitBashHere02.切换到ssh目录:  cd~/.ssh03.查看ssh内容:如果之前已经生成过ssh公钥,则存在三个文件04.删除所有SSH 相关内容: rm-rf~/.ssh/*此时再用 ls指令,已经查不到任何内容了05.创建新的ssh:  ssh-keygen-t......
  • jackson将java对象转换为json字符串
    1.1. 下载jacksonJackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。下载地址:http://jackson.codehaus.org/1......
  • 力扣844(Java)-比较含退格的字符串(简单)
    题目:给定s和t两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true。#代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。 示例1:输入:s="ab#c",t="ad#c"输出:true解释:s和t都会变成"ac"。示例2:输入:s="ab##",t="c#d#"输出:true......
  • java:文件写入BufferedOutputStream写入字节和PrintWriter写入字符
    BufferedOutputStream和FileOutputStream写入二进制字节方法定义publicBufferedOutputStream(OutputStreamout){示例BufferedOutputStreamwriter=newBufferedOutputStream(newFileOutputStream("demo.txt"));writer.write("helloworld".getBytes());w......
  • SpringBoot中底层对 /health 的请求是怎么处理的?
     在SpringBoot应用程序中,/health端点是通过HealthEndpointbean来处理的。当您访问/health端点时,SpringBoot会调用HealthEndpointbean的health()方法来检查应用程序的健康状态,并返回相应的响应。HealthEndpointbean是通过HealthEndpointAutoConfiguration自......
  • 数据库open报ORA-07445 kglsget错误处理----惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:数据库open报ORA-07445kglsget错误处理作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]有朋友反馈,数据库服务器断电之后,强制拉库无法open成功WedApr1918:13:302023A......