Throwable_error_Exception

2024-09-01 11:38
文章标签 error exception throwable

本文主要是介绍Throwable_error_Exception,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


一,概述:

1,异常和错误:Java编译或运行时期发生的不正常行为。运行时除了exception还有error

异常Exception:通常发生的错误可以有针对性的处理方式。

错误error:通常发生后不会有针对性的处理方式,error 的发生通常都是系统级别的问题,都是有jvm所在的系统发生的病反馈给jvm虚拟机的,无法针对性的处理,只能修改代码。
2,异常的分类:
异常分为受查异常和运行时异常,两者都在异常类的层次结构中。
受查异常(checked exceptions),:受查异常,必须被try{}catch捕获,或者在方法签名中,通过throws子句声明。受检查的异常必须在编译被捕获时捕捉处理,命名为CheckedException是因为将AVAV要进行检查,java虚拟机也要进行检查,以确保这个规则得到遵守。
运行时异常(runtime exceptions) 需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除...
而声明为Error的,则属于严重错误,需要根据业务信息进行特殊处理,Error不需要捕捉。

图例:异常类的继承关系(红色为受查异常,黑色为运行时异常):



3,异常发生的细节:

主函数收到异常对象。没有处理,main函数就会继续抛出给调用者jvm,jvm收到问题后,就做出了最终的处理方式,将问题对象中的名称,信息,问题的位置,都显示在屏幕上,让软件使用者知道。同时让程序提前终止。
二,Throwable类:

1,throwable类:
是Java语言中所有错误或异常的超类,只有当对象是此类(或其子类之一)的实例时,才能通过Java虚拟机或者Java throw语句抛出,类似,只有此类或其子类之一才可以是catch子句中的参数类型。

2,方法:
构造方法:
Throwable()  构造一个将null 作为其详细消息的新 throwable。
Throwable(String message,Throwable cause) 构造一个带指定详细消息和 cause 的新 throwable。

一般方法:

printStackTrace()   将此 throwable 及其追踪输出至标准错误流。
 getStackTrace()  提供编程访问由 printStackTrace() 输出的堆栈跟踪信息。
toString()    返回此 throwable 的简短描述。


3,一些主要子类对应的异常处理功能简要说明如下:

ArithmeticException——由于除数为0引起的异常; 
ArrayStoreException——由于数组存储空间不够引起的异常;     
ClassCastException—一当把一个对象归为某个类,但实际上此对象并不是由这个类 创建的,也不是其子类创建的,则会引起异常; 
IllegalMonitorStateException——监控器状态出错引起的异常;    
NegativeArraySizeException—一数组长度是负数,则产生异常;  
NullPointerException—一程序试图访问一个空的数组中的元素或访问空的对象中的 方法或变量时产生异常;
  当应用程序试图在需要对象的地方使用null时,抛出该异常,这种情况包括:
1,调用null对象的实例方法。
2,访问或修改null对象的字段。
3,将null作为一个数组,获得其长度。
4,将null作为一个数组,访问或修改其时间片。
5,将空作为throwable值抛出。
OutofMemoryException——用new语句创建对象时,如系统无法为其分配内存空 间则产生异常; 
SecurityException——由于访问了不应访问的指针,使安全性出问题而引起异常

IndexOutOfBoundsExcention——由于数组下标越界或字符串访问越界引起异常;用非法索引访问数组时抛出的异常,如果索引为负或大于等于数组大小,则该索引为非法索引。 
IOException——由于文件未找到、未打开或者I/O操作不能进行而引起异常;   
ClassNotFoundException——未找到指定名字的类或接口引起异常;   

CloneNotSupportedException——一程序中的一个对象引用Object类的clone方法,但 此对象并没有连接Cloneable接口,从而引起异常;
InterruptedException—一当一个线程处于等待状态时,另一个线程中断此线程,从 而引起异常,有关线程的内容,将在下一章讲述;     
NoSuchMethodException一所调用的方法未找到,引起异常;   
Illega1AccessExcePtion—一试图访问一个非public方法;     
StringIndexOutOfBoundsException——访问字符串序号越界,引起异常; 
ArrayIdexOutOfBoundsException—一访问数组元素下标越界,引起异常;  
NumberFormatException——字符的UTF代码数据格式有错引起异常;  
IllegalThreadException—一线程调用某个方法而所处状态不适当,引起异常;   
FileNotFoundException——未找到指定文件引起异常;    

EOFException——未完成输入操作即遇文件结束引起异常。

4,异常-finally的使用:
需求:有一些特定的代码无论是否发生异常都需要执行,因为异常会引发程序的跳转,导致有些语句执行不到,无法满足这个要求。异常捕获处理时Java提供的解决方案:try catch  finally语句,finally就是解决这个问题的,finally中存放的代码无论如何都会执行。

注意:有一种情况发生finally代码也会不执行:system。exit();退出jvm。

5,自定义异常:必须是继承throwable类,或者继承throwable的子类。该对象才可以被throw抛出。可抛性:可以被throw关键字操作。

三,try catch;try finally;try catch finally语句:
1,try catch:对代码进行异常检测,并对检测的异常传递给catch处理,异常捕获处理:
void show()//不用throws
{try{throw new Exception();}catch(Exception e){}
}

2,try finally:对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出,异常是没有捕获处理的,但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。
void show()//需要throws
{try{throw new Exception();}finally{}
}

3,try catch finally:检测异常,并传递给catch处理,并定义资源释放。
异常在继承或者实现中的使用细节:*****
1,子类覆盖父类方法时,如果父类的方法声明异常,子类只能抛出父类异常或者该异常的子类,或者不声明。
2,当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集。
3,当被覆盖的方法没有异常声明时,子类覆盖时无法声明异常的。
举例:父类存在这种情况,接口也有这种情况,
问题:接口中没有声明异常,而实现的子类覆盖方法时发生了异常。
无法进行throws声明,只能catch的捕获。万一问题处理不了呢?
catch中继续throw抛出,但是只能将异常转换成runtime异常的子类抛出。
Inteface Inter{public void show();}class demo implement Inter {public void show(){try{throw new Exception();	}catch(Exception e){code.....throw new RuntimeException("");//告知调用者问题所在。 }}}


四,细节:

1,throw和throws区别:
1,throw用在函数内。throws用在函数上。
2,throw抛出的是异常对象,
throws用于进行异常类的声明,后面异常类可以有多个,用逗号隔开。
3,hrows是用来声明一个方法可能抛出的所有异常信息throw则是指抛出的一个具体的异常类型。
4,两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
5,throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。






这篇关于Throwable_error_Exception的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126833

相关文章

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

收藏:解决 pip install 出现 error: subprocess-exited-with-error 错误的方法

在使用 pip 安装 Python 包时,有时候会遇到 error: subprocess-exited-with-error 错误。这种错误通常是由于 setuptools 版本问题引起的。本文将介绍如何解决这一问题 当你使用 pip install 安装某个 Python 包时,如果 setuptools 版本过高或过低,可能会导致安装过程出错,并出现类似以下错误信息:error: subpr

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 (debug笔记)

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 ##一、 缘由及解决方法 把这个pytorch-ddpg|github搬到jupyter notebook上运行时,出现错误Nn criterions don’t compute the gradient w.r.t. targets error。注:我用

src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没有那个文件或目录

(venv) shgbitai@shgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddeviceCollecting pyaudioDownloading PyAudio-0.2.14.tar.gz (47 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ERROR 2003 (HY000): Can't connect to MySQL server on (10061)

在linux系统上装了一个mysql-5.5,启动后本机都是可以访问的,操作都正常,同时建了一个%的用户(支持远程访问), root@debian:/# mysql -u loongson -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id

pip install pyaudio sounddevice error: externally-managed-environment

shgbitai@shgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddeviceerror: externally-managed-environment× This environment is externally managed╰─> To install Python package

C++常见异常汇总(三): fatal error: google/protobuf/port_def.inc

文章目录 1、fatal error : sw/redis++/redis.h2、fatal error: dwarf.h: No such file or directory3、fatal error: elfutils/libdw.h: No such file or directory4、fatal error: libunwind.h: No such file or directo

error while loading shared libraries: libnuma.so.1: cannot open shared object file:

腾讯云CentOS,安装Mysql时: 1.yum remove libnuma.so.1 2.yum install numactl.x86_64

【NodeJS】Error: Cannot find module 'ms'

转载自:http://blog.csdn.net/echo_ae/article/details/75097004 问题: Error: Cannot find module 'ms'at Function.Module._resolveFilename (module.js:469:15)at Function.Module._load (module.js:417:25)at Module

myEclipse失去焦点时报错Unhandled event loop exception的解决方案

一句话:百度杀毒惹的祸。。。。果断卸载后问题解决。