一直对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 Gym 100002 B Bricks 枚举角度

    Problem B Bricks" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100002 ...

  2. C语言结构体和联合体

    1.单链表插入 #include <stdio.h> #include <stdlib.h> #define FALSE 0 #define TRUE 1 typedef st ...

  3. 深入理解windows

    阿猫翻译的,用作备忘 深入理解windows——session.window stations.desktops 翻译自:http://www.brianbondy.com/blog/id/100/ ...

  4. log4j个人使用整理

    Log4j介绍: 略过. 配置: Eclipse项目中添加log4j.jar到lib下. 在bin目录下新建log4j.properties,编辑好log4j配置文件. 样例分析: log4j.roo ...

  5. 防止vuejs在解析时出现闪烁

    ---## 防止vuejs在解析时出现闪烁 ## 原因: 在使用vuejs.angularjs开发时,经常会遇见在如Chrome这类能够快速解析的浏览器上出现表达式({{ express }} ),或 ...

  6. ruby 疑难点之—— yield 和 yield self

    yield 所有的"方法(methods)"隐式跟上一个"块(block)"参数. 块参数也可以明确给定,形式就是在参数前面加一个"&&quo ...

  7. CSS的总结(选择器,伪类等...)

    关于组合选择器可参考:http://www.cnblogs.com/starof/p/4453458.html 主要内容 CSS概述 CSS和HTML结合的四种方式 CSS样式优先级和代码规范 CSS ...

  8. 关于JDK中的运算符和变量

    类名首字母必须大写.多个单词组成的类名,每个单词的首字母大写. 只要起名称就要让他有意义.Java中的关键字都是由小写字母组成的. 在项目中给标示符起名字在公司中大都有固定的规则.一般加上标示符和$符 ...

  9. Oracle查询被锁的表及进程的方法

    Oracle查询可以有多种方法,下面为您介绍的是如何Oracle查询被锁的表及Oracle查询连接的进程的方法,希望对您能够有所帮助. 一.查看被锁的表 select p.spid,a.serial# ...

  10. poj 2983 差分约束

    思路: 设dis[i]为标号为i的点到0号点的距离.对于P A B X,我们能得到等式dis[a]-dis[b]=x,那么可以化为两个不等式dis[a]-dis[b]>=x和dis[b]-dis ...