barriers / 阅读 / 详情

java异常分类

2023-07-17 11:46:24
TAG: ava ja java
共1条回复
阿啵呲嘚

一、概念

如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下

会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用

这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器。

二、异常分类

Throwable 是 Java 语言中所有错误或异常的超类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。

实例分为 Error 和 Exception 两种。

2.1、Error

Error 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果

出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。

2.2、Exception

Exception 又有两个分支 , 一个是运行时异常 RuntimeException , 一 个是检查异常 CheckedException。

RuntimeException 如 :NullPointerException 、 ClassCastException ;

CheckedException 如: I/O 错误导致的 IOException、SQLException。

RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 如果出现 RuntimeException,那么一

定是程序员代码书写导致的错误.

CheckedException:一般是外部错误,这种异常都发生在编译阶段,Java 编译器会强

制程序去捕获此类异常,即会出现要求你把这段可能出现异常的程序进行 try catch,该类异常一

般包括几个方面:

试图在文件尾部读取数据

试图打开一个错误格式的 URL

试图根据给定的字符串查找 class 对象,而这个字符串表示的类并不存在

三、异常的处理方式

3.1、不处理

遇到异常问题不进行具体处理,而是继续抛给调用者 (throw,throws)

抛出异常有三种形式,一是 throw,再就是 throws,还有一种系统自动抛异常。

public static void main(String[] args) {

String s = "abc";

if(s.equals("abc")) {

/** 手动抛出一个数字格式化异常 **/

throw new NumberFormatException();

} else {

System.out.println(s);

}

}

int div(int a,int b) throws Exception{

return a/b;

}

3.2、处理

try catch 捕获异常针对性处理方式

四、Throw 和 throws 的区别

throws 用在函数上,后面跟的是异常类,可以跟多个;

语法:(修饰符)(方法名)([参数列表])[throws(异常类)]{……}

public void doA(int a) throws Exception1,Exception3{……}

throw 用在函数内,后面跟的是异常对象。

throws E1,E2,E3只是告诉程序这个方法可能会抛出这些异常,方法的调用者可能要处理这些异常,而这些异常E1,E2,E3可能是该函数体产生的。

throw则是明确了这个地方要抛出这个异常。

结合来看:

void doA(int a) throws IOException,{

try{

......

}catch(Exception1 e){

throw e;

}catch(Exception2 e){

System.out.println("出错了!");

}

if(a!=b)

throw new Exception3("自定义异常");

}

throws 用来声明异常,让调用者知道该功能可能会出现的问题(比如上方的 IO 异常),可以给出预先的处理方式;

throw 抛出具体的问题对象,执行到 throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者。

也就是说 throw 语句独立存在时,下面不要定义其他语句,因为执行不到。

概括:

throws 表示出现异常的一种可能性,并不一定会发生这些异常;

throw 则是抛出了异常,执行 throw 则一定抛出了某种异常对象。

五、总结

了解 Exception、Error 两种异常的区别,面试可能会问。

区分 throws、throw使用维度。

相关推荐

throws抛出的异常必需被捕获吗

不一定啊关键字 xxx() throws Excepton{},表示此处不处理异常,交由方法调用处处理,就是向上抛出异常如果将 public void main(String [] args ) throws Exception 主方法将向上抛出异常,给jvm去处理了,此时主方法内的异常 就不需要处理
2023-07-17 11:14:003

throws,throw,try,catch,finally分别代表什么意

throws 扔的第三人称单数形式throw 扔try 尝试catch 抓住,接住finally 终于,最后
2023-07-17 11:14:072

Java:throw和throws有必要同时使用吗?

代码中抛出异常,只要不是runtime的,方法上必须得throws啊
2023-07-17 11:14:173

Java中throw是抛出异常对象,throws是抛出异常类,对吗?

没毛病
2023-07-17 11:14:282

throws java.io.IOException是什么意思,在程序中具体的用途是什么

IO错误,文件读写错误
2023-07-17 11:14:372

写了throws语句之后,一定要用try-catch捕获吗

