当前位置:首页 » 编程语言 » javathrows

javathrows

发布时间: 2024-07-01 12:35:52

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

我不清楚是否正确理解了楼主想了解的问题,但我尽可能简略而全面的谈一谈Java语言的异常处理。

首先,Java中在一个方法内通常有两种形式的异常处理方法。
1. 在当前方法内使用try..catch..finally的语法结构捕获并处理异常
2. 在方法体前,接着方法定义后通过throws关键字,申明抛出异常

Q 为什么有这两种形式呢,或者说为什么需要处理异常?
A 即使使用的是Java或者C#等其他“高级语言”,异常的处理也在所难免。举几个例子,我们需要读取一个文本文件,正常情况下,的确不会有任何问题。但如果发生意外,比如我们想要读取的那个文件并不存在,或者还没有生成,又或者被改名了,删除了,怎么办呢?这些问题就编程语言本身而言(即使使用File.exists()或者isDir&isFile等判断,也是人力所为),他们是并不知道的。当程序运行到某一行,试图去读取一个并不存在文件的时候,异常便发生了(注意,这里说的异常通常是指Exception的普通子类,而非运行时错误或者Error),而在我们这个例子里,就会引发FileNotFoundException,又比如,如果要操作一个网络位置上的远程文件,则还有可能引发IO异常、或者网络异常等;在比如试图访问一个数组中并不存在的数据时,则会引发ArrayIndexOutOfBounds的越界异常。每当这些时候,Java的编译器和语义规则就会强制要求我们捕获并且处理它们。简单的说,程序就像小孩子,如果不这样做的话,他就不知道该怎样运行下去了(这里我用的只是一个比喻,事实上世界还存在解释型的脚本编程语言和函数式语言等,通常他们的编译器并不一定强制要求你处理所有的异常,而是在运行时碰到具体错误才告诉你)。当时,需要注意的是,养成良好的异常处理习惯,仍是一个优秀程序员的习惯。

Q 什么时候我需要在当前方法里catch然后处理,什么时候我需要throw出去?
A 举个例子,有时候,某个可能异常可能并不重要,我不想对他进行catch之后的大段处理、或者基于远程的网络操作,我们只能记录日志,我可能就会想通过自定义一个自己的Exception子类,通过在内部方法内直抛出相关异常,最后在某个具体的handler或业务逻辑层(package)在统一捕获和记录处理。总之,何时处理、何时抛出属于项目架构和基于工程角度需要思考的问题。总而言之,具体问题,具体分析。

‘贰’ 瑙f瀽Java-throw鎶涘嚭寮傚父璇︾粏杩囩▼

娣卞叆鎺㈢┒Java涓镄则hrow鎶涘嚭寮傚父链哄埗


鍦↗ava缂栫▼涓锛屽纾甯稿勭悊鏄纭淇濈▼搴忕ǔ锅ユх殑閲嶈佺幆鑺伞侸ava鎻愪緵浜嗕笁绉嶆姏鍑哄纾甯哥殑鏂瑰纺锛歵hrow銆乼hrows鍜岀郴缁熻嚜锷ㄦ姏鍑哄纾甯革纴姣忕嶉兘链夊叾镫鐗圭殑鐢ㄦ硶鍜岀洰镄勚


1. throw


褰扑綘闇瑕佸湪浠g爜镓ц岃繃绋嬩腑涓诲姩鎶涘嚭涓涓寮傚父镞讹纴浣跨敤throw鍏抽敭瀛椼备緥濡傦纴鍦ㄦ柟娉曞唴閮锛屽綋阆囧埌鐗瑰畾𨱒′欢镞讹纴鍙浠ヨ繖镙峰啓锛歵ry{钬}catch(Exception e){throw new ArithmeticException("XXX");}finally{钬} 杩欓噷锛宼hrow钖庨溃璺熺潃镄勬槸涓涓寮傚父瀵硅薄瀹炰緥锛岀‘淇濈▼搴忔寜镦ч勬湡杩涜屽纾甯稿勭悊銆


2. throws


鍙︿竴鏂归溃锛宼hrows鐢ㄤ簬澹版槑鏂规硶鍙鑳芥姏鍑虹殑寮傚父銆傚湪鏂规硶绛惧悕涓锛屽俻ublic int division(int x, int y) throws ArithmeticException {钬}锛岃繖绉嶆柟寮忚〃绀烘柟娉曞湪镓ц屾椂鍙鑳戒细鎶涘嚭鐗瑰畾绫诲瀷镄勫纾甯革纴浣嗗苟涓嶅己鍒跺湪鏂规硶鍐呴儴鎹曡幏锛岃屾槸鐣欑粰璋幂敤钥呭勭悊銆


3. 绯荤粺镊锷ㄦ姏鍑哄纾甯


褰挞亣鍒拌娉曢敊璇銆佽繍琛屾椂阌栾鎴栫被鍨嬭浆鎹㈤敊璇镞讹纴Java浼氲嚜锷ㄦ姏鍑哄纾甯革纴濡备唬镰佺ず渚嬩腑锛歩nt a = 5; int b = 0; int c = a/b; 杩欐椂锛岀▼搴忎细鎶涘嚭ArithmeticException锛屽洜涓洪櫎鏁颁负闆舵槸涓嶅厑璁哥殑銆


