Java SE 是什么,包括哪些内容(二十)?
本文内容参考自Java8标准
再次感谢Java编程思想对本文的启发!
如果不需要内部类对象与外部类对象之间产生联系,那么你可以将内部类声明为static(一定要注意这里强调的是对象),这通常称为"嵌套类",想更进一步理解static应用于内部类时的含义,就必须记住,普通的内部类对象隐式地保存了一个指向创建它的外部类对象的引用,然而,当内部类是static的时候,就没有这个指向外部类的引用了。
嵌套类意味着:
⑴、要创建嵌套类的对象,并不需要创建其外部类对象。
⑵、不能从嵌套类的对象中访问非静态的外部类对象。
⑶、嵌套类中可以包含static字段和方法,但是普通内部类不行,因为普通的内部类是建立在外部类对象的基础上的,既然是对象基础,那就不能是staitc的。(另外,普通内部类里面不能包含嵌套类,但是嵌套类内部还可以包含嵌套类)。
代码示例:
// 嵌套类内部可以包含static字段和方法以及另一个嵌套类
//类Parcel11
public class Parcel11{
//private 嵌套类ParcelContents实现接口Contents
private static class ParcelContents implements Contents{
//int类型的类变量i,初始化值为11
private int 1 = 11;
//方法value()
public int value(){
//返回类变量i的值
return i;
}
}
//protected 嵌套类ParcelDestination实现接口Destination
protected static class ParcelDestiantion implements
Destination{
//String类型的类变量label
private String label;
//构造方法,带一个String类型的形式参数whereTo
private ParcelDestination(String whereTo){
//为类变量赋值
label = whereTo;
}
//方法readLabel()
public String readLabel(){
//返回类变量label的值
return label;
}
//嵌套类可以拥有static方法f()
public static void f(){}
//嵌套类可以拥有static int类型的类变量x,初始化值为10
static int x = 10;
//嵌套类可以拥有嵌套类AnotherLevel
static class AnotherLevel{
//嵌套类可以拥有static方法f()
public static void f(){}
//嵌套类可以拥有static int类型类变量x,初始化值为10
static int x = 10;
}
}
//方法destination(String s),带一个String类型的
//形式参数s
public static Destination destination(String s){
//返回嵌套类ParcelDestination的对象实例
return new ParcelDestination(s);
}
//方法contents()
public static Contents contents(){
//返回嵌套类ParcelContents的对象实例
return new ParcelContents();
}
//程序执行入口main方法
public static void main(String[] args){
//获得一个Contents类型的对象实例,复制给引用c
Contents c = contents();
//获得一个Destination的对象实例,复制给引用d
Destination d = destination("Tasmania");
}
}
在上面的代码示例中,你会发现在main()方法中没有任何地方是需要一个外部类Parcel对象的,而是使用static的普通方法来返回对Contents和Destination的引用。
在一个普通的内部类中,通过一个特殊的this引用可以链接到其外部类对象,嵌套类就没有这个特殊的引用,这使得它像一个static方法。
PS:时间有限,有关Java SE的内容会持续更新!今天就先写这么多,如果有疑问或者有兴趣,可以加QQ:2649160693,并注明CSDN,我会就博文中有疑义的问题做出解答。同时希望博文中不正确的地方各位加以指正。