一直对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. Codeforces Round #333 (Div. 2) B. Approximating a Constant Range st 二分

    B. Approximating a Constant Range Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com ...

  2. oracle批量导出AWR报告

    工作需求:项目中需要把生产库中所有的AWR报告dump出来,然后导入到方便测试的数据库中.在测试库中的AWR报告需要根据dbid和实例名逐个导出,如果遇到很多再加上RAC系统,会很麻烦.在网上找了一些 ...

  3. C++中使用union的几点思考(转)

    C++中使用union的几点思考 大卫注:这段时间整理旧资料,看到一些文章,虽然讲的都是些小问题,不大可能用到,但也算是一个知识点,特整理出来与大家共享.与此相关的那篇文章的作者的有些理解是错误的,我 ...

  4. Asp.Net页面(母版页)加载顺序

    ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序.对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件.控件事件不会 ...

  5. 算法入门系列一--DP初步

    数字三角形(数塔问题) 其实动态规划本身并不是一个特定的算法,是一种用途广泛的问题求解方法,一种思想,一种手段. 1.1问题描述与状态定义 有一个有非负整数组成的三角形,第一行一个数字,下面各行除了最 ...

  6. 将Uploads文件夹移到其它地方

    1.在创建目录 cd /mnt/xvdb mkdir qingtong 2.复制目录和权限 cp -rp /Uploads/ ./ -r 包括目录 p权限 3.创建软链接 ln -s /mnt/xvd ...

  7. javascript运行机制之执行顺序详解(转)

    转自http://www.admin10000.com/document/3385.html JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言, ...

  8. 高级I/O之记录锁

    若两个人同时编辑一个文件,其后果将如何呢?在很多UNIX系统中,该文件的最后状态取决于写该文件的最后一个进程.但是对于有些应用程序(例如数据库),进程有时需要确保它正在单独写一个文件.为了向进程提供这 ...

  9. Google搜索语法

    原文:http://www.jianshu.com/p/37fe4f1381ef 前言 之前听过一个笑话,有人打开浏览器,输入www.baidu.com, 然后搜索框输入Google,查询google ...

  10. iOS10全新推送功能的实现

    从iOS8.0开始推送功能的实现在不断改变,功能也在不断增加,iOS10又出来了一个推送插件的开发(见最后图),废话不多说直接上代码: 在开始之前需要打开一个推送开关,不然无法获取deviceToke ...