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

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

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

    沙漠中的魚

    欲上天堂,先下地獄
    posts - 0, comments - 56, trackbacks - 0, articles - 119
      BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

    finalize()

    工作原理應(yīng)該是這樣的:一旦垃圾收集器準(zhǔn)備好釋放對象占用的存儲空間,它首先調(diào)用finalize(),而且只有在下一次垃圾收集過程中,才會真正回收對象的內(nèi)存。

    為什么要使用finalize()方法

    因?yàn)閖ava內(nèi)存回收之能回收自己java自己創(chuàng)建的對象,而對調(diào)用未java的對象,如C,C++創(chuàng)建的對象,不能自動的清除,可以通過在finalize()方法,將這些對象顯示的清除。

    finalize()最有用處的地方之一是觀察垃圾收集的過程。

    class Chair {
      
    static boolean gcrun = false;
      
    static boolean f = false;
      
    static int created = 0;
      
    static int finalized = 0;
      
    int i;
      Chair() 
    {
        i 
    = ++created;
        
    if(created == 47
          System.out.println(
    "Created 47");
      }

      
    protected void finalize() {
        
    if(!gcrun) {
          gcrun 
    = true;
          System.out.println(
            
    "Beginning to finalize after " +
            created 
    + " Chairs have been created");
        }

        
    if(i == 47{
          System.out.println(
            
    "Finalizing Chair #47, " +
            
    "Setting flag to stop Chair creation");
          f 
    = true;
        }

        finalized
    ++;
        
    if(finalized >= created)
          System.out.println(
            
    "All " + finalized + " finalized");
      }

    }


    public class Garbage {
      
    public static void main(String[] args) {
        
    if(args.length == 0{
          System.err.println(
    "Usage: \n" +
            
    "java Garbage before\n  or:\n" +
            
    "java Garbage after");
          
    return;
        }

        
    while(!Chair.f) {
          
    new Chair();
          
    new String("To take up space");
        }

        System.out.println(
          
    "After all Chairs have been created:\n" +
          
    "total created = " + Chair.created +
          
    ", total finalized = " + Chair.finalized);
        
    if(args[0].equals("before")) {
          System.out.println(
    "gc():");
          System.gc();
          System.out.println(
    "runFinalization():");
          System.runFinalization();
        }

        System.out.println(
    "bye!");
        
    if(args[0].equals("after"))
          System.runFinalizersOnExit(
    true);
      }

    }
     ///:~

    輸入結(jié)果為:

    Created 47
    Beginning to finalize after 8694 Chairs have been created
    Finalizing Chair #47, Setting flag to stop Chair creation
    After all Chairs have been created:
    total created = 9834, total finalized = 108
    bye!
    成員初使化
    可以方法賦值初使化成員
    下面這樣做是合法的:

    class CInit {
    int i = f();
    int j = g(i);
    //...
    }

    但下面這樣做是非法的:

    class CInit {
    int j = g(i);
    int i = f();
    //...
    }
    構(gòu)造器初使化
    class Counter {
    int i;
    Counter() { i = 7; }
    i首先會初始化成零,然后變成7。
    1.初使化順序
    先初使化成員,然后執(zhí)行構(gòu)造器內(nèi)容
    2.靜態(tài)數(shù)據(jù)初使化
     
    
    public class Dog {
        
    public static Dog sDog=new Dog("static dog");
        
    public Dog(String str){
            System.out.println(str);
        }

        
    public static void main(String[] args){
            Dog dog
    =new Dog("init");
        }

    }
    輸入出結(jié)果
    static dog
    init

    (1) 類型為Dog的一個(gè)對象首次創(chuàng)建時(shí),或者Dog類的static方法/static字段首次訪問時(shí),Java解釋器必須找到Dog.class(在事先設(shè)好的類路徑里搜索)。
    (2) 找到Dog.class后(它會創(chuàng)建一個(gè)Class對象,這將在后面學(xué)到),它的所有static初始化模塊都會運(yùn)行。因此,static初始化僅發(fā)生一次——在Class對象首次載入的時(shí)候。
    (3) 創(chuàng)建一個(gè)new Dog()時(shí),Dog對象的構(gòu)建進(jìn)程首先會在內(nèi)存堆(Heap)里為一個(gè)Dog對象分配足夠多的存儲空間。
    (4) 這種存儲空間會清為零,將Dog中的所有基本類型設(shè)為它們的默認(rèn)值(零用于數(shù)字,以及boolean和char的等價(jià)設(shè)定)。
    (5) 進(jìn)行字段定義時(shí)發(fā)生的所有初始化都會執(zhí)行。
    (6) 執(zhí)行構(gòu)建器。

    3.明確進(jìn)行的靜態(tài)初始化
    
    
    class Spoon {  
       
    static int i;  
       
    static {    
         i 
    = 47;  
       }

    }
    這段代碼僅執(zhí)行一次——首次生成那個(gè)類的一個(gè)對象時(shí),或者首次訪問屬于那個(gè)類的一個(gè)static成員時(shí)
    4.非靜態(tài)實(shí)例的初始化
    class Mug {
      Mug(
    int marker) {
        System.out.println(
    "Mug(" + marker + ")");
      }

    }


    public class Mugs {
      Mug c1;
      
    {
        c1 
    = new Mug(1);
        System.out.println(
    "c1 initialized");
      }

      Mugs() 
    {
        System.out.println(
    "Mugs()");
      }

      
    public static void main(String[] args) {
        System.out.println(
    "Inside main()");
        Mugs x 
    = new Mugs();
      }

    }

    輸入出結(jié)果
    Inside main()
    Mug(1)
    c1 initialized
    Mugs()
     
    主站蜘蛛池模板: 久久久久久亚洲AV无码专区| 女性自慰aⅴ片高清免费| h在线看免费视频网站男男| 国产av无码专区亚洲av毛片搜| 亚洲中文字幕乱码AV波多JI| 亚洲综合在线一区二区三区| 亚洲日本乱码卡2卡3卡新区| 亚洲日本中文字幕天天更新| 亚洲精品国产摄像头| 天天综合亚洲色在线精品| 免费播放国产性色生活片| 免费大片av手机看片高清| 一个人看www免费高清字幕| 国产精品永久免费| 免费一级毛片无毒不卡| 99在线免费观看视频| 精品久久久久成人码免费动漫| 德国女人一级毛片免费| 国产精品va无码免费麻豆| 亚洲成AⅤ人影院在线观看| 亚洲中文字幕第一页在线| 亚洲av女电影网| 亚洲国产精品综合久久2007| 亚洲精品一二三区| 国产一区二区三区亚洲综合 | 亚洲午夜久久久久久久久久| 亚洲AV成人片色在线观看| 亚洲色图国产精品| 亚洲精品亚洲人成在线播放| 亚洲av无码专区在线电影 | 91嫩草亚洲精品| 亚洲日韩一区精品射精| 特a级免费高清黄色片| 精品四虎免费观看国产高清午夜| 免费视频爱爱太爽了| 国产成人免费高清在线观看| 久久久久亚洲AV成人网人人网站| 亚洲国产一区国产亚洲| 亚洲男同gay片| a毛片免费在线观看| 无码区日韩特区永久免费系列|