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

一、静态内部类的使用目的。

在定义内部类的时候,在其前面加上一个权限修饰符static。这个内部类就变为了静态内部类。如在进行代码程序测试的时候,如果在每一个Java源文件中都设置一个主方法(主方法是某个应用程序的入口,必须具有),那么会出现很多额外的代码。而且最主要的是这段主程序的代码对于Java文件来说,只是一个形式,其本身并不需要这种主方法。但是少了这个主方法又是万万不行的。在这种情况下,就可以将主方法写入到静态内部类中,从而不用为每个Java源文件都设置一个类似的主方法。这对于代码测试是非常有用的。在一些中大型的应用程序开发中,则是一个常用的技术手段。

二、静态内部类的使用限制

将某个内部类定义为静态类,跟将其他类定义为静态类的方法基本相同,引用规则也基本一致。不过其细节方面仍然有很大的不同。具体来说,主要有如下几个地方要引起各位程序开发人员的注意。

一是静态成员(包括静态变量与静态成员)的定义。

在非静态内部类中不可以声明静态成员。如现在在一个student类中定义了一个内部类Age,如果没有将这个类利用static关键字修饰,即没有定义为静态类,那么在这个内部类中如果要利用static关键字来修饰某个成员方法或者成员变量是不允许的。在编译的时候就通不过。故程序开发人员需要注意,只有静态内部类才能够定义静态的成员变量与成员方法。

二是在成员的引用上,有比较大的限制。

一般的非静态内部类,可以随意的访问外部类中的成员变量与成员方法。即使这些成员方法被修饰为private(私有的成员变量或者方法)。因为在其他类中是无法访问被定义为私有的成员变量或方法。但是如果一个内部类被定义为静态的,那么在引用外部类的成员方法或者成员变量的时候,就会有诸多的限制。如不能够从静态内部类的对象中访问外部类的非静态成员(包括成员变量与成员方法)。这是什么意思呢?如果在外部类中定义了两个变量,一个是非静态的变量,一个是静态的变量。静态内部类只能引用外部类中的静态的成员(变量或方法),而不能够访问非静态的变量。对于那些非静态的成员变量与成员方法,在静态内部类中是无法访问的。这就是静态内部类的最大使用限制。在普通的非静态内部类中是没有这个限制的。也正是这个原因,决定了静态内部类只应用在一些特定的场合。其应用范围远远没有像非静态的内部类那样广泛。

三是在创建静态内部类时不需要将静态内部类的实例绑定在外部类的实例上。

通常情况下,在一个类中创建成员内部类的时候,有一个强制性的规定,即内部类的实例一定要绑定在外部类的实例中。也就是说,在创建内部类之前要先在外部类中要利用new关键字来创建这个内部类的对象。如此的话如果从外部类中初始化一个内部类对象,那么内部类对象就会绑定在外部类对象上。也就是说,普通非静态内部类的对象是依附在外部类对象之中的。通常情况下,程序员在定义静态内部类的时候,是不需要定义绑定在外部类的实例上的。也就是说,要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。

从以上的分析中可以看出,静态内部类与非静态的内部类还是有很大的不同的。一般程序开发人员可以这么理解,非静态的内部类对象隐式地在外部类中保存了一个引用,指向创建它的外部类对象

牢记两个差别:

一、如是否可以创建静态的成员方法与成员变量(静态内部类可以创建静态的成员,而非静态的内部类不可以)

二、对于访问外部类的成员的限制(静态内部类只可以访问外部类中的静态成员变量与成员方法,而非静态的内部类即可以访问所有的外部类成员方法与成员变量)。

这两个差异是静态内部类与非静态外部类最大的差异,也是静态内部类之所以存在的原因。了解了这个差异之后,程序开发人员还需要知道,在什么情况下该使用静态内部类。如在程序测试的时候,为了避免在各个Java源文件中书写主方法的代码,可以将主方法写入到静态内部类中,以减少代码的书写量,让代码更加的简洁。

总 之,静态内部类在Java语言中是一个很特殊的类,跟普通的静态类以及非静态的内部类都有很大的差异。作为程序开发人员,必须要知道他们之间的差异,并在 实际工作中在合适的地方采用合适的类。不过总的来说,静态内部类的使用频率并不是很高。但是在有一些场合,如果没有这个内部静态类的话,可能会起到事倍功半的反面效果。

非静态内部类实例:

