Java内部类解析

简介:

内部类是定义在另一个类中的类。

内部类分类:局部内部类,匿名内部类,静态内部类。

 

局部内部类

 

匿名内部类

 

静态内部类

  有些时候,使用内部类只是为了把一个类隐藏在另外一个类的内部,而且并不需要这个内部类引用外围类对象,此时可以将内部类声明为static,以便取消产生的引用。下面是一个使用静态内部类的经典例子。考虑一下计算数组中最大值和最小是的问题。当然可以编写两个方法,一个求最大值,一个求最小值。但是这样做的后果是需要遍历数组两次。假如要求我们只允许遍历一次数组,那么怎么办?这样的好处是提高了效率。

  其实遍历一次数组可以求出最大值与最小值,代码如下:

View Code

  但是从上述代码中我们发现,需要返回max和min两个值。这个时候我们需要一个Pair的对象来存放我们最后需要返回的最大值与最小值。

Pair类的结构如下代码所示:

View Code

  但是如果将Pair声明为单独的一个类,而Pair这个名字又特别大众化,可能会和项目中的其他类名冲突(比如在同一个包下,两个不同的public class中都定义了一个叫做Pair的外部类,就会编译错误)。解决这个问题的方法就是将Pair定义为ArrayAlg的内部类。此后通过如下方式进行访问。

ArrayAlg.Pair p = ArrayAlg.minmax(d);

ArrayAlg的代码结构如下:

View Code

注意点:

  1. 因为在Pair对象中不需要引用任何其他的对象,所以可以将这个Pair内部类声明为static。
  2. 在我们上述列举的示例中,必须使用静态内部类,这是因为内部类对象(new Pair(min, max);)是在静态方法(public static Pair minmax(double[] values) )中构造的。静态方法(类方法,而不是对象的方法)中使用的变量必须是静态变量(类变量,而不是对象中的变量)。

静态内部类与普通内部类的区别

  1. 静态内部类中不能访问外围类中的属性与方法,而普通内部类是可以访问外围类中的属性与方法的,即使这些属性与方法是private的。
  2. 静态内部类相当于外部类的成员,只有在第一次被使用的时候才会被装载。

完整的静态内部类实例

View Code

 

 

 本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/06/06/2538178.html,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
人工智能 Cloud Native Java
2025 年 Java 应届生斩获高薪需掌握的技术实操指南与实战要点解析
本指南为2025年Java应届生打造,涵盖JVM调优、响应式编程、云原生、微服务、实时计算与AI部署等前沿技术,结合电商、数据处理等真实场景,提供可落地的技术实操方案,助力掌握高薪开发技能。
135 2
|
1月前
|
缓存 安全 Java
Java并发性能优化|读写锁与互斥锁解析
本文深入解析Java中两种核心锁机制——互斥锁与读写锁,通过概念对比、代码示例及性能测试,揭示其适用场景。互斥锁适用于写多或强一致性场景,读写锁则在读多写少时显著提升并发性能。结合锁降级、公平模式等高级特性,助你编写高效稳定的并发程序。
86 0
|
2月前
|
人工智能 Java 程序员
搭建AI智能体的Java神器:Google ADK深度解析
想用Java构建复杂的AI智能体?Google开源的ADK工具包来了!代码优先、模块化设计,让你像搭积木一样轻松组合智能体。从单体到多智能体系统,从简单工具到复杂编排,这篇文章带你玩转Java AI开发的全新境界。
|
2月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
116 0
|
1月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
147 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
23天前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
68 0
|
2月前
|
存储 Java Linux
操作系统层面视角下 Java IO 的演进路径及核心技术变革解析
本文从操作系统层面深入解析Java IO的演进历程,涵盖BIO、NIO、多路复用器及Netty等核心技术。分析各阶段IO模型的原理、优缺点及系统调用机制,探讨Java如何通过底层优化提升并发性能与数据处理效率,全面呈现IO技术的变革路径与发展趋势。
48 1
|
2月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
124 1
|
2月前
|
存储 Java 程序员
Java 基础知识点全面梳理包含核心要点及难点解析 Java 基础知识点
本文档系统梳理了Java基础知识点,涵盖核心特性、语法基础、面向对象编程、数组字符串、集合框架、异常处理及应用实例,帮助初学者全面掌握Java入门知识,提升编程实践能力。附示例代码下载链接。
108 1

热门文章

最新文章

推荐镜像

更多
  • DNS