嵌套类是指被定义在另一个类内部的类,它为外部类提供服务。嵌套类分四种:静态成员类、非静态成员类、匿名类和局部类。

一、静态成员类与非静态成员类的区别?在什么情况下可以用静态成员类?

我们知道在类的设计中,为了避免继承破坏封装性,组合优于继承。通过使用成员类来实现组合设计,需要足够了解它们的特性以及在何时使用。

从表面上看,静态成员类只是比非静态的成员类在声明上多出了修饰符static。尽管它们功能相似,但与实际上,非静态成员类的每个实例都隐含关联着一个外部类的实例。也就是说,非静态成员类不可能独立于它的外部类实例之外而独立存在。

公有静态成员类可作为辅助类,如Compass类中的枚举Dir:

View Code

 1 package com.mnid.innerclass; 2  3 public class Compass { 4     private Dir direction = Dir.SOUTH; 5      6     public static enum Dir { 7         EAST, SOUTH, WEST, NORTH; 8     } 9     10     public Dir directing() {11         //Bulk of class omitted12         return direction;13     }14 }

使用私有的静态成员类常见方法是用来代表外围类所代表的对象的组件,如一个Map实例,它的内部都有一个Entry对象对应Map中的所有键-值对,但Entry本身不需要访问Map,因此可以使用私有静态成员类设计。

非静态成员类实例都额外的对外部类实例的引用会引起不必要的开销。如果成员类不需要访问外部类实例,就应该将其声明为static的。

二、匿名类的限制和使用以及局部类

匿名类在声明的同时就进行实例化。它不是外部类的成员,并且只有在非静态环境中才有外围实例引用。

匿名类的常见用法是动态创建函数对象:

View Code

 1 public String fetchShortest(String[] strArray) { 2          3     Arrays.sort(strArray, new Comparator<String>() { 4  5         @Override 6         public int compare(String s1, String s2) { 7             return s1.length() - s2.length(); 8         } 9     });10     return strArray[0];11 }

其他常见用法包括创建过程对象,如Runable、Thread;在静态工厂方法内部也经常用到。

局部类可以在任何声明局部变量的地方声明,其特性与其他三种嵌套类一样。

声明匿名类和局部类时需非常简短,以免影响可读性。

转载于:https://www.cnblogs.com/dummyE/archive/2012/01/14/2322297.html

Java嵌套类的使用相关推荐

  1. java 嵌套类: Nested classes

    java 嵌套类: Nested classes 嵌套类分类 静态嵌套类 非静态嵌套类 普通内部类: Common classes 局部内部类: Local classes 匿名内部类: Anonym ...

  2. java 嵌套类 继承_Java嵌套类 - 爱吃苹果的搬运工的个人空间 - OSCHINA - 中文开源技术交流社区...

    在Java中可以创建几种不同类型的嵌套类: 静态嵌套类: 静态内部类可以独立于外部类被实例化,无法访问外部类中的非静态属性和方法,只能外部类的实例来访问外部类的非静态变量 public class O ...

  3. Java嵌套类(Nested Classes)总结

    Nested Classes定义 在java语言规范里面,嵌套类(Nested Classes)定义是: A nested class is any class whose declaration o ...

  4. java 嵌套类 作用_java 嵌套类的分类、为什么使用嵌套类?

    java程序语言允许你在一个类里面再声明另一个类,这样的类成为嵌套类,说明如下:class OuterClass { ... class NestedClass { ... } } 术语:嵌套类分为两 ...

  5. java嵌套类与内部类

    一.嵌套类(Nested Classes) 使用嵌套类减少了命名冲突,一个内部类可以定义在一个类中,一个方法中甚至一个表达式中. (1)定义 A nested(嵌套) class is any cla ...

  6. java 嵌套类implement_有关 C++ 嵌套类

    嵌套类的访问问题: 记得白凤煮的C++中有一句这样的话:C++嵌套类只是语法上的嵌套.然而在实践过程中,却并非如此. Ex: classA { public: staticinta; classA1 ...

  7. Java 嵌套类和内部类演示样例lt;二gt;

    嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...

  8. java 嵌套类 map_java – 将groupingBy用于嵌套Map,但收集到不同类型的对象

    所以我有这个"工作"的代码(为简单起见替换一些名称): Map>> someMap = someListOfClassA.stream() .filter(...) . ...

  9. java嵌套类中的方法怎么调用_java类与嵌套嵌套后,怎么使用最外层的类建立对象后使用内部类的方法?...

    展开全部 /* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; im ...

最新文章

  1. UNIX--更改/输出当前工作目录
  2. mysql实现查询最近7天的数据
  3. 一句话搞定python六剑客
  4. 选择屏幕——按钮、单选复选框
  5. 微型计算机生产工艺,bb肥生产设备制造工艺流程
  6. 两个三维向量叉积_线性代数的本质08 叉积
  7. loginrequired注解_简单实现一个登录验证的注解来保护私有资源
  8. 每个特征图1各因子和一个偏置_nlp中的概率图模型
  9. elm预测matlab,机器学习——极限学习(ELM)matlab代码分析
  10. 《Excel图表之道》学习与阅读启示(一)
  11. 微信小游戏3d入门视频教程
  12. Android BLE HIDS Data ,从问询DB 到写入Android 节点的flow之二
  13. 科大讯飞的语音合成(播放)功能
  14. 什么是网络号,主机号,主机地址,网络地址,主机地址,子网号,子网地址
  15. 腾讯云-如何选择购云资源聚划算
  16. 北京2022年最后一次快开始了,准备好了吗?
  17. 离散数学-集合:1.集合的基本概念
  18. 信安软考 第八章 防火墙技术与原理运用
  19. MapStruct分析
  20. Spring源码解析三

热门文章

  1. O太多,具体都代表什么呢?
  2. 对每个 IP 访问量实时监控。
  3. 【数据平台】基于pymysql库python连接mysql
  4. Leetcode 682. 棒球比赛 解题思路及C++实现
  5. Android绑定多个aidl,android aidl 多`module`版的实现
  6. eclipse自动排版快捷键、自动引入包
  7. 网页中返回顶部代码(多种方法)另附注释说明
  8. Python 图像处理篇-利用opencv库展示本地图片实例演示
  9. Python 技术篇-使用PyQt5库获取电脑屏幕桌面的宽、高和分辨率
  10. [ACTF2020 新生赛]Upload