一直对java的静态和非静态内部类的东东理解不清楚,今天测试了一下,下面把测试结果记录一下,加深印象。用于以后查找。 
直接上代码。

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

JAVA静态和非静态内部类的更多相关文章

  1. “全栈2019”Java第七十六章:静态、非静态内部类访问权限

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. java静态与非静态区别

    这里的静态,指以static关键字修饰的,包括类,方法,块,字段. 非静态,指没有用static 修饰的. 静态有一些特点: 1.全局唯一,任何一次的修改都是全局性的影响 2.只加载一次,优先于非静态 ...

  3. 基于NACOS和JAVA反射机制动态更新JAVA静态常量非@Value注解

    1.前言 项目中都会使用常量类文件, 这些值如果需要变动需要重新提交代码,或者基于@Value注解实现动态刷新, 如果常量太多也是很麻烦; 那么 能不能有更加简便的实现方式呢? 本文讲述的方式是, 一 ...

  4. java静态类与非静态类区别

    java静态与非静态区别   这里的静态,指以static关键字修饰的,包括类,方法,块,字段. 非静态,指没有用static 修饰的. 静态有一些特点: 1.全局唯一,任何一次的修改都是全局性的影响 ...

  5. Java非静态内部类中为什么不能有静态变量却可以有常量?

    如:public class InnerClassDemo{ int x; class A{ static int a = 0;//这样写是不合法的. static final int b=0;//这 ...

  6. “全栈2019”Java第七十三章:外部类里多个静态非静态内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  8. java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

    提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定 ...

  9. Java:静态内部类的使用目的、使用限制、与非静态内部类的对比

    Java之静态内部类(static class) 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的. 一.静态内部类的使用目的. 在 ...

随机推荐

  1. Mac下生成RSA密钥

    MAC OS自带了OpenSSL,直接在命令行里使用OPENSSL就可以. 打开命令行工具,然后输入 openssl打开openssl,接着只要三句命令就可以搞定. 第一句命令生成1024位私钥: O ...

  2. CN今日凌晨出现全部瘫痪的故障,持续近6个小时

    今日凌晨1点左右,所有cn后缀的网站出现无法访问的情况,原因来自于所有的cn域名均无法解析.据国内知名DNS解析商DNSLA称,故障源自CN所使用的根域名授权服务器瘫痪所致,故障一直持续到今天早上7点 ...

  3. Codeforces Round #274 (Div. 1) B. Long Jumps 数学

    B. Long Jumps Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/480/problem/ ...

  4. Java多线程模式(二)

    Guarded Suspension Pattern      该模式描述的是当一个线程在执行某个操作时,但由于其他资源还没有准备好,需要等待,那么就等待资源准备好才开始自己的操作.我们直接看代码例子 ...

  5. delphi 如何知道 Treeview,Listview 当前最上面显示的节点

    如何知道 Treeview,的节点是根节点       procedure TForm1.TreeView1ContextPopup(Sender: TObject; MousePos: TPoint ...

  6. python选择排序

    def select_sort(list): for i in range(len(list)): position = i for j in range(i,len(list)): if list[ ...

  7. 有图有真相,分享一款网页版HTML5飞机射击游戏

    本飞机射击游戏是使用HTML5代码写的,尝试通过统一开发环境(UDE)将游戏托管在MM应用引擎,直接生成了网页版游戏,游戏简单易上手,非常适合用来当做小休闲打发时间. 游戏地址:http://flyg ...

  8. android 自定义 radiobutton 文字颜色随选中状态而改变

    主要是写一个 color selector 在res/建一个文件夹取名color res/color/color_radiobutton.xml <?xml version="1.0& ...

  9. Zend Studio / Ecliplse插件StartExplorer

    Install site.zip (quick and simple way) Locate zip file under site\target in Project Explorer, Start ...

  10. 如何删除google流氓扩展(强制安装,并且无权限删除)

    chrome现在也是流氓遍地跑, 没比IE安全到哪里. TubeAdblocKer 这个流氓扩展,强制安装,无法删除.google了一大堆方法,全部无效.祭出了filelocator这个神器之后,终于 ...