zoukankan      html  css  js  c++  java
  • 静态内部类的加载方式

    非内部类的静态成员变量会直接加载

    public class OuterClass  
    {  
        static{  
            System.out.println("OuterClass static load.");  
        }  
      
        public OuterClass()  
        {  
            System.out.println("flag");  
        }  
        public OuterClass(String flag)  
        {  
            System.out.println("flag:"+flag);  
        }  
          
        class InnerClass  
        {  
            //private static String te = "";  
            /*static{ 
                System.out.println("InnerClass static load."); 
            }*/   
            private OuterClass out = new OuterClass("inner");  
        }  
        static class InnerStaticClass  
        {  
            private static OuterClass out = new OuterClass("innerStatic");  
            static{  
                System.out.println("InnerStaticClass static load.");  
            }   
            private static void load()  
            {  
                System.out.println("InnerStaticClass func load().");  
            }  
        }  
        public static  OuterClass getInstatnce()  
       {  
          return OuterClass.InnerStaticClass.out;  
       }  
        public static void main(String[] args)  
        {  
    //        OuterClass.InnerStaticClass.load();  
    //        OuterClass out = OuterClass.InnerStaticClass.out;  
    //        OuterClass.InnerClass innerClass = out.new InnerClass() ;  
            //OuterClass.InnerStaticClass.out.  
        }  
          
    } 

    打印结果:OuterClass static load.
    public class OuterClass  
    {  
        static{  
            System.out.println("OuterClass static load.");  
        }  
      
        public OuterClass()  
        {  
            System.out.println("flag");  
        }  
        public OuterClass(String flag)  
        {  
            System.out.println("flag:"+flag);  
        }  
          
        class InnerClass  
        {  
            //private static String te = "";  
            /*static{ 
                System.out.println("InnerClass static load."); 
            }*/   
            private OuterClass out = new OuterClass("inner");  
        }  
        static class InnerStaticClass  
        {  
            private static OuterClass out = new OuterClass("innerStatic");  
            static{  
                System.out.println("InnerStaticClass static load.");  
            }   
            private static void load()  
            {  
                System.out.println("InnerStaticClass func load().");  
            }  
        }  
        public static  OuterClass getInstatnce()  
       {  
          return OuterClass.InnerStaticClass.out;  
       }  
        public static void main(String[] args)  
        {  
            OuterClass.InnerStaticClass.load();  
    //        OuterClass out = OuterClass.InnerStaticClass.out;  
    //        OuterClass.InnerClass innerClass = out.new InnerClass() ;  
            //OuterClass.InnerStaticClass.out.  
        }  
          
    }  

    内部类只会在第一次使用时加载,不使用就不加载。
    打印结果:

    OuterClass static load.
    flag:innerStatic
    InnerStaticClass static load.
    InnerStaticClass func load().

     

    public class OuterClass  
    {  
        static{  
            System.out.println("OuterClass static load.");  
        }  
      
        public OuterClass()  
        {  
            System.out.println("flag");  
        }  
        public OuterClass(String flag)  
        {  
            System.out.println("flag:"+flag);  
        }  
          
        class InnerClass  
        {  
            //private static String te = "";  
            /*static{ 
                System.out.println("InnerClass static load."); 
            }*/   
            private OuterClass out = new OuterClass("inner");  
        }  
        static class InnerStaticClass  
        {  
            private static OuterClass out = new OuterClass("innerStatic");  
            static{  
                System.out.println("InnerStaticClass static load.");  
            }   
            private static void load()  
            {  
                System.out.println("InnerStaticClass func load().");  
            }  
        }  
        public static  OuterClass getInstatnce()  
       {  
          return OuterClass.InnerStaticClass.out;  
       }  
        public static void main(String[] args)  
        {  
            OuterClass.InnerStaticClass.load();  
            OuterClass out = OuterClass.InnerStaticClass.out;  
            OuterClass.InnerClass innerClass = out.new InnerClass() ;  
        }  
          
    }  
    打印结果:

    OuterClass static load.
    flag:innerStatic
    InnerStaticClass static load.
    InnerStaticClass func load().
    flag:inner

     

  • 相关阅读:
    RDay2-Problem 2 B
    杭电 1862 EXCEL排序(sort+结构体)
    杭电 2803 The MAX(sort)
    杭电 5053 the Sum of Cube(求区间内的立方和)打表法
    杭电 2089 不要62
    杭电 4548 美素数(素数打表)
    杭电2098 分拆素数和
    杭电1722 Cake (分蛋糕)
    素数判定 (素数打表)
    最小公倍数
  • 原文地址:https://www.cnblogs.com/leihupqrst/p/6812385.html
Copyright © 2011-2022 走看看