寮傚父镄勫垎绫讳笌澶勭悊


寮傚父鍦↗ava涓琚鍒嗙被涓轰袱澶х被锛欵rror鍜孍xception銆侲rror浠h〃镄勬槸铏氭嫙链烘垨鐜澧冨眰闱㈢殑涓ラ吨阌栾锛岃孍xception鍒椤垎涓鸿繍琛屾椂寮傚父鍜屾镆ュ纾甯搞傝繍琛屾椂寮傚父阃氩父鐢辩紪绋嬮敊璇寮曡捣锛屽侼ullPointerException锛岃屾镆ュ纾甯稿垯闇瑕佸湪浠g爜涓鏄惧纺鎹曡幏澶勭悊锛屽侷OException銆


throw镄勮︾粏杩囩▼


涓巘hrows涓嶅悓锛宼hrow璇鍙ョ洿鎺ユ姏鍑哄纾甯搞傚皾璇曚娇鐢╰hrow镞讹纴蹇呴’纭淇濇姏鍑虹殑鏄涓涓链夋晥镄勫纾甯稿硅薄锛屽惁鍒欑紪璇戝櫒浼氭姤阌欍备娇鐢╰hrow链変袱绉嶅父瑙佺瓥鐣ワ细涓诲姩鎶涘嚭鍜岃锷ㄥ勭悊銆


涓诲姩鎶涘嚭


鍦ㄧ‘瀹氱殑浠g爜浣岖疆浣跨敤throw锛岃繖鏄涓绉崭富锷ㄥ勭悊寮傚父镄勬柟寮忋备緥濡傦纴褰撶‘瀹氭煇涓𨱒′欢灏嗗艰嚧阌栾镞讹纴鍙浠ュ啓鍏throw new SomeException("鐗瑰畾铡熷洜")銆傝繖绉嶆柟寮忛傜敤浜庣綍瑙佷笖宸茬煡镄勫纾甯告儏鍐点


琚锷ㄥ勭悊


鍙︿竴绉嶆柟寮忔槸浣跨敤try-catch-finally缁撴瀯𨱒ユ崟銮峰纾甯搞傚湪try鍧椾腑镓ц屽彲鑳戒细鎶涘嚭寮傚父镄勪唬镰侊纴濡傛灉鍙戠敓寮傚父锛宑atch浼氭崟銮峰苟澶勭悊锛岃宖inally鍧楀垯镞犺烘槸钖﹀彂鐢熷纾甯搁兘浼氭墽琛屻


阃氲繃瀹炰緥婕旂ず锛屾垜浠鍙浠ョ湅鍒颁富锷ㄦ姏鍑哄纾甯稿悗绋嫔簭浼氩绘垒涓庝箣鍖归厤镄刢atch𨱒ュ勭悊锛岃屽傛灉娌℃湁镓惧埌锛屽垯浼氶愬眰钖戜笂鎶ュ憡缁栾皟鐢ㄨ呫傝繖绉嶆満鍒剁‘淇濅简寮傚父镄勪紶鎾鍜屽勭悊锛屽炲己浜嗙▼搴忕殑锅ュ.镐с

‘叁’ 鍦↗ava涓锛宼hrow涓巘hrows链変粈涔埚尯鍒锛熶粬浠钖勮嚜鐢ㄥ湪浠涔埚湴鏂癸纻

涓婇溃镄勫凡缁忚В閲婂緢璇︾粏浜 鎴戝氨琛ュ厖涓ょ偣钖 涓,throws鐢ㄥ湪鍑芥暟涓婏纴钖庨溃璺熷纾甯哥被钖嶏纴鐢ㄤ簬镙囩ず鍑芥暟镄勫纾甯革纴濡傛灉链夊氢釜寮傚父绫伙纴鐢ㄩ楀彿闅斿紑锛涗簩锛宼hrow 鐢ㄥ湪鍑芥暟鍐咃纴钖庨溃璺熻窡寮傚父瀵硅薄锛岄氩父𨱍呭喌鏄杩欐牱镄勶细鍑芥暟鐢╰hrow鎶涘嚭寮傚父瀵硅薄锛屽嚱鏁颁笂蹇呴’鐢╰hrows镙囩ず

热点内容
登陆社保账号密码是什么 发布:2024-11-26 16:23:03 浏览:896
优盾加密软件 发布:2024-11-26 16:15:52 浏览:655
热血传奇手游免费辅助脚本 发布:2024-11-26 15:59:03 浏览:220
安卓王者荣耀怎么设置回复血量 发布:2024-11-26 15:58:58 浏览:533
汽车空调压缩机轴承 发布:2024-11-26 15:58:56 浏览:960
c语言中53 发布:2024-11-26 15:56:36 浏览:281
ftp上传浏览器 发布:2024-11-26 15:39:56 浏览:788
mvc数据访问层 发布:2024-11-26 15:39:36 浏览:259
安卓的face怎么使用 发布:2024-11-26 15:05:50 浏览:90
存储魔力象限2016 发布:2024-11-26 15:04:47 浏览:867