package common.lang;public class Student {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public class Child{private String name1;private int age1;public String getName1() {return name1;}public void setName1(String name1) {this.name1 = name1;}public int getAge1() {System.out.println(age);return age1;}public void setAge1(int age1) {this.age1 = age1;}}public static void main(String[] args) {Student s = new Student();s.setAge(12);s.setName("yao");Child c = s.new Child();System.out.println(c.getAge1());}
}

静态内部类实例:

package common.lang;public class Student {private String name;private static int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public static int getAge() {return age;}public static void setAge(int age) {Student.age = age;}public static class Child{private String name1;private int age1;public String getName1() {return name1;}public void setName1(String name1) {this.name1 = name1;}public int getAge1() {System.out.println(age);return age1;}public void setAge1(int age1) {this.age1 = age1;}}public static void main(String[] args) {Student s = new Student();Child c = new Child();}
}

Java静态内部类(static class)相关推荐

  1. java的static关键字

    java的static关键字 静态变量和静态方法 static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static ...

  2. java中static、final 和 static final之间的区别

    java中static.final 和 static final之间的区别 static可以修饰:全局属性,方法,代码块,内部类(静态内部类或嵌套内部类) 由于静态属性和方法是属于该类的所有对象的,所 ...

  3. java中static关键字的作用(java中static关键字的作用)

    关键字static的作用是什么? 在Java语言中,static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但 ...

  4. 面试官:兄弟,说说Java的static关键字吧

    读者乙在上一篇我去系列文章里留言说,"我盲猜下一篇标题是,'我去,你竟然不知道 static 关键字'".我只能说乙猜对了一半,像我这么有才华的博主,怎么可能被读者猜中了心思呢,必 ...

  5. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  6. Java中static的作用

    Java中static的作用 请先看下面这段程序: public class Hello{ public static void main(String[] args){ //(1) System.o ...

  7. Java中static的含义和用法

    Java中static的含义和用法 static:静态的,用于修饰成员(成员变量,成员方法); 1.被static所修饰的变量或者方法会储存在数据共享区; 2.被static修饰后的成员变量只有一份! ...

  8. java的static和private_static关键字什么意思?Java中是否可以覆盖一个private或者是static的方法?...

    答案:"static"关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问.Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而s ...

  9. Java的static,final,代码块,内部类,抽象类,接口等

    Java的static,final,代码块,内部类,抽象类,接口等 1 static关键字月final关键字 1.1 static static表示静态.可以修饰属性,方法,代码块内部类等,总结如下: ...

最新文章

  1. 2019男生身高受欢迎程度表
  2. requests不加代理
  3. LintCode_173 链表插入排序
  4. 【技术好文转载】为什么AI芯片是当今热点
  5. 设计面向游戏的人工智能(三):战术和战略人工智能 (AI)
  6. php获取目录中的所有文件名
  7. 华为云网络测量如何“悬丝诊脉”
  8. JAVA内部类示例分析
  9. H5学习从0到1-H5的新特性(1)
  10. 图像分割算法及与目标检测、目标识别、目标跟踪的关系
  11. Windows NT操作系统
  12. 计组_指令周期/机器周期(cpu周期)/时钟周期(节拍T) 主频超频/cpu频率发热
  13. 视频网站套上CDN是什么效果?
  14. 服务器系统会提示有神兽刷新吗,我的世界神奇宝贝服务器里刷新神兽提示是那些...
  15. 骐骥一跃 驽马十驾-数据库触发器
  16. AM335x(TQ335x)学习笔记——Nand网卡驱动移植
  17. 架构成长这十年,人生沉浮无限多!
  18. android qq登陆界面代码下载,【Android Demo】QQ登陆界面(一)
  19. php和吉他哪个难学,良心点评解析红棉和雅马哈的古典吉他有区别没有?哪个好?老手吐槽大实话...
  20. mac,修改终端电脑名

热门文章

  1. css持续淡入淡出,在CSS中连续的淡入淡出效果
  2. JVM内存调优 -Xms -Xmx -Xmn -Xss 参数设置
  3. JS获取当前时间的方法
  4. cjson构建_cJSON用法总结
  5. 实验 7——成员访问控制与异常
  6. 李开复爆料曾与奥巴马同班 两人并称最害羞男生
  7. 目标检测开源代码汇总 object detection algorithm codes (转)
  8. Word中批量修改MathType公式的字体大小
  9. IOS高德地图点击锚点使锚点位于屏幕中间
  10. IOS app电量测试方法调研