<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)建的對象,不能自動(dò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()
     
    主站蜘蛛池模板: 久久国产乱子免费精品| 国产成人精品日本亚洲网址| 国产亚洲欧洲Aⅴ综合一区 | 亚洲AV性色在线观看| 亚洲色欲色欲www| 久久精品国产亚洲AV蜜臀色欲| 亚洲欧洲自拍拍偷综合| 亚洲综合精品一二三区在线| 国产av天堂亚洲国产av天堂| 亚洲AV无码精品色午夜果冻不卡 | 2022中文字字幕久亚洲| 免费在线一级毛片| 亚洲性日韩精品国产一区二区| 亚洲国产专区一区| 精品亚洲一区二区三区在线播放| 国产专区一va亚洲v天堂| 亚洲人成网站在线观看播放| 狠狠色伊人亚洲综合成人| 噜噜噜亚洲色成人网站∨| 亚洲小视频在线播放| 国产亚洲精品VA片在线播放| 亚洲色无码专区一区| 在线观看国产一区亚洲bd| 一个人看的www免费在线视频| 丁香花在线观看免费观看图片| 中文字幕无码免费久久| 亚洲大片免费观看| 免费的涩涩视频在线播放| 亚洲精品国产V片在线观看| 国产亚洲精品自在线观看| 亚洲视频一区二区在线观看| 亚洲小说图区综合在线| 一边摸一边桶一边脱免费视频| 97无码人妻福利免费公开在线视频 | 中文字幕av无码无卡免费| 日本免费无遮挡吸乳视频电影| 精品国产香蕉伊思人在线在线亚洲一区二区| 亚洲无人区午夜福利码高清完整版| 久久久久亚洲Av无码专| 亚洲精品天堂无码中文字幕| 国产无遮挡色视频免费观看性色|