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,如需转载请自行联系原作者

目录
相关文章
|
8天前
|
Java
Java中ReentrantLock释放锁代码解析
Java中ReentrantLock释放锁代码解析
25 8
|
28天前
|
Java
java中,剩下的这两个内部类不太好理解!
java中,剩下的这两个内部类不太好理解!
12 0
|
28天前
|
Java 编译器
java中常见的几种内部类,你会几个?(未完)
java中常见的几种内部类,你会几个?(未完)
14 1
|
6天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
10 0
|
6天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
25 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
8天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
24天前
|
Java 程序员 C#
静态构造方法解析,Java新手必看技能
静态构造方法解析,Java新手必看技能
8 0
|
28天前
|
XML Java 数据格式
使用java解析XML文件的步骤
使用java解析XML文件的步骤
10 0
|
30天前
|
Java 开发者
深入解析Java中的Lambda表达式
本文深入探讨Java编程语言中的Lambda表达式,介绍了Lambda表达式的定义、优势以及在实际开发中的应用场景,旨在帮助读者更好地理解和运用这一特性。

推荐镜像

更多