我们知道一个函数只有一个返回值,如果当返回很多数据的时候,这个返回值是需要处理的,也就是返回值的类型(数组或者自定义类来解决)
当我们要处理做一个处理的时候,需要返回两个以上的参数的时候,就可以用内部类解决这个问题
而如果此时这个作为返回值的内部类不需要引用外围类对象的话,就可以加上STATIC 静态内部类 取消产生内部类的作用
因为内部类对象总有一个隐式引用,它指向了创建它的外部对象
当你使用了静态Static来修饰这个内部类的时候,这个引用将被取消。
也就是有这样一个特性:
静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他所有内部类完全一样
接下来我们看看java技术核心提供的代码:
内部类:
package org.innerclass.operate;
public class ArrayAlg {
public static class Pair{
private double first;
private double second;
public Pair(double f,double s){
first = f;
second = s;
}
public double getFirst() {
return first;
}
public double getSecond() {
return second;
}
}
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);
}
}
测试类:
package org.innerclass.operate;
public class StaticInnerClassTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
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());
}
}
}
这里还有一句话:
这个示例中内部类必须是静态的,因为外部类对象是在静态方法中构造这个内部类的对象的。
如果没有static,表示这个内部类是静态内部类,那么编译器将会给出错误报告:
没有可用的隐式ArrayAlg类型对象初始化内部类对象