java中exception的处理
看到有人说程序出现异常,如果有try...catch,会先看catch有没有处理异常,如果没有,会从调用方法中看,如果也没有处理,会从调用程序里看,如果还没有处理就中止程...
看到有人说程序出现异常,如果有try...catch,会先看catch有没有处理异常,如果没有,会从调用方法中看,如果也没有处理,会从调用程序里看,如果还没有处理就中止程序。那怎么算处理了异常,在catch中如何表现?声明方法中的throw new Exception1算不算处理了?
展开
3个回答
展开全部
早期的编程语言(比如C语言)没有异常处理,通常是遇到错误返回一个特殊的值或设定一个标志,并以此判断是不是有错误产生。随着系统规模的不断扩大,这种错误处理已经成为创建大型可维护程序的障碍了。
于是在一些语言中出现了异常处理机制,比如在Basic中的异常处理语句“on error goto”,而Java则在C++基础上建立了新的异常处理机制。
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。这种机制为复杂程序提供了强有力的控制方式。同时这些异常代码与“常规”代码分离,增强了程序的可读性,编写程序时也显得更灵活。
Java中的异常类
在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
Throwable类有两个标准子类:java.lang.Error和java.lang.Exception,即错误和异常。错误:Error类,一般是指虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这一类错误无法恢复或不可能捕获,将导致应用程序中断。
异常:Exception类,则是指一些可以被捕获且可能恢复的异常情况,如数组下标越界Array,Index,OutOf,Bounds,Excepton。数字被零除产生异常:ArithmeticException 、输入/输出异常:IOException等。
提示:Java编译器要求Java程序必须捕获或声明所有非运行时的异常,如:FileNotFoundException、IOException等。因为,对于这类异常来说,如果程序不进行处理,可能会带来意想不到的结果。但运行时出现异常可以不做处理,因为这类异常很普遍,全部处理可能对程序的可读性和运行效率产生影响。
Java异常处理形式,Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
下面是Java异常处理程序的基本形式: try //执行时程序块 catch ExceptionType1e //对ExceptionType1的处理 catch ExceptionType2e //对ExceptionType2的处理 throw e //再抛出这个“异常” finally try程序块和catch语句:遇到一个try语句,“异常”的框架就放到堆栈上面,直到所有的try块内的语句都完成。如果下一级的try语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try语句。 在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。提示:捕获异常的第一步就是用try … 选定你要捕获异常的范围,在执行时,括号内的代码会产生异常对象并被抛出。然后你就可以用catch块来处理异常了。 throw语句和throws语句:throw语句用来明确地抛出一个“异常”。首先,你必须得到一个Throwable类或其它子类产生的实例句柄,通过参数传到catch子句,或者用new语句来创建一个实例。 下面是throw语句的通常形式: throw ThrowableInstance,提示:执行throw语句后,运行流程将立即停止,throw的下一条语句也将暂停执行。这里new运算符用于创建一个Throwable类的实例,在后文的面向对象编程一文中将详细讲解。 throws语句用来标明一个成员函数可能抛出的各种“异常”。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的“异常”的类型。如果“异常”的类型是Error或RuntimeException,或它们的子类,这个规则不起作用。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。 提示:当然,你可能对上面的说明不是很明白,不过不要紧,编译运行下面的Java程序(已经为你做了详细的注释)你会理解很多! 现在我们用下面的例程来说明问题: class ThrowsDemo //类名,相应的java源文件应该保存成: ThrowsDemo.javastatic void procedure throws IllegalAccessException //throws语句 //抛出IllegalAccessException类型的异常System.out.println ″inside procedure″ //输出文本信息,以说明是在执行procedure方法时抛出了异常throw new IllegalAccessException ″demo″ //新生成一个Throwable类实例,然后抛出异常 public static void main String args //main 方法开始,程序从此处执行 try //try语句块开始procedure //调用procedure方法,该方法将Throw(抛出)异常信息 catch IllegalAccessException e //处理IllegalAccessException类型的异常, catch语句块System.out.println ″caught ″ + e 编程并执行程序,其过程如下: E \javacode\exception>java ThrowsDemoinside procedurecaught java.lang.IllegalAccessException demo提示:如上面的代码所示,我们用了一个完整的程序来说明在Java程序中如何使用try…catch…throw等语句。Try … 里产生的异常被捕获了下来,然后在catch块里进行处理(这里只是输出异常信息)。 throws IllegalAccessException标明程序将抛出一个IllegalAccessException类型的异常。IllegalAccessExceptione生成一个异常对象,然后用System.out.println输出异常信息。 finally语句,有时为了确保一段代码不管发生什么异常都要被执行,可以使用关键词finally来标出这样一段代码。一个成员函数返回到调用它的成员函数,或者通过一个没捕捉到的异常,或者通过一个明确的return语句,finally子句总是恰好在成员函数返回前执行。 下面我们以一个比较完整的异常处理程序来说明上面所述的各种异常处理语句的使用问题: class ExceptionDemo //异常使用示例,保存为ExceptionDemo.javastatic void procA try System.out.println ″inside procA″ throw new RuntimeException ″demo″ //抛出异常finally System.out.println ″procA's finally″ //注意:不管发生什么等会执行!!static void procB try System.out.println ″inside procB″ return //返回,实际上是在finally语句执行完后才返回finally System.out.println ″procB's finally″ public static void main String args try procA catch Exception e System.out.println ″catch ″+e procB提示:在上面的完整程序中,finally后的大括号内的代码是任何情况下都会执行的。另外,在procB中,return 语句并没有立即返回,这一点应该特别注意。你可以亲自动手,执行上面的程序试试(编译和执行类似于上例)。 到目前为止,关于Java的流程控制已经完全讲完了。要真正理解并掌握它们只有经过大量的练习。而好的方法就是修改上面的每一个程序,让它们实现你想要的功能,并在此基本上理解Java的流程控制。 而要写好Java程序,熟悉使用Java的流程控制和异常处理是非常关键的。
希望对你能有所帮助。
于是在一些语言中出现了异常处理机制,比如在Basic中的异常处理语句“on error goto”,而Java则在C++基础上建立了新的异常处理机制。
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。这种机制为复杂程序提供了强有力的控制方式。同时这些异常代码与“常规”代码分离,增强了程序的可读性,编写程序时也显得更灵活。
Java中的异常类
在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
Throwable类有两个标准子类:java.lang.Error和java.lang.Exception,即错误和异常。错误:Error类,一般是指虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这一类错误无法恢复或不可能捕获,将导致应用程序中断。
异常:Exception类,则是指一些可以被捕获且可能恢复的异常情况,如数组下标越界Array,Index,OutOf,Bounds,Excepton。数字被零除产生异常:ArithmeticException 、输入/输出异常:IOException等。
提示:Java编译器要求Java程序必须捕获或声明所有非运行时的异常,如:FileNotFoundException、IOException等。因为,对于这类异常来说,如果程序不进行处理,可能会带来意想不到的结果。但运行时出现异常可以不做处理,因为这类异常很普遍,全部处理可能对程序的可读性和运行效率产生影响。
Java异常处理形式,Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
下面是Java异常处理程序的基本形式: try //执行时程序块 catch ExceptionType1e //对ExceptionType1的处理 catch ExceptionType2e //对ExceptionType2的处理 throw e //再抛出这个“异常” finally try程序块和catch语句:遇到一个try语句,“异常”的框架就放到堆栈上面,直到所有的try块内的语句都完成。如果下一级的try语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try语句。 在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。提示:捕获异常的第一步就是用try … 选定你要捕获异常的范围,在执行时,括号内的代码会产生异常对象并被抛出。然后你就可以用catch块来处理异常了。 throw语句和throws语句:throw语句用来明确地抛出一个“异常”。首先,你必须得到一个Throwable类或其它子类产生的实例句柄,通过参数传到catch子句,或者用new语句来创建一个实例。 下面是throw语句的通常形式: throw ThrowableInstance,提示:执行throw语句后,运行流程将立即停止,throw的下一条语句也将暂停执行。这里new运算符用于创建一个Throwable类的实例,在后文的面向对象编程一文中将详细讲解。 throws语句用来标明一个成员函数可能抛出的各种“异常”。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的“异常”的类型。如果“异常”的类型是Error或RuntimeException,或它们的子类,这个规则不起作用。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。 提示:当然,你可能对上面的说明不是很明白,不过不要紧,编译运行下面的Java程序(已经为你做了详细的注释)你会理解很多! 现在我们用下面的例程来说明问题: class ThrowsDemo //类名,相应的java源文件应该保存成: ThrowsDemo.javastatic void procedure throws IllegalAccessException //throws语句 //抛出IllegalAccessException类型的异常System.out.println ″inside procedure″ //输出文本信息,以说明是在执行procedure方法时抛出了异常throw new IllegalAccessException ″demo″ //新生成一个Throwable类实例,然后抛出异常 public static void main String args //main 方法开始,程序从此处执行 try //try语句块开始procedure //调用procedure方法,该方法将Throw(抛出)异常信息 catch IllegalAccessException e //处理IllegalAccessException类型的异常, catch语句块System.out.println ″caught ″ + e 编程并执行程序,其过程如下: E \javacode\exception>java ThrowsDemoinside procedurecaught java.lang.IllegalAccessException demo提示:如上面的代码所示,我们用了一个完整的程序来说明在Java程序中如何使用try…catch…throw等语句。Try … 里产生的异常被捕获了下来,然后在catch块里进行处理(这里只是输出异常信息)。 throws IllegalAccessException标明程序将抛出一个IllegalAccessException类型的异常。IllegalAccessExceptione生成一个异常对象,然后用System.out.println输出异常信息。 finally语句,有时为了确保一段代码不管发生什么异常都要被执行,可以使用关键词finally来标出这样一段代码。一个成员函数返回到调用它的成员函数,或者通过一个没捕捉到的异常,或者通过一个明确的return语句,finally子句总是恰好在成员函数返回前执行。 下面我们以一个比较完整的异常处理程序来说明上面所述的各种异常处理语句的使用问题: class ExceptionDemo //异常使用示例,保存为ExceptionDemo.javastatic void procA try System.out.println ″inside procA″ throw new RuntimeException ″demo″ //抛出异常finally System.out.println ″procA's finally″ //注意:不管发生什么等会执行!!static void procB try System.out.println ″inside procB″ return //返回,实际上是在finally语句执行完后才返回finally System.out.println ″procB's finally″ public static void main String args try procA catch Exception e System.out.println ″catch ″+e procB提示:在上面的完整程序中,finally后的大括号内的代码是任何情况下都会执行的。另外,在procB中,return 语句并没有立即返回,这一点应该特别注意。你可以亲自动手,执行上面的程序试试(编译和执行类似于上例)。 到目前为止,关于Java的流程控制已经完全讲完了。要真正理解并掌握它们只有经过大量的练习。而好的方法就是修改上面的每一个程序,让它们实现你想要的功能,并在此基本上理解Java的流程控制。 而要写好Java程序,熟悉使用Java的流程控制和异常处理是非常关键的。
希望对你能有所帮助。
展开全部
有catch 就说明处理了 就算catch里面什么也不写 那也叫空处理 错误不会影响程序继续运行
你说那个 叫 throw 是往外抛异常 如果外层没有处理 即外层没有 try catch 继续向外跑
直到被处理 如果一直没处理 就会报错
你说那个 叫 throw 是往外抛异常 如果外层没有处理 即外层没有 try catch 继续向外跑
直到被处理 如果一直没处理 就会报错
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
catch 抛出具体的异常, 并且一般项目中,会跟具体场景跑出异常定义异常码展示在UI层.
你问题中写的是声明方法中 throw new Exception1 .
声明方法中只能是throws. ,如果你表达的是throws, 那么这不算处理异常,因为所有调用这个方法的地方都要显示去捕获这个异常. 当然捕获到这个异常我们可以再抛出(throws) ,也可以try.catch 捕获住.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |