try-js try catch throw和throw,throws的区别

java的学习中我们总会遇到对一些异常处理,经过自己在网上查询相关的内容,找到一些知识和大家分享。
先说throw,它是一种控制程序流程的特殊方法而已。没有相应的catch的话,可以中止当前的方法继续执行。这个不做具体的说明,我们重点说一下try/catch和throws的区别与联系
throws在声明方法时候,如果不声明throws的话,那么一般的Exception都要在这个方法中终结。所以他必须有相应的catch处理编译时的一场来避免错误的发生。当声明了throws之后,异常将会被抛出,就像是石头被丢出去一样。但有些异常不能捕捉,这时候就要用到try/catch了。
try/catch可以这样理解,如果throws相当于职业介绍的中介,那么try/catch就是倒霉的打工仔。为什么这么说呢?那是因为,throws只告诉了编译器方法可能产生异常问题,并把问题抛给了try/catch,让try/catch来负责捕获异常。这样看来try/catch就是拿个网兜在那里接石头了。
throws Exception是写在方法后面的,属于契约式编程,就是告诉编译器本方法可能会抛出该类型异常,由方法的调用者去处理。try catch就不用说了,就是那么个意思。
在你编写的程序中,有些语句可以会发生异常,这时Java编译器要求你必须 进行捕获,才可以运行。 (1)如果你不想编写捕获异常的具体代码的话,你可以使用 throws Exception 的形式, 把异常再次抛出,交给JVM(Java虚拟机)可以捕获。这是一种比较省事的办法。 (2)如果你想亲编写处理异常的代码的话,可以使用try{ }catch(){ }的形式,进行捕获, 一旦程序发生异常,它就会安照你catch{ }块编写的代码去执行。
我个人推荐你养成使用后者的习惯!
下面是一个不正确的例子。该例试图引发一个它不能捕获的异常。因为程序没有指定一个throws子句来声明这一事实,程序将不会编译。
class ThrowsDemo {
static void throwOne() {
System.out.println("Inside throwOne.");
throw new IllegalAccessException("demo");
public static void main(String args[]) {
throwOne();
为编译该程序,需要改变两个地方。第一,需要声明throwOne( )引发IllegalAccessException异常。第二,main( )必须定义一个try/catch 语句来捕获该异常。
正确的例子如下:
class ThrowsDemo {
static void throwOne() throws IllegalAccessException {
System.out.println("Inside throwOne.");
throw new IllegalAccessException("demo");}
public static void main(String args[]) {
throwOne();
} catch (IllegalAccessException e) {
System.out.println("Caught " + e);
下面是例题的输出结果:inside throwOnecaught java.lang.IllegalAccessException: demo
浏览 12973
浏览: 27912 次
来自: 莱州
&short 短整型 18 bits
huzhenyu 写道其实读一行输入内容可以这样写:
publ ...
其实读一行输入内容可以这样写:
public static S ...
王者无敌Java 写道沙发。。。不要为以前的一切后悔,现在还来 ...
沙发。。。不要为以前的一切后悔,现在还来得及,调整好心态,迎接 ...温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
1. 在java代码中,如果发生异常,JVM就会中断程序代码的运行,然后创建异常对象并抛出。例如:
int a=2, b=0;
int i=a/b;& //除数不能为0,发生异常
System.out.println(i);
程序会在执行第2行代码时中断,并抛出异常,导致后面的代码无法执行。
2. 但是,有些情况程序员认为是异常的,而在JVM看来却是正常的,比如说: age = -100; System.out.println(age);
对于JVM来说,这只是正常的赋值语句,但在我们眼中这就不正常了,谁的年龄会是负的呢。
所以,在这种情况下我们就需要自己手动创建并抛出异常,这就需要用到throw了:
age = -100;
if (age&0)
& Exception e = new Exception("Age Exception");& //创建异常对象&& //抛出异常
}System.out.println(age);
注:JVM创建的异常对象会由JVM自动抛出,而程序员创建并抛出的对象必须通过throws或try{}catch(){}进行相应处理。
二、异常的处理
当异常发生后就要作相应处理,常用的处理手法有throws和try{}catch(){}:
1. 定义一个方法时如果使用throws,如:
public void someMethod() throws Exception
& //do something
就表示该方法可能抛出某种异常,那么该方法的调用者就必须处理该方法抛出的异常,可以继续使用throws抛出或者使用try{}catch(){}捕捉,如果异常被抛到顶层都没有捕捉就会将异常信息显示于顶层(控制台或页面);
2. 如果在一段代码中使用try{}catch(){},如:
public void someMethod()
&&& int a=2, b=0;
&&& int i=a/b;& //除数不能为0,发生异常,try{}块中止运行
&&& System.out.println(i); //无法执行
& catch(Exception e)
&&& System.out.println("发生异常!");& //捕捉到异常并处理
& System.out.println("我仍然继续!");& //正常执行&
当try{}块中的代码产生异常时,try{}块中的代码就会中断运行,并由catch(){}块捕捉到产生的异常并作相应处理,而try{}catch(){}后面的代码仍可正常执行。但是,一般不要简单地捕捉顶层的Exception,因为Exception是所有异常的父类,包括RuntimeException,简单捕捉Exception会将所有类型的Exception全部捕捉,这样不利于异常处理。
当可能发生的异常不止一种时,如:SQLException, IOException,有两种catch方式:
(1)SQLException, IOException无论catch哪种都进行统一处理,如:
catch(SQLException se, IOException ie)& //不推荐
& //do something
(2)分开处理,如:
catch( IOException ie)
& //do something
catch(SQLException se)
& //do something
在(2)中,如果两种异常属于继承关系,则应按继承关系中从子到父的顺序进行处理,如:
catch( IOException ie)
& //do something
catch(Exception e)
& //do something
因为IOException继承自Exception,Exception包含IOException,所以,如果将catch(Exception e){}放到前面就会连IOException一起catch,这样后面的catch(IOException ioe){}就变得毫无意义。
另外,由于Java有垃圾回收器,所以异常处理并不需要处理内存的回收问题,但是依然有一些资源需要程序员来处理,比如文件、网络连接和图片等资源,这种情况可以在try{}catch(){}后加上finally{}块进行程序的清理工作,无论try{}块中有没有发生异常,finally{}块中的代码都一定会被执行。
阅读(6181)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_086067',
blogTitle:'[Java]关于throw,throws,try{}catch(){}',
blogAbstract:'\r\n一、异常的产生\r\n1. 在java代码中,如果发生异常,JVM就会中断程序代码的运行,然后创建异常对象并抛出。例如:\r\nint a=2, b=0;\r\nint i=a/b;& //除数不能为0,发生异常\r\nSystem.out.println(i);\r\n程序会在执行第2行代码时中断,并抛出异常,导致后面的代码无法执行。\r\n2. 但是,有些情况程序员认为是异常的,而在JVM看来却是正常的,比如说: age = -100; System.out.println(age); \r\n对于JVM来说,这只是正常的赋值语句,但在我们眼中这就不正常了,谁的年龄会是负的呢。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:3,
publishTime:6,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:3,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}2016年7月 扩充话题大版内专家分月排行榜第二
2017年1月 Java大版内专家分月排行榜第三2016年12月 扩充话题大版内专家分月排行榜第三2016年10月 扩充话题大版内专家分月排行榜第三2016年6月 扩充话题大版内专家分月排行榜第三
2016年1月 Java大版内专家分月排行榜第一2015年12月 Java大版内专家分月排行榜第一2015年9月 Java大版内专家分月排行榜第一2015年8月 Java大版内专家分月排行榜第一
2016年3月 Java大版内专家分月排行榜第二2016年2月 Java大版内专家分月排行榜第二2015年11月 Java大版内专家分月排行榜第二2015年10月 Java大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 php try catch throw 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信