亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

確保正確的清除

2019-11-18 13:21:08
字體:
來源:轉載
供稿:網友

  java不具備象C++的“破壞器”那樣的概念。在C++中,一旦破壞(清除)一個對象,就會自動調用破壞器方法。之所以將其省略,大概是由于在Java中只需簡單地忘記對象,不需強行破壞它們。垃圾收集器會在必要的時候自動回收內存。
  
  垃圾收集器大多數時候都能很好地工作,但在某些情況下,我們的類可能在自己的存在時期采取一些行動,而這些行動要求必須進行明確的清除工作。正如第4章已經指出的那樣,我們并不知道垃圾收集器什么時候才會顯身,或者說不知它何時會調用。所以一旦希望為一個類清除什么東西,必須寫一個非凡的方法,明確、專門地來做這件事情。同時,還要讓客戶程序員知道他們必須調用這個方法。而在所有這一切的后面,就如第9章(違例控制)要具體解釋的那樣,必須將這樣的清除代碼置于一個finally從句中,從而防范任何可能出現的違例事件。
  
  下面介紹的是一個計算機輔助設計系統的例子,它能在屏幕上描繪圖形:
  
  //: CADSystem.java
  // Ensuring PRoper cleanup
  import java.util.*;
  
  class Shape {
   Shape(int i) {
    System.out.println("Shape constrUCtor");
   }
   void cleanup() {
    System.out.println("Shape cleanup");
   }
  }
  
  class Circle extends Shape {
   Circle(int i) {
    super(i);
    System.out.println("Drawing a Circle");
   }
   void cleanup() {
    System.out.println("Erasing a Circle");
    super.cleanup();
   }
  }
  
  class Triangle extends Shape {
   Triangle(int i) {
    super(i);
    System.out.println("Drawing a Triangle");
   }
   void cleanup() {
    System.out.println("Erasing a Triangle");
    super.cleanup();
   }
  }
  
  class Line extends Shape {
   private int start, end;
   Line(int start, int end) {
    super(start);
    this.start = start;
    this.end = end;
    System.out.println("Drawing a Line: " +
        start + ", " + end);
   }
   void cleanup() {
    System.out.println("Erasing a Line: " +
        start + ", " + end);
    super.cleanup();
   }
  }
  
  public class CADSystem extends Shape {
   private Circle c;
   private Triangle t;
   private Line[] lines = new Line[10];
   CADSystem(int i) {
    super(i + 1);
    for(int j = 0; j < 10; j++)
     lines[j] = new Line(j, j*j);
    c = new Circle(1);
    t = new Triangle(1);
    System.out.println("Combined constructor");
   }
   void cleanup() {
    System.out.println("CADSystem.cleanup()");
    t.cleanup();
    c.cleanup();
    for(int i = 0; i < lines.length; i++)
     lines[i].cleanup();
    super.cleanup();
   }
   public static void main(String[] args) {
    CADSystem x = new CADSystem(47);
    try {
     // Code and exception handling...
    } finally {
     x.cleanup();
    }
   }
  } ///:~
  
  這個系統中的所有東西都屬于某種Shape(幾何外形)。Shape本身是一種Object(對象),因為它是從根類明確繼續的。每個類都重新定義了Shape的cleanup()方法,同時還要用super調用那個方法的基礎類版本。盡管對象存在期間調用的所有方法都可負責做一些要求清除的工作,但對于特定的Shape類——Circle(圓)、Triangle(三角形)以及Line(直線),它們都擁有自己的構建器,能完成“作圖”(draw)任務。每個類都有它們自己的cleanup()方法,用于將非內存的東西恢復回對象存在之前的景象。
  
  在main()中,可看到兩個新要害字:try和finally。我們要到第9章才會向大家正式引薦它們。其中,try要害字指出后面跟隨的塊(由花括號定界)是一個“警戒區”。也就是說,它會受到非凡的待遇。其中一種待遇就是:該警戒區后面跟隨的finally從句的代碼肯定會得以執行——不管try塊到底存不存在(通過違例控制技術,try塊可有多種不平常的應用)。在這里,finally從句的意思是“總是為x調用cleanup(),無論會發生什么事情”。這些要害字將在第9章進行全面、完整的解釋。
  
  在自己的清除方法中,必須注重對基礎類以及成員對象清除方法的調用順序——假若一個子對象要以另一個為基礎。通常,應采取與C++編譯器對它的“破壞器”采取的同樣的形式:首先完成與類有關的所有非凡工作(可能要求基礎類元素仍然可見),然后調用基礎類清除方法,就象這兒演示的那樣。
  
  許多情況下,清除可能并不是個問題;只需讓垃圾收集器盡它的職責即可。但一旦必須由自己明確清除,就必須非凡謹慎,并要求周全的考慮。
  
  1. 垃圾收集的順序
  
  不能指望自己能確切知道何時會開始垃圾收集。垃圾收集器可能永遠不會得到調用。即使得到調用,它也可能以自己愿意的任何順序回收對象。除此以外,Java 1.0實現的垃圾收集器機制通常不會調用finalize()方法。除內存的回收以外,其他任何東西都最好不要依靠垃圾收集器進行回收。若想明確地清除什么,請制作自己的清除方法,而且不要依靠finalize()。然而正如以前指出的那樣,可強迫Java1.1調用所有收尾模塊(Finalizer)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女人天堂av| 91精品国产91久久久| 全亚洲最色的网站在线观看| 欧美夜福利tv在线| 日韩美女免费视频| 黑丝美女久久久| 国产日韩av在线播放| 精品中文字幕在线2019| 青青草99啪国产免费| 久久精品男人天堂| 亚洲自拍偷拍色片视频| 57pao成人国产永久免费| 国产精品美女久久久久久免费| 精品小视频在线| 国产精品久久久久久久久久尿| 久久久精品国产亚洲| 国产精品网红福利| 国产精品亚洲第一区| 国产在线精品一区免费香蕉| 欧美国产精品日韩| 国产深夜精品福利| 欧美国产亚洲精品久久久8v| 麻豆一区二区在线观看| 亚洲va久久久噜噜噜久久天堂| 一本一本久久a久久精品牛牛影视| 亚洲国产精品久久久久秋霞不卡| 伊人久久久久久久久久久久久| 夜夜狂射影院欧美极品| 欧美日韩亚洲视频| 国产视频丨精品|在线观看| 久久精品国产成人精品| 国内精品一区二区三区四区| 欧美亚洲国产日韩2020| 国模私拍一区二区三区| 亚洲999一在线观看www| 欧美在线免费观看| 久久久亚洲成人| 91av视频在线免费观看| 清纯唯美亚洲综合| 超在线视频97| 久久免费国产精品1| 欧美日韩亚洲一区二区| 国产精品电影在线观看| 国产噜噜噜噜噜久久久久久久久| 国产欧美va欧美va香蕉在线| 欧美久久精品一级黑人c片| 欧美男插女视频| 国产精品扒开腿做爽爽爽男男| 成人免费视频网| 国产欧美一区二区三区四区| 中文字幕日韩在线播放| 日韩中文av在线| 国产精品美女av| 在线观看欧美视频| 人人澡人人澡人人看欧美| 国产精品久久久久久久久久ktv| 亚洲xxx自由成熟| 在线观看欧美日韩国产| 国产91精品黑色丝袜高跟鞋| 国产一区二区视频在线观看| 亚洲系列中文字幕| 91精品国产91久久久久久最新| 亚洲毛片在线观看| 国产99久久精品一区二区| 国产91精品在线播放| 成人情趣片在线观看免费| 久久精品国产一区二区三区| 亚洲成av人乱码色午夜| 日韩电影免费观看中文字幕| 欧美裸体xxxx极品少妇软件| 91国内精品久久| 国产精品三级久久久久久电影| 一区二区中文字幕| 欧美黑人xxxⅹ高潮交| 久久91超碰青草是什么| 亚洲欧美精品一区| 国产精品免费久久久久久| 国产综合在线看| 国产日本欧美一区二区三区| 亚洲japanese制服美女| 疯狂做受xxxx欧美肥白少妇| 最新亚洲国产精品| 亚洲国产第一页| 日本一本a高清免费不卡| 欧美一区视频在线| 亚洲精品av在线| 亚洲美女精品久久| 日韩高清免费观看| 2025国产精品视频| 国内自拍欧美激情| 亚洲www永久成人夜色| 亚洲成人中文字幕| 成人午夜一级二级三级| 国产69精品久久久久9999| 色偷偷av一区二区三区| 91视频国产精品| 亚洲网站在线看| 精品高清美女精品国产区| 色av中文字幕一区| 久久在线免费观看视频| 国内精品美女av在线播放| 亚洲一区美女视频在线观看免费| 久久九九国产精品怡红院| 色午夜这里只有精品| 国产精品a久久久久久| 国产91在线播放精品91| 欧美激情videoshd| 欧美精品久久久久久久久| 亚洲精品ady| 久久精品在线播放| 亚洲国产高清自拍| 欧美性生活大片免费观看网址| 日韩欧美在线播放| 久久久久久久久综合| 久久综合亚洲社区| 欧美在线一级va免费观看| 深夜精品寂寞黄网站在线观看| 性欧美亚洲xxxx乳在线观看| 成人天堂噜噜噜| 国产成人精品网站| 久久天天躁狠狠躁老女人| 欧亚精品中文字幕| 日韩成人av在线| 精品久久久精品| 国产亚洲精品久久久久久777| 欧美巨猛xxxx猛交黑人97人| 亚洲国产欧美一区二区丝袜黑人| 国产精品国产三级国产aⅴ浪潮| 欧美天堂在线观看| 亚洲性线免费观看视频成熟| 日韩国产欧美精品一区二区三区| 亚洲aⅴ日韩av电影在线观看| 亚洲欧美中文字幕在线一区| 欧美成人全部免费| 亚洲伊人久久大香线蕉av| 国产经典一区二区| 欧美激情影音先锋| 欧美—级a级欧美特级ar全黄| 丝袜美腿亚洲一区二区| 亚洲夜晚福利在线观看| 亚洲成人亚洲激情| 久久这里有精品视频| 热99久久精品| 九色精品美女在线| 九九热视频这里只有精品| 久久69精品久久久久久国产越南| 日韩免费在线观看视频| 久久精品视频在线播放| 亚洲性夜色噜噜噜7777| 国产一区二区三区在线| 国产精品xxx视频| 日韩中文字幕在线视频播放| 国产精品女人久久久久久| 91精品啪aⅴ在线观看国产| 国产亚洲精品久久久久动| 欧美激情精品久久久久久免费印度| 97国产suv精品一区二区62| 欧美—级高清免费播放| 亚洲国产精品va在线看黑人| 午夜精品久久久久久久99热| 久久国内精品一国内精品| 国产精品美女无圣光视频| 亚洲第一天堂无码专区| 亚洲免费精彩视频|