• JAVA静态和非静态内部类


    一直对java的静态和非静态内部类的东东理解不清楚,今天测试了一下,下面把测试结果记录一下,加深印象。用于以后查找。 
    直接上代码。 
    Java代码 
    1. package com.test.xml;  
    2.   
    3. /** 
    4.  * @author <a href="mailto:dq201@126.com">du.qiang</a> 
    5.  * @version $Revision 1.1 $ 2010-6-23 上午06:48:28 
    6.  */  
    7. public class OutClassTest {  
    8.     static int a;  
    9.   
    10.     int b;  
    11.   
    12.     public static void test() {  
    13.         System.out.println("outer class static function");  
    14.     }  
    15.   
    16.     public static void main(String[] args) {  
    17.         OutClassTest oc = new OutClassTest();  
    18.         // new一个外部类  
    19.         OutClassTest oc1 = new OutClassTest();  
    20.         // 通过外部类的对象new一个非静态的内部类  
    21.         OutClassTest.InnerClass no_static_inner = oc1.new InnerClass();  
    22.         // 调用非静态内部类的方法  
    23.         System.out.println(no_static_inner.getKey());  
    24.   
    25.         // 调用静态内部类的静态变量  
    26.         System.out.println(OutClassTest.InnerStaticClass.static_value);  
    27.         // 不依赖于外部类实例,直接实例化内部静态类  
    28.         OutClassTest.InnerStaticClass inner = new OutClassTest.InnerStaticClass();  
    29.         // 调用静态内部类的非静态方法  
    30.         System.out.println(inner.getValue());  
    31.         // 调用内部静态类的静态方法  
    32.         System.out.println(OutClassTest.InnerStaticClass.getMessage());  
    33.     }  
    34.   
    35.     private class InnerClass {  
    36.         // 只有在静态内部类中才能够声明或定义静态成员  
    37.         // private static String tt = "0";  
    38.         private int flag = 0;  
    39.   
    40.         public InnerClass() {  
    41.             // 三.非静态内部类的非静态成员可以访问外部类的非静态变量和静态变量  
    42.             System.out.println("InnerClass create a:" + a);  
    43.             System.out.println("InnerClass create b:" + b);  
    44.             System.out.println("InnerClass create flag:" + flag);  
    45.             //  
    46.             System.out.println("InnerClass call outer static function");  
    47.             // 调用外部类的静态方法  
    48.             test();  
    49.         }  
    50.   
    51.         public  String getKey() {  
    52.             return "no-static-inner";  
    53.         }  
    54.     }  
    55.   
    56.     private static class InnerStaticClass {  
    57.         // 静态内部类可以有静态成员,而非静态内部类则不能有静态成员。  
    58.         private static String static_value = "0";  
    59.   
    60.         private int flag = 0;  
    61.   
    62.         public InnerStaticClass() {  
    63.             System.out.println("InnerClass create a:" + a);  
    64.             // 静态内部类不能够访问外部类的非静态成员  
    65.             // System.out.println("InnerClass create b:" + b);  
    66.             System.out.println("InnerStaticClass flag is " + flag);  
    67.             System.out.println("InnerStaticClass tt is " + static_value);  
    68.         }  
    69.   
    70.         public int getValue() {  
    71.             // 静态内部类访问外部类的静态方法  
    72.             test();  
    73.             return 1;  
    74.         }  
    75.   
    76.         public static String getMessage() {  
    77.             return "static-inner";  
    78.         }  
    79.     }  
    80.   
    81.     public OutClassTest() {  
    82.         // new一个非静态的内部类  
    83.         InnerClass ic = new InnerClass();  
    84.         System.out.println("OuterClass create");  
    85.     }  
    86.   
    87. }  


    Java代码 
    1. /** 
    2.  * 总结:  
    3.  * 1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。 
    4.  * 2.静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。 
    5.  * 3.实例化一个非静态的内部类的方法: 
    6.  *  a.先生成一个外部类对象实例 
    7.  *  OutClassTest oc1 = new OutClassTest(); 
    8.  *  b.通过外部类的对象实例生成内部类对象 
    9.  *  OutClassTest.InnerClass no_static_inner = oc1.new InnerClass(); 
    10.  *  4.实例化一个静态内部类的方法: 
    11.  *  a.不依赖于外部类的实例,直接实例化内部类对象 
    12.  *  OutClassTest.InnerStaticClass inner = new OutClassTest.InnerStaticClass(); 
    13.  *  b.调用内部静态类的方法或静态变量,通过类名直接调用 
    14.  *  OutClassTest.InnerStaticClass.static_value 
    15.  *  OutClassTest.InnerStaticClass.getMessage() 
    16.  */  

      原文地址:

    http://duqiangcise.iteye.com/blog/697476

  • 相关阅读:
    2022年为什么我们要学微前端,这5个理由你需要知道
    Web前端入门到精通必会的CSS样式和属性大全
    前端入门的学习平台:arry老师和清心老师共同打造的博客上线了
    前端新手看过来,教你从零CSS做漂亮网页,这样学习太有成就感了
    白嫖党福音,艾编程arry老师博客三十天免费学前端资源大放送
    赶紧收藏,超详细Web前端入门到精通必学的标签及属性大全
    2022年最新版,程序员最爱的5大浏览器下载地址(收藏)
    一个适合前端新手轻松上手的JavaScript教学
    一些基本常用的仿真语句,写的不多,大部分都是拷贝方式比多,所以有时还比较纠结
    python 读写二进制文件 with用法
  • 原文地址:https://www.cnblogs.com/scud001/p/3307380.html
Copyright © 2020-2023  润新知