一直对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. String类的实现

    1.在类中可以访问private成员包括两层含义:可以访问this指针的private成员:可以访问同类对象的private成员. 2.这里的String可以认为是个资源管理类,内部有个char指针, ...

  2. delphi HTML代码

    ################################属性 设置################################################字体设置{//-------- ...

  3. PhoneTutorial

    https://github.com/navasmdc/PhoneTutorial PhoneTutorial-master.zip

  4. 利用ajax获取到的网页源码不能执行js代码

    今天觉得我的博客中加载腾讯微博的速度很慢,所以就想改写为js,本来以为直接新建一个页面,把获取函数移到新的页面中,原来的页面只要使用xmlhttp去GET一下,然后把div的innerhtml属性等于 ...

  5. oc-06-无参方法的调用

    // 12-[掌握]无参方法声明实现及调用 #import <Foundation/Foundation.h> //类的声明 @interface Person : NSObject { ...

  6. python学习笔记(三)--条件语句

    Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条 ...

  7. zookeeper-3.4.6安装

    下载zookeeper包并解压 配置.在conf文件夹中将zoo_sample.cfg复制一份为zoo.cfg 修改zoo.cfg 在/home/admln/zookeeper中新建一个文件myid( ...

  8. HTML 之 Embed兼容问题

    首先IE只支持对Object的解析,火狐.谷歌.Safari只支持对Embed的解析. 1.传统的方法 <object classid="clsid:d27cdb6e-ae6d-11c ...

  9. cooking java ——加密解密

    java安全与密码概述 主要分为三部分: 密码学基础,包括:相关术语:分类:常用安全体系. java的安全组成:jdk以及第三方扩展. 相关实现代码,包括:base64.MD5········ 密码学 ...

  10. MapReduce中的作业调度

    MapReduce是hadoop提供一个可进行分布式计算的框架或者平台,显然这个平台是多用户的,每个合法的用户可以向这个平台提交作业,那么这就带来一个问题,就是作业调度. 任何调度策略都考虑自己平台调 ...