您的位置:首页 > 编程语言 > Java开发

java学习笔记——内部类

2011-11-02 22:47 274 查看
内部类是定义在另一个类中的类。使用内部类的主要原因有以下三点:

内部类方法可以访问该类定义所在的作用域的数据,包括私有的数据;

内部类可以对同一个包中的其他类隐藏起来;

当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

内部类包括:普通内部类、局部内部类、匿名内部类、静态内部类。

这里我们不去讨论内部类的实现原理,就看下不同的内部类和普通的类有哪些差别。

下面是一个计时器的类,实现了ActionListener接口,实现的效果是每过10s输出一个提示。

普通类实现:

View Code

package com.test.www;

import java.security.PublicKey;

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();
}

Pair pair=ArrayAlg.minmax(d);
System.out.println("min="+pair.getFirst());
System.out.println("max="+pair.getSecond());
}
}

class ArrayAlg
{
public static Pair minmax(double[] values)
{
double min=Double.MAX_VALUE;
double max=Double.MIN_VALUE;
System.out.println(min+"----"+max);

for(double v:values)
{
if(min>v) min=v;
if(max<v) max=v;
}

return new Pair(min,max);
}
}

class Pair
{
public Pair(double f,double s)
{
first=f;
second=s;
}

public double getFirst()
{
return first;
}

public double getSecond()
{
return second;
}

private double first;
private double second;
}


但是有个问题,Pair是一个大众化的名字,很可能会产生冲突,将其设置为内部类,通过ArrayAlg.Pair来访问很好的解决了这个问题,不然命名可能会让你破费脑筋。

另一个为什么其必须是静态内部类的原因,是因为minmax方法被定义为了static方法,而static方法是不能访问对象状态的,只能访问类的静态域。所以,如果不生, Pair为static的话,编译器就会报错:没有隐式的ArrayAlg类型对象初始化内部类对象。

这些就是我们的内部类了,怎么去使用它要根据具体情况分析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: