4 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
你可以把
for(int i = 0; i<20000;i++) {
??????????? try {
??????????????? b = StrictMath.pow(b+i, 1.0/3);
??????????????? s = s + b+";";
??????????? }catch(Exception e){
??????????????? e.printStackTrace();
??????????? }finally {
??????????? }
??????? }
修改為:
??????????? try {
for(int i = 0; i<20000;i++) {
??????????????? b = StrictMath.pow(b+i, 1.0/3);
??????????????? s = s + b+";";
??????? }
??????????? }catch(Exception e){
??????????????? e.printStackTrace();
??????????? }finally {
??????????? }
這樣會(huì)好很多(依據(jù)你的循環(huán)次數(shù)而定).但是仍然比沒有 try catch 的代碼執(zhí)行要慢.加了 try catch 后,除了會(huì)增加代碼體積,還會(huì)消耗額外的資源.
因?yàn)榘l(fā)生了異常后,程序的執(zhí)行路線需要從 try 保護(hù)體中跳轉(zhuǎn)到 catch 過濾表達(dá)式中,那么編譯器在編譯期間必須產(chǎn)生必要的代碼和數(shù)據(jù)結(jié)構(gòu)與系統(tǒng)的異常分發(fā)函數(shù)密切配合,大體來講就是分析異常處理代碼的結(jié)構(gòu),封裝和標(biāo)記每部分,注冊(cè)異常處理器函數(shù).
從這個(gè)過程來看,在沒有異常產(chǎn)生時(shí),代碼體積增大了,執(zhí)行的語句增多了,自然程序執(zhí)行效率就低;發(fā)生異常后,需要分發(fā)異常到指定的異常處理函數(shù),析構(gòu)局部變量,沒有匹配的異常處理函數(shù)時(shí),還要展開當(dāng)前調(diào)用棧,向上尋找匹配的異常處理函數(shù).

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
聽說try里面的代碼,每執(zhí)行一句,系統(tǒng)要檢查一下異常列表,看是否有異常,即便是int 這些聲明變量的語句。

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
你多運(yùn)行幾次試試,結(jié)果肯定不一樣,運(yùn)行時(shí)間還跟你程序分配到的cpu時(shí)間有關(guān),如果在運(yùn)行第一個(gè)的時(shí)候電腦還在運(yùn)行其他程序時(shí)間自然會(huì)比較慢。
我個(gè)人認(rèn)為常說的try...catch耗資源是因?yàn)楫a(chǎn)生異常后,對(duì)系統(tǒng)的資源消耗比較大,不產(chǎn)生異常影響是不大的。
添加回答
舉報(bào)