写了不一定,的,如果你要处理这个异常,你才用,如果你不想用,当然可以不要try-catch,比如说我定义了一个函数int a() throw(...){ throw "I throw a exception!";}这里,函数a抛出了异常,但是我并没有捕获.但是,当我在别的函数里调用a函数的时候,一般就要捕获异常了。比如;int b() throw(){ try { a(); } catch(...) { //处理发生的异常 }}这是因为,我知道a函数可能会抛出异常
2023-07-17 11:14:441

throw和throws的用法

throw 是用在函数体里边,它抛出的异常如果没有在函数体里捕获,则必须用throws声明throws是用在函数声明后
2023-07-17 11:14:532

java什么时候必须使用throws

异常捕获有三种 就像数据库的一样可以用throws Exception 和try{}
2023-07-17 11:15:143

java中throws有什么用,就算不写throws,一样是可以向调用方法的方法抛出异常

你用try catch,当然throw没用了。两者的意义不同,throw是发现异常不进行任何处理,直接抛给上一级,在实际工作中开发项目这是不允许的!只要有可能发生异常的地方,都要用try catch捕获并对异常进行适当的处理,不可以把异常随便就往外抛。
2023-07-17 11:15:232

throws HeadlessException什么意思

http://docs.oracle.com/javase/6/docs/api/java/awt/HeadlessException.html这个异常的官方文档中文意思是当使用对显示设备,键盘,鼠标等的系统调用时,而本地的显示设备,键盘,鼠标等不支持调用就会出现该异常.
2023-07-17 11:15:311

java里什么时候用throws

你想要抛出异常的时候就是要用throws
2023-07-17 11:15:413

在Java中,throw与throws有什么区别?他们各自用在什么地方?

您好,提问者: 这里一言半句说也不清楚,请看CSDN的详细说明吧。 链接地址:http://blog.csdn.net/cynhafa/article/details/6821657
2023-07-17 11:15:503

throws ServletException, IOException的意思?

查看一下Httpservlet中的dopost()发现:调用了resp.sendError(...);方法,在这个方法中抛出了IOException。因为request的请求数据的接收和response的响应都是InputStream和OutputStream实现的。所以出现了IOException。ServletException,则是因为在覆盖dopost后,会对request和response对象进行操作,在这两个对象的一部分方法中抛出了ServletException,所以这里也要预见性的进行处理。以上是对使用时的理解,说明为什么出现了这两个异常。接下来从理论上再说一下:从接受到请求,到逻辑处理,到最后的响应。可以分为数据的传输,数据的处理。这两个异常便分别对应着IOException和ServletException,IOException表示接受数据或响应数据时出现了错误,ServletException则是进行数据的逻辑处理时出现了异常。
2023-07-17 11:16:051

java异常 throws与throw的用法

对于这个理解和应用是这样的,比如在项目开发中,定义好了接口,如果你想把接口里出错抛出来就用throw否则你就用try catch自己处理。我们开发一般分为action business dao三层如果dao插入数据出错了你用try,catch处理完页面无法知道错在哪里,你可以抛给business,business再抛到action,action再跳到相应的处理页面。try,catch相当于错误止于我这,你们就不用理了。而throw是把错误抛给别人处理自己不管了。这是两种完全不同的作法。
2023-07-17 11:16:133

在java中的方法后面加个throws抛出异常有什么作用?我试了不加的运行效果一样

有区别
2023-07-17 11:16:247

在java中,异常捕捉中,什么时候方法头就要加上throws,有时却又不要呢?

当方法里有异常时:有两种处理方式:1、抛出异常,交给调用者处理2、方法里自己将这个异常try catch,捕获异常,并进行异常处理第一种:抛出异常,交给调用者处理时,就需要在方法头上追加throws 来抛出可能发生的所有异常而第二种,使用try catch方法,将可能发生异常的代码包裹,进行异常处理,是不用在方法头上抛出异常的try{可能出现异常的代码...}catch(Exception ex){异常处理...}finally{不管是否出现异常,都将会执行,一般用于关闭释放资源..}
2023-07-17 11:16:543

java中throws的使用问题

throws是把要处理的异常给回避过去了,在当时不做处理,但是当调用抛方法的异常时候必须处理该方法回避的异常,当然,这时还可以回避此异常。就是这个意思,在实际应用中,比如数据库的操作, ResultSet Rs;当Rs.next() 方法时系统会提示你必须处理SQLException异常,但是此时你不想处理那么就用throws关键给回避掉。等调用这个方法的时候再处理异常,这样很多个异常只在一个方法里处理就好了,可以节省很多的代码。至于你说的什么情况下不用通过throws关键字声明转移异常,当你在这个方法中要处理这个异常的时候就不用了。不想处理就抛出去。有些异常是可处理也可不处理的比如控指针异常, 你可以不抛出的,但是系统会接收到,如果API中的方法定义是否回避了某个异常你再使用时会否必须处理该异常,不想再使用时候处理就必须回避掉。可能你听得有点模糊不懂在联系吧,你问的就含糊,对throws关键的真正用途还缺乏了解。
2023-07-17 11:17:042

java中方法后面用throws声明异常有什么意义

你可以自己定义异常是什么,并且给异常信息,如果别人调用你的方法时就要try/catch你封装的异常,这样只要执行有异常就知道你定义的异常信息是什么,方便别人封装或者修改!希望能帮到你!
2023-07-17 11:17:141

方法异常要向上抛出,关键字 throws 声明可能产生的异常 有什么用?是给谁看的?编译器还是人?

写了throws可以保证异常一定被捕获,而不写就没有这个限制了。如果你的代码里存在抛出导致系统崩溃的异常的可能性,那最好把throws写上,这样,在别人调用你的方法时,就必须显式的捕获你的异常,保证系统能继续运行或可靠关闭。楼上的太不负责了,这么一大堆东西怎么看啊?比较怀疑你自己是不是看了
2023-07-17 11:17:222

JAVA方法声明处的throws关键字,是说明这个方法可能有异常抛出吧?可能。那为什么有些方法一定要throws呢

throws 主要是给调用者看的,如果调用者发现这个方法抛出异常,那么他必须一:处理这个异常二:或者抛出这个异常
2023-07-17 11:17:323

Java异常处理中关键字throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

throws 声明异常throw 抛出异常try 捕捉异常catch 报出异常执行的操作finally 必须执行的代码 如:关闭Connection
2023-07-17 11:17:404

java中带有throws的方法中一定要加throw吗?

你可以这样写public void function() throws Exception { ...... throw new Exception(); ...... } 也可以这样写public void function() { try{..........}catch(Exception e){............}}
2023-07-17 11:17:505

不写throws程序出现异常也能抛出异常,那还需要写throws吗?

不加throws的方法只能抛出非受检异常(也叫运行时异常),要抛出受检异常则必须显式写明throws此异常或其父类异常。
2023-07-17 11:18:071

Java语言中throw和throws的区别是什么?

1、作用不同:throw用于程序员自行产生并抛出异常;throws用于声明在该方法内抛出了异常2、使用的位置不同:throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。3、内容不同:throw抛出一个异常对象,且只能是一个;throws后面跟异常类,而且可以有多个。
2023-07-17 11:18:293

Java中throw和throws有什么区别?

1、作用不同:throw用于程序员自行产生并抛出异常;throws用于声明在该方法内抛出了异常2、使用的位置不同:throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。3、内容不同:throw抛出一个异常对象,且只能是一个;throws后面跟异常类,而且可以有多个。
2023-07-17 11:18:535

throw的中文翻译

throw翻译如下:英[θru0259u028a]美[θrou028a]v. 投; 掷; 抛; 扔; 摔; 丢; 猛推; 使劲撞; 猛动(头、臂、腿); 使迅猛地摔倒在地; 使处于,使陷入(某种状态); 把…对准; 使心烦意乱; 掷(色子); (在陶钧上)把…拉制成坯; 照射(光线); 使变音; 挥拳猛击; 按动,扳动,推动; 突然发作(脾气等); 举行聚会; 故意输掉。n. 抛; 扔; 摔; 投(球); 掷(色子); 投掷的距离; (沙发等的)套,罩。[其他] 第三人称单数:throws 现在分词:throwing 过去式:threw 过去分词:thrown。throw 用法和例句Throw pillows and additional cushions are not always necessary .不必总是扔一些枕头和额外的靠垫。And if chinese firms throw subsidised capital around the world , that "s fine .即使中国把政府补贴的资本抛向全世界也没什么关系。Revelers throw tomatoes during the annual fight .年度大战中,狂欢的人们在投掷西红柿。The best part of the game was the slam-dunk from the free throw line .从罚球线上投的那个灌篮球是这场比赛最精彩的部分。They also eat small pieces of food that people throw away .它们同样也吃一小块人们丢给它们的食物。
2023-07-17 11:19:231

throw是什么意思

throw 英[θru0259u028a] 美[θrou028a] vi. 丢; 抛; 投掷; n. 丢; 投掷的距离; vt. 抛; 掷(色子); 猛动(头、臂、腿); 使处于,使限于; [例句]He spent hours throwing a tennis ball against a wall他好几个小时都对着一堵墙掷网球。[其他] 第三人称单数:throws 现在分词:throwing 过去式:threw过去分词:thrown
2023-07-17 11:19:411

throws FileNotFoundException 在JAVA中是什么意思??

用来抛出io的错误,不仅仅是文件读写,还包括很多stream的读写,而且throws是用来放在函数定义的函数体前函数名后的,表示这个函数将会在出现异常的书后会抛出io异常,所以在以后的程序中调用这个函数的时候就必须用try和catch来捕获异常,否则编译会抱错,这主要涉及到java的安全机制,可能规模小的程序不见的比if判断更方便,可是在多人开发的规模比较大的程序开发过程中就能充分体会他的好处
2023-07-17 11:20:211

JAVA书中写的throws IOException什么意思?

用来抛出io的错误,不仅仅是文件读写,还包括很多stream的读写,而且throws是用来放在函数定义的函数体前函数名后的,表示这个函数将会在出现异常的书后会抛出io异常,所以在以后的程序中调用这个函数的时候就必须用try和catch来捕获异常,否则编译会抱错,这主要涉及到java的安全机制,可能规模小的程序不见的比if判断更方便,可是在多人开发的规模比较大的程序开发过程中就能充分体会他的好处
2023-07-17 11:20:312

下面关于throws作用的描述中,正确的是()

下面关于throws作用的描述中,正确的是() A.一个方法上使用throws声明一个异常说明这个方法运行时一定会抛出这个异常B.throws可以声明在方法体中用来指定抛出的具体异常C.throws出现在方法函数头D.一个方法只能抛出一个异常信息正确答案:C
2023-07-17 11:20:381

Java 抛出异常是怎么回事?谢谢....望能提供答案........

一、Java异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。 有些异常需要做处理,有些则不需要捕获处理,后面会详细讲到。 天有不测风云,人有旦夕祸福,Java的程序代码也如此。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则在考虑异常发生时如何处理。 Java中的异常用对象来表示。Java对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class),每个异常都对应一个异常(类的)对象。 异常类从哪里来?有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。 异常的对象从哪里来呢?有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如除数为0的异常。二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是Java语言中定义的,用throw 关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。 异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。 Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行,一般结构如下: try{ 程序代码 }catch(异常类型1 异常的变量名1){ 程序代码 }catch(异常类型2 异常的变量名2){ 程序代码 }finally{ 程序代码 } catch语句可以有多个,用来匹配多个异常,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。catch的类型是Java语言中定义的或者程序员自己定义的,表示代码抛出异常的类型,异常的变量名表示抛出异常的对象的引用,如果catch捕获并匹配上了该异常,那么就可以直接用这个异常变量名,此时该异常变量名指向所匹配的异常,并且在catch代码块中可以直接引用。这一点非常非常的特殊和重要! Java异常处理的目的是提高程序的健壮性,你可以在catch和finally代码块中给程序一个修正机会,使得程序不因异常而终止或者流程发生以外的改变。同时,通过获取Java异常信息,也为程序的开发维护提供了方便,一般通过异常信息就很快就能找到出现异常的问题(代码)所在。 Java异常处理是Java语言的一大特色,也是个难点,掌握异常处理可以让写的代码更健壮和易于维护。 二、Java异常类类图 下面是这几个类的层次图: java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.Error java.lang.ThreadDeath 下面四个类的介绍来自java api 文档。 1、Throwable Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。 两个子类的实例,Error 和 Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。 2、Exception Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常。 3、Error Error 是 Throwable 的子类,表示仅靠程序本身无法恢复的严重错误,用于指示合理的应用程序不应该试图捕获的严重问题。 在执行该方法期间,无需在方法中通过throws声明可能抛出但没有捕获的 Error 的任何子类,因为Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。 4、RuntimeException RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过,这种异常可以通过改进代码实现来避免。 5、ThreadDeath 调用 Thread 类中带有零参数的 stop 方法时,受害线程将抛出一个 ThreadDeath 实例。 仅当应用程序在被异步终止后必须清除时才应该捕获这个类的实例。如果 ThreadDeath 被一个方法捕获,那么将它重新抛出非常重要,因为这样才能让该线程真正终止。 如果没有捕获 ThreadDeath,则顶级错误处理程序不会输出消息。 虽然 ThreadDeath 类是“正常出现”的,但它只能是 Error 的子类而不是 Exception 的子类,因为许多应用程序捕获所有出现的 Exception,然后又将其放弃。 以上是对有关异常API的一个简单介绍,用法都很简单,关键在于理解异常处理的原理,具体用法参看Java API文档。 三、Java异常处理机制 对于可能出现异常的代码,有两种处理办法: 第一、在方法中用try...catch语句捕获并处理异常,catach语句可以有多个,用来匹配多个异常。例如: public void p(int x){ try{ ... }catch(Exception e){ ... }finally{ ... } } 第二、对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常。例如: public void test1() throws MyException{ ... if(....){ throw new MyException(); } } 如果每个方法都是简单的抛出异常,那么在方法调用方法的多层嵌套调用中,Java虚拟机会从出现异常的方法代码块中往回找,直到找到处理该异常的代码块为止。然后将异常交给相应的catch语句处理。如果Java虚拟机追溯到方法调用栈最底部main()方法时,如果仍然没有找到处理异常的代码块,将按照下面的步骤处理: 第一、调用异常的对象的printStackTrace()方法,打印方法调用栈的异常信息。 第二、如果出现异常的线程为主线程,则整个程序运行终止;如果非主线程,则终止该线程,其他线程继续运行。 通过分析思考可以看出,越早处理异常消耗的资源和时间越小,产生影响的范围也越小。因此,不要把自己能处理的异常也抛给调用者。 还有一点,不可忽视:finally语句在任何情况下都必须执行的代码,这样可以保证一些在任何情况下都必须执行代码的可靠性。比如,在数据库查询异常的时候,应该释放JDBC连接等等。finally语句先于return语句执行,而不论其先后位置,也不管是否try块出现异常。finally语句唯一不被执行的情况是方法执行了System.exit()方法。System.exit()的作用是终止当前正在运行的 Java 虚拟机。finally语句块中不能通过给变量赋新值来改变return的返回值,也建议不要在finally块中使用return语句,没有意义还容易导致错误。 最后还应该注意一下异常处理的语法规则: 第一、try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。 第二、try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。 第三、多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。 第四、throw语句后不允许有紧跟其他语句,因为这些没有机会执行。 第五、如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。 那怎么判断一个方法可能会出现异常呢?一般来说,方法声明的时候用了throws语句,方法中有throw语句,方法调用的方法声明有throws关键字。 throw和throws关键字的区别 throw用来抛出一个异常,在方法体内。语法格式为:throw 异常对象。 throws用来声明方法可能会抛出什么异常,在方法名后,语法格式为:throws 异常类型1,异常类型2...异常类型n。 四、如何定义和使用异常类 1、使用已有的异常类,假如为IOException、SQLException。 try{ 程序代码 }catch(IOException ioe){ 程序代码 }catch(SQLException sqle){ 程序代码 }finally{ 程序代码 } 2、自定义异常类 创建Exception或者RuntimeException的子类即可得到一个自定义的异常类。例如: public class MyException extends Exception{ public MyException(){} public MyException(String smg){ super(smg); } } 3、使用自定义的异常 用throws声明方法可能抛出自定义的异常,并用throw语句在适当的地方抛出自定义的异常。例如: 在某种条件抛出异常 public void test1() throws MyException{ ... if(....){ throw new MyException(); } } 将异常转型(也叫转译),使得异常更易读易于理解 public void test2() throws MyException{ ... try{ ... }catch(SQLException e){ ... throw new MyException(); } } 还有一个代码,很有意思: public void test2() throws MyException{ ... try { ... } catch (MyException e) { throw e; } } 这段代码实际上捕获了异常,然后又和盘托出,没有一点意义,如果这样还有什么好处理的,不处理就行了,直接在方法前用throws声明抛出不就得了。异常的捕获就要做一些有意义的处理。 五、运行时异常和受检查异常 Exception类可以分为两种:运行时异常和受检查异常。 1、运行时异常 RuntimeException类及其子类都被称为运行时异常,这种异常的特点是Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。例如,当除数为零时,就会抛出java.lang.ArithmeticException异常。 2、受检查异常 除了RuntimeException类及其子类外,其他的Exception类及其子类都属于受检查异常,这种异常的特点是要么用try...catch捕获处理,要么用throws语句声明抛出,否则编译不会通过。 3、两者的区别 运行时异常表示无法让程序恢复运行的异常,导致这种异常的原因通常是由于执行了错误的操作。一旦出现错误,建议让程序终止。 受检查异常表示程序可以处理的异常。如果抛出异常的方法本身不处理或者不能处理它,那么方法的调用者就必须去处理该异常,否则调用会出错,连编译也无法通过。当然,这两种异常都是可以通过程序来捕获并处理的,比如除数为零的运行时异常: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!!!"); try{ System.out.println(1/0); }catch(ArithmeticException e){ System.out.println("除数为0!"); } System.out.println("除数为零后程序没有终止啊,呵呵!!!"); } } 运行结果: Hello World!!! 除数为0! 除数为零后程序没有终止啊,呵呵!!! 4、运行时错误 Error类及其子类表示运行时错误,通常是由Java虚拟机抛出的,JDK中与定义了一些错误类,比如VirtualMachineError 和OutOfMemoryError,程序本身无法修复这些错误.一般不去扩展Error类来创建用户自定义的错误类。而RuntimeException类表示程序代码中的错误,是可扩展的,用户可以创建特定运行时异常类。 Error(运行时错误)和运行时异常的相同之处是:Java编译器都不去检查它们,当程序运行时出现它们,都会终止运行。 5、最佳解决方案 对于运行时异常,我们不要用try...catch来捕获处理,而是在程序开发调试阶段,尽量去避免这种异常,一旦发现该异常,正确的做法就会改进程序设计的代码和实现方式,修改程序中的错误,从而避免这种异常。捕获并处理运行时异常是好的解决办法,因为可以通过改进代码实现来避免该种异常的发生。 对于受检查异常,没说的,老老实实去按照异常处理的方法去处理,要么用try...catch捕获并解决,要么用throws抛出! 对于Error(运行时错误),不需要在程序中做任何处理,出现问题后,应该在程序在外的地方找问题,然后解决。 六、异常转型和异常链 异常转型在上面已经提到过了,实际上就是捕获到异常后,将异常以新的类型的异常再抛出,这样做一般为了异常的信息更直观!比如: public void run() throws MyException{ ... try{ ... }catch(IOException e){ ... throw new MyException(); }finally{ ... } } 异常链,在JDK1.4以后版本中,Throwable类支持异常链机制。Throwable 包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。最后,它还可以包含 cause(原因):另一个导致此 throwable 抛出的 throwable。它也称为异常链 设施,因为 cause 自身也会有 cause,依此类推,就形成了异常链,每个异常都是由另一个异常引起的。 通俗的说,异常链就是把原始的异常包装为新的异常类,并在新的异常类中封装了原始异常类,这样做的目的在于找到异常的根本原因。 通过Throwable的两个构造方法可以创建自定义的包含异常原因的异常类型: Throwable(String message, Throwable cause) 构造一个带指定详细消息和 cause 的新 throwable。 Throwable(Throwable cause) 构造一个带指定 cause 和 (cause==null ? null :cause.toString())(它通常包含类和 cause 的详细消息)的详细消息的新 throwable。 getCause() 返回此 throwable 的 cause;如果 cause 不存在或未知,则返回 null。 initCause(Throwable cause) 将此 throwable 的 cause 初始化为指定值。 在Throwable的子类Exception中,也有类似的指定异常原因的构造方法: Exception(String message, Throwable cause) 构造带指定详细消息和原因的新异常。 Exception(Throwable cause) 根据指定的原因和 (cause==null ? null : cause.toString()) 的详细消息构造新异常(它通常包含 cause 的类和详细消息)。 因此,可以通过扩展Exception类来构造带有异常原因的新的异常类。 七、Java异常处理的原则和技巧 1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。 2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。 3、catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。 4、不要把自己能处理的异常抛给别人。 5、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。
2023-07-17 11:20:451

JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意

(1)try、catch、fially异常在Java中代表一个错误的实体对象,在特定错误发生时会丢出特定的异常对象,有些预期中可能发生的异常,编译器会提醒你先行处理,对于一些程序运行时所发生的执行时异常,你有机会捕捉这些异常,并尝试将程序恢复至正常运行状态。在Java中如果想尝试捕捉异常,可以使用try、catch、finally 3个关键词组合的语法来达到目的。其语法基本结构如下:try{ //语句}catch(异常类型 名称){ //异常处理}finally{ //一定会处理的区块}一个try语法所包括的区块,必须有对应的catch区块或finally区块。try区块可以搭配多个catch区块,如果设置了catch区块,则finally区块可有可无;如果没有定义catch区块,则一定要有finally区块。(2)throw和throws①当程序发生错误而无法处理时,会丢出对应的异常对象。除些之外,在某些时刻,你可能会想要自行丢出异常。若想要自行丢出异常,可以使用throw关键词,并生成指定的异常对象。例如:throw new ArithmeticException();下面给出一个例子:public class ThrowDemo{ public static void main(String[] args){ try{ double data = 100 / 0.0; System.out.println("浮点数除以零:"+data); if(String.valueOf(data).equals("Infinity") throw new ArithmeticException("除零异常"); } catch(ArithmeticException e){ System.out.println(e); } }}执行结果如下:浮点数除以零:Infinityjava.lang.ArithmeticException: 除零异常②如果在方法中会有异常发生,而你并不想在方法中直接处理,而想要由调用方法的调用者来处理,则可以使用throws关键词来声明这个方法将会丢出异常。例如java.ioBufferedReader的readLine()方法就声明会丢出java.io.IOException。可以这样使用throws来丢出异常:private void someMethod(int[] arr) throws ArrayIndexOutOfBoundsException, ArithmeticException{ //实现}
2023-07-17 11:21:044

JAVA WEB问题:throws servlet Exception,IOException这个是有什么作用?

在Java中有异常处理机制,其作用和处理就不多说了,这里我只说throws和throw的区别。 throws是方法体签名使用,也就是只能用在方法的后面,比如main()throws servlet Exception,IOException就表明这个方法会抛出Exception,IOException异常,至于具体抛出什么异常,不用我们操心,JVM会处理。比如你用到了File类的一些方法,如果你不给这个方法声明抛出异常,那么它就会报错。处理这个报错有两种方法,一种是在方法体内写try{}cathc{}方法块进行判断,另一种是直接在方法体后声明抛出异常,交给java处理。 而throw是抛出一个具体的异常实例,是要写在方法体里面的。比如throw new Exception()等等。
2023-07-17 11:21:141

c#throw和throws的区别

throw 是用在方法体里的,用来抛出异常而 throws 是用在方法定义旁边的,告诉调用方这个方法可能会抛出的异常,需要处理
2023-07-17 11:21:211

java throws 有几个抛异常都不能用 怎么回事

因为这三个是运行时异常,所以不能声明抛出。如果是想要自行抛出,请使用throw关键字注意throw和throws的S(应该把 这一类型的真没见过
2023-07-17 11:21:301

try、catch、throw、throws、finally关键字用途是什么?

【答案】:a) try:保护代码,如果try中某行代码出现异常,则try中代码不再继续执行。b) catch:捕获异常,当try中出现异常,则catch负责捕获异常,并处理。c) throw:抛出异常。d) throws:声明异常。e) finally:无论try中是否出现异常,finally一定执行。
2023-07-17 11:21:381

