核心Java第1卷第6章6.4.7静态内部类

核心Java第1卷第6章6.4.7静态内部类,java,inner-classes,Java,Inner Classes,那里。 我一直在从CoreJavaVolume19thEdition学习Java,我对书中的一个示例(清单6.8)有点困惑 为什么类“ArrayAlg”的方法名(minmax)前面有一个“Pair”? public static Pair minmax(double[] values) 源代码如下: package staticInnerClass; public class StaticInnerClassTest { public static void main(Str

那里。
我一直在从CoreJavaVolume19thEdition学习Java,我对书中的一个示例(清单6.8)有点困惑
为什么类“ArrayAlg”的方法名(
minmax
)前面有一个“Pair”?

public static Pair minmax(double[] values)
源代码如下:

package staticInnerClass;

public class StaticInnerClassTest
{    
    public static void main(String[] args)
    {
        double[] d = new double[20];
        for (int i = 0; i < d.length; i++)
            d[i] = 100 * Math.random();
        ArrayAlg.Pair p = ArrayAlg.minmax(d);
        System.out.println("min = " + p.getFirst());
        System.out.println("max = " + p.getSecond());
    }    
}

class ArrayAlg
{
    /**
     * A pair of floating-point numbers
     */
    public static class Pair
    {
        private double first;
        private double second;

        /**
         * Constructs a pair from two floating-point numbers
         * @param f the first number
         * @param s the second number
         */
        public Pair(double f, double s)
        {
            first  = f;
            second = s;
        }

        /**
         * Returns the first number of the pair
         * @return the first number
         */
        public double getFirst()
        {
            return first;
        }

        /**
         * Returns the second number of the pair
         * @return the sceond number
         */
        public double getSecond()
        {
            return second;
        }
    }

    /**
     * Computes both the minimum and the maximum of an array
     * @param values an array of floating-point numbers
     * @return a pair whose first element is the minimum and whose second element is the maximum
     */
    public static Pair minmax(double[] values)
    {
        double min = Double.MAX_VALUE;
        double max = Double.MIN_VALUE;
        for (double v : values)
        {
            if (min > v)
                min = v;
            if (max < v)
                max = v;
        }
        return new Pair(min, max);
    }
}
包静态内部类;
公共类静态类测试
{    
公共静态void main(字符串[]args)
{
double[]d=新的double[20];
对于(int i=0;iv)
min=v;
如果(最大值
声明
公共静态对minmax(double[]值)
中的
是方法的返回类型。
Pair
是一个内部类这一事实无关紧要,如果它是一个顶级类,那么声明看起来会完全相同(当然,假设您导入了该类).

Pair
ArrayAlg
的静态内部类-声明类型为
Pair
的变量有多种方法,但最常见的方法如下所示,声明形式如下:

[outer class].[inner class] [variable name] = ...
这就好像外部类只是您感兴趣的类(类型)的完整路径(包括包)中的另一个级别


虽然可以说编译器可以从方法返回类型推断变量类型,但Java不是这样工作的,因此必须明确。

这是方法返回值的类型。另一方面,根据JLS,静态内部类不存在。它被称为嵌套类。内部类从来都不是静态的。