【JavaCore】内部类4

「这是我参与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 内部类系列的最后一篇文章,如果您有兴趣,可以关注一下我,方便查看后续文章,一起学习,共同进步,不胜感激!