throw的过去式

  1、throw的过去式是threw。   2、throw,基本释义为投掷、丢、抛。第三人称单数:throws。过去式:threw过去分词:thrown。现在分词:throwing。   3、She threw me a towel.她丢给我一条毛巾。   4、The boy threw a stone at the dog.男孩对狗丢石头。
2023-07-17 11:21:451

throws和thrownew RuntimeException和try-catch的区别

throws 是对一个异常的抛出声明,通常放在方法的定义位置,效果是,当其他使用该方法时,必须提供 try-catch捕捉,否则编译时会发生异常。throw 是对一个异常的抛出,与声明不同,throw出现在代码段内,如果发生异常手动的向上级抛出异常并中断程序继续执行,如果上级没有捕捉代码,继续向上抛出,直到捕获为止,如果一直没有捕获则会被传递到Main函数部分,导致程序终结。try-catch是对异常的捕捉,在可能发生的异常段用 try{ }包裹,则该代码段发生异常时,将被catch段代码所处理,防止异常继续向上传递。RunTimeException是一种异常的类型,运行时异常,存在于throw的宾语,或者catch的参数。用于声明异常类型,其父类是Exception。程序异常有两种,一种是编译时异常,一种是运行时异常,编译时异常大部分编译器在编译阶段均会做出提示,而运行时异常一般不易察觉,例如数组索引越界等等。
2023-07-17 11:21:531

