「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」
在本系列中,你会了解如何使用内部类,局部内部类,匿名内部类以及静态内部类。
1. 静态内部类
在很多时候, 使用内部类只是为了把一个类隐藏在另一个类的内部,并不需要内部类有外部类对象的一个引用。为此,可以把把内部类声明为static,这样就不会生成那个引用。
下面是一个想要使用静态内部类的例子。
我们考虑这样一个任务,计算一个数组中的最大值和最小值。我们只遍历数组一次,同时计算出最小值和最大值,这样可以提高效率。
double min = Double.POSITIVE_INFINITY;
double max = Double.NEGATIVE_INFINITY;
for (double v : values)
{
if ( min > v) min = v;
if ( max < v) max = v;
}
复制代码
我们定义一个包含两个值的类Pair来包含这两个返回值。
class Pair
{
private double min;
private double max;
public Pair(double n, double x)
{
min = n;
max = x;
}
public double getMin() { return min;}
public double getMax() { return max;}
}
复制代码
minmax方法可以返回一个Pair类型的对象。
class ArrayAlg
{
public static Pair minmax(double[] values)
{
. . .
return new Pair(min, max);
{
}
复制代码
这个方法的调用者可以使用getMin和getMax来获得答案:
Pair p = ArrayAlg.minmax(d);
System.out.println("min = " + p.getMin());
System.out.println("max = " + p.getMax());
复制代码
当然,Pair是一个十分常见,容易造成命名冲突的名字。我们可以将Pair定义成ArrayAlg的一个公共内部类。然后就可以通过ArrayAlg.Pair来访问它了。
class ArrayAlg
{
public static class Pair
{
. . .
}
. . .
}
ArrayAlg.Pair p = ArrayAlg.minmax(d);
复制代码
只有内部类可以声明为static。在我们的示例中,必须使用静态内部类,这是因为内部类对象是在静态方法中构造的。
public static Pair minmax(double[] values)
{
. . .
return new Pair(min, max);
{
复制代码
请注意,只要内部类不需要访问外围类对象,就应该使用静态内部类。与常规内部类不同,静态内部类可以有静态字段和方法。另外,在接口中声明的内部类自动添加了public和static修饰符。
- 每天一个Java小知识
最有效率的方法算出2*8等于几?
使用位运算,效率最高:2<<3,表示2向左移动了3位,就相当于2乘以2的3次方,结果:16。
感谢观看,这是Java 内部类系列的最后一篇文章,如果您有兴趣,可以关注一下我,方便查看后续文章,一起学习,共同进步,不胜感激!




近期评论