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

如何应用Java的静态内部类 推荐

2009-06-10 08:49 369 查看

12.3.4 静态内部类

在上一小节我们讨论了内部类,即在一个类中包含有另外一个或者多个类(见本书12.3.3小节)。与内部类相似,静态内部类指在一个类的内部包含有另外一个或者多个静态类。例如:

public class OuterClass
{
...
static class StaticInnerClass1 { //内部静态类
//只可以访问OuterClass的静态成员
...
} //StaticInnerClass结束
...

static class StaticInnerClassN { //更多静态内部类
//只可以访问OuterClass的静态成员
...
} //StaticInnerClassN结束
} //OuterClass结束

与一般内部类不同,在静态代码中不能够使用this操作,所以在静态内部类中只可以访问外部类的静态变量和静态方法。使用静态内部类的目的和使用内部类相同。如果一个内部类不依赖于其外部类的实例变量,或与实例变量无关,则选择应用静态内部类。
如下例子演示怎样使用静态内部类:

///完整程序存在本书配套资源目录Ch12名为StaticInnerClassTest.java
public class
StaticInnerClassTest {
public static void main( String args[] ) {
OuterClass2 outer = new OuterClass2();
OuterClass2.StaticInnerClass.innerMethod();

//调用静态内部类的静态方法
OuterClass2.outerMethod();
//创建静态内部类对象
OuterClass2.StaticInnerClass staticInner = new
OuterClass2.StaticInnerClass();
int num = staticInner.innerMethod2(); //调用静态内部类实例方法
}
}
class
OuterClass2 { //外部类
private double x = 0.0; //内部静态类不可以访问外部类实 例变量
static
private int n = 10; //外部类静态变量
static
void outerMethod() { //外部类静态方法
System.out.println("from
OuterClass...");
}
void outerMethod2() {
System.out.println("from
OuterClass’ instance method2()...");
}
static
class StaticInnerClass { //静态内部类
static
private int m = 5; //静态内部类静态变量
static void innerMethod() { //静态内部类静态方法
int
sum;
n
= 20; //只可以访问外部类静态变量
sum
= n + m;
System.out.println("from InnerClass sum
= " + sum);
outerMethod(); //只可以调用外部类静态方法
}
int innerMethod2() {
n
= 100;
outerMethod();
System.out.println("from
InnerMethod2() n = " + n);
return
n;
}
} //静态内部类结束
} //外部类结束

如同不用创建对象就可调用静态方法一样,上例静态内部类中的静态方法利用:

OuterClass2.StaticInnerClass.innerMethod(); //静态内部类调用其静态方法

来调用。注意,可以在静态内部类的方法中,直接访问外部类的静态变量n和调用静态方法outerMethod()。但不允许访问外部类的实例变量x以及实例方法outerMethod2()。
静态内部类中也可以提供实例方法,如:

static class StaticInnerClass {
int innerMethod2() {
n = 100; //只可访问外部类静态变量
outerMethod(); //只可调用外部类静态方法
System.out.println("from
InnerMethod2() n = " + n);
return n;
}
} //静态内部类结束

静态内部类的实例方法中亦只允许访问外部类的静态成员。
可以使用下列语法格式创建一个静态内部类对象并且调用其实例方法,以及静态方法:

OuterClass2.StaticInnerClass
staticInner = new OuterClass2.StaticInner Class(); //创建静态内部类对象
int num =
staticInner.innerMethod2(); //调用实例方法
staticInner.innerMethod(); //调用其静态方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息