threw是什么意思

throw,英语词汇,基本释义为投掷、丢、抛。英 [θrəʊ] 美 [θroʊ]v.扔;投;掷;抛n.抛;投掷 名词: thrower 过去式: threw 过去分词:
2023-07-17 11:22:212

java一个疑问,为什么有些异常throw出去需要在函数头用throws声明,一些就不用。

请举个不用的例子~
2023-07-17 11:22:395

Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally

try-catch就是捕获throw抛出的异常,程序执行到throw语句时立即终止。如果想要在上一级代码捕获并处理异常,就要用throws。
2023-07-17 11:22:573

JAVA书中写的throws IOException什么意思

抛出一个输入/输出异常
2023-07-17 11:23:063

乌克兰的首都是哪啊,它还有哪些大城市?

基辅 ,还有塞瓦斯托波尔
2023-07-17 11:22:016

住建部企业资质如何查询?

我内蒙古包头市共青农场的,我家的房子是解放前的老土房,现以倒塌,没有房产证,怎么建新房
2023-07-17 11:22:029

who is the girl in pink

穿粉红色衣服的女孩是谁?
2023-07-17 11:22:055

磁盘故障,macintosh hd盘消失,怎么处理啊,Mac OS X 讨论区

1. 使用BootCamp下载windows下的bootcamp(iMac硬件)驱动,下载完成后放在u盘(或者刻成CD)待用。 2. 使用BootCamp对磁盘进行分区,就像正常安装一样。但是只需要分出windows7的系统分区。建议50GB,用于安装win7系统。 3. 安装时windows会问安装在哪个盘里。正常情况下把下拉菜单拉到最下面,就是那个用bootcamp分区的盘,格式化后安装,安装完成后会自动重启。请注意暂时关闭自动更新功能,因为第一个补丁包就是病毒(我不幸中招了一次)!先装防毒软件! 4. 安装win7系统需要的iMac硬件驱动。 5. 重启进入mac系统,从所有程序-实用工具里打开“磁盘工具”。选中你的硬盘(选最上面的硬盘,不要选下面分出来的宗卷),在右边点击“分区”,此时左边的磁盘空间示意图区域的下半部分已经变成了“BOOTCAMP”。点选上面的mac分区(一般命名为“Macintosh HD”),出现蓝色边框之后,再点选区域左下角的“+”图形,这样就会再出现一个分区,这个新分区是独立于mac和windows系统的第三个分区,用来存储文件供两个系统调用、修订。通过拖动交接处或者在右边更改数字,修改到你想要的大小,建议给mac系统留60-100GB,然后确保新分区的格式为“exFAT”(只有这个格式在两个系统中都能修改)。 特别提示:步骤5是iMac电脑必须最后做的,如果步骤颠倒,会造成没有办法安装win7。我给air安装双系统的时候,步骤5可以提前到步骤2,但是新系统的iMac肯定不行了,我失败了一次! 还有一点我的感悟就是,office不需要两个系统都装,这个程序有点大,如果装在mac系统,最新的版本是office2011 for mac with sp1,如果安装在win7系统,最近的版本是office pro 2010 with sp1。 刚刚发现lion系统在给分配第三个分区后,变得很不稳定,我电话咨询了苹果技术热线,得到的答复是:尽量不要再做分区,否则windows故障后,无法删除windows和再次安装,必须连同lion一起抹掉,一并重新安装! Mac OS X 10.7 Lion系统下Win7安装流程 一.如果Win7只需要一个分区,直接通过Bootcamp安装即可 二. 如果Win7下需要多分一个D盘出来,安装流程如下: 1. 使用Bootcamp引导分区,只分出Win7系统所在的盘(即C盘),正常安装好Win7 2. 切换到Mac系统下,进入应用程序→实用工具→磁盘工具,点选硬盘,选择右边的“分区”,选中Macintosh HD盘,再点下边的+号,会新增磁盘MACINTOSH H(D盘) 调整MACINTOSH H大小至合适(D盘),并选中MACINTOSH H,在右边列表中选择MS-DOS FAT模式,应用。 3. 重启,按住C或者按住Option键选择Win7安装光盘启动, 第一步直接回车,进入Win7安装界面(选语言、键盘等),点下一步,进入有“现在安装”字样的界面,点选左下角的修复计算机,进入下图: 选择启动修复, 等待修复完成自动重启,OVER
2023-07-17 11:22:061

百岁山广告的背景音乐是什么?(老人与少女版)

http://zhidao.baidu.com/link?url=X6hAR8jHQYHrhT5rRq80fGdWktssYcRniZohwFXvSQK29WD2UomT7aOxQOelXGZ3J5i1ccplMd8RNdVtZqt0kK
2023-07-17 11:21:572

the girlin pink

The girl in pink is called Millie. 那个穿粉色衣服的女孩叫做Millie.
2023-07-17 11:21:541

上海大宁福朋喜来登集团酒店的英文信息

Hotel Name: Four Points By Sheraton Shanghai DaningAddress: 1928 Gonghexin Road (Gonghexin Lu),ShanghaiDescription:The Four Points by Sheraton Shanghai, Daning is conveniently located in Zhabei - an area known for its infrastructure, cultural centers, universities, and multimedia industry.The hotel forms part of an exciting new integrated complex - Life Hub @ Daning, the first of its kind in Shanghai - an open-air, innovative urban lifestyle concept, consisting of hotel, offices, retail stores, restaurants and bars, entertainment, culture, education and ancillary services. This location is within a few minutes" walk of the Yanchang Road subway station, with easy access to the inner and middle ring roads.In keeping with the Four Points by Sheraton"s commitment to providing honest, uncomplicated comfort, this Shanghai hotel boasts a comprehensive range of facilities and amenities that will appeal to discerning business travelers and leisure guests seeking fun as well as comfort and convenience.
2023-07-17 11:21:511

乌克兰的首都是哪一个城市?

乌克兰共和国首都基辅(Kyiv)位于乌克兰中北部,第聂伯河中游,是第聂伯河港口和重要的铁路枢纽。
2023-07-17 11:21:504