<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 241,  comments - 116,  trackbacks - 0
    清理工作對于我們來說是必不可少的,因為如果一些消耗資源的操作,比如IO,JDBC。如果我們用完以后沒有及時正確的關閉,那后果會很嚴重,這意味著內存泄露。異常的出現要求我們必須設計一種機制不論什么情況下,資源都能及時正確的清理。這就是finally。

     
    ?
    public void readFile(String file) {
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new InputStreamReader(
                        new FileInputStream(file)));
                // do some other work
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } finally {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    例子非常的簡單,是一個讀取文件的例子。這樣的例子在JDBC操作中也非常的常見。(所以,我覺得對于資源的及時正確清理是一個程序員的基本素質之一。)

    Try...finally結構也是保證資源正確關閉的一個手段。如果你不清楚代碼執行過程中會發生什么異常情況會導致資源不能得到清理,那么你就用try對這段"可疑"代碼進行包裝,然后在finally中進行資源的清理。舉一個例子:

     
    ?
    public void readFile() {
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new InputStreamReader(
                        new FileInputStream("file")));
                // do some other work
             
                //close reader
                reader.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

     

    我們注意一下這個方法和上一個方法的區別,下一個人可能習慣更好一點,及早的關閉reader。但是往往事與愿違,因為在reader.close()以前異常隨時可能發生,這樣的代碼結構不能預防任何異常的出現。因為程序會在異常出現的地方跳出,后面的代碼不能執行(這在上面應經用實例證明過)。這時我們就可以用try...finally來改造:

     
    ?
    public void readFile() {
            BufferedReader reader = null;
            try {
                try {
                    reader = new BufferedReader(new InputStreamReader(
                            new FileInputStream("file")));
                    // do some other work
     
                    // close reader
                } finally {
                    reader.close();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    及早的關閉資源是一種良好的行為,因為時間越長你忘記關閉的可能性越大。這樣在配合上try...finally就保證萬無一失了(不要嫌麻煩,java就是這么中規中矩)。

    再說一種情況,假如我想在構造方法中打開一個文件或者創建一個JDBC連接,因為我們要在其他的方法中使用這個資源,所以不能在構造方法中及早的將這個資源關閉。那我們是不是就沒轍了呢?答案是否定的??匆幌孪旅娴睦樱?br />
     
    ?
    public class ResourceInConstructor {
        BufferedReader reader = null;
        public ResourceInConstructor() {
            try {
                reader = new BufferedReader(new InputStreamReader(new FileInputStream("")));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
         
        public void readFile() {
            try {
                while(reader.readLine()!=null) {
                    //do some work
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
         
        public void dispose() {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    這一部分講的多了一點,但是異常確實是看起來容易用起來難的東西呀,java中還是有好多的東西需要深挖的。
    posted on 2011-12-26 10:30 墻頭草 閱讀(271) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 四虎国产精品永久免费网址| 国产精品免费久久久久久久久| 99视频免费播放| 久久亚洲免费视频| 久久精品免费视频观看| 亚洲av无码一区二区三区乱子伦| a级午夜毛片免费一区二区| 亚洲热线99精品视频| 91亚洲国产成人久久精品| 日本免费中文视频| 97久久精品亚洲中文字幕无码| 在线观看的免费网站无遮挡| 亚洲视频一区网站| 插B内射18免费视频| 亚洲高清毛片一区二区| 亚洲高清免费视频| 中文字幕无码日韩专区免费| 久久精品国产精品亚洲毛片| 色婷婷7777免费视频在线观看| 亚洲国产成人久久综合| AV在线播放日韩亚洲欧| 久久精品视频免费看| 久久亚洲精品专区蓝色区| 免费国产成人午夜电影| 日本一区午夜艳熟免费| 亚洲一级片在线观看| 无码专区一va亚洲v专区在线| 国产午夜精品免费一区二区三区| 亚洲高清日韩精品第一区 | 无码av免费一区二区三区试看| 亚洲精品第五页中文字幕| 免费无码又爽又刺激高潮的视频| 一本大道一卡二大卡三卡免费| 久久丫精品国产亚洲av不卡| 免费高清在线影片一区| 手机看片国产免费永久| 亚洲深深色噜噜狠狠网站| 亚洲线精品一区二区三区影音先锋| 四虎在线免费视频| 国产高潮流白浆喷水免费A片 | 亚洲精品成人久久|