一直对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. 根据条件自定义 cxGrid 的单元格样式

    当指定的单元格需要指定样式(如字体颜色设置为红色,背景色设置为黄色)时,可按如下步骤进行: 1.添加 csStyleRepository 控件,并新建 Style,设置前景(TextColor).背景 ...

  2. Codeforces Round #333 (Div. 1) C. Kleofáš and the n-thlon 树状数组优化dp

    C. Kleofáš and the n-thlon Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...

  3. uoj #139. 【UER #4】被删除的黑白树 dfs序 贪心

    #139. [UER #4]被删除的黑白树 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/139 Descript ...

  4. Codeforces Gym 100650C The Game of Efil DFS

    The Game of EfilTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/v ...

  5. Web之真假分页

    在web设计中一个无法避免的问题就是分页显示.当数据量特别大的时候,我们不可能将全部的数据都在一个页面进行显示,假设这样将严重影响到它的美观性.所以在这个时候,分页显示则成为了我们的大功臣.当然分页也 ...

  6. 模式识别 - 处理多演示样例学习(MIL)特征(matlab)

    处理多演示样例学习(MIL)特征(matlab) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27206325 多演示样例学习( ...

  7. as3中使用stage ,root ,this 区别详解

    stage:最顶层舞台root:stage的下一级舞台,属于第二层舞台(继承自DisplayObject)this:当前的对象(如果是主时间轴上的this,那它就是root) 继承方面:Stage - ...

  8. win7系统激活最简单方法

    利用激活工具快速激活WIN7系统! 工具/原料 小马Oem7.未激活的WIN7系统 步骤/方法 1 复制BT种子 http://www.pccppc.com/download/oem7F.rar粘贴到 ...

  9. php运行步骤解析

    2000年, PHP4.0发布的时候,引入了Zend Engine. Zend引擎把PHP代码的执行切分成两个阶段: 一. Zend Engine 解析PHP代码并生成二进制中间码Zend Opcod ...

  10. H - 高桥和低桥

    H - 高桥和低桥 Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit Sta ...