概述
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。
本文先来看看静态内部类。
静态内部类是定义在另一个类里面的由关键字static修饰的类。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,因为外部类的非static成员必须依附于具体的对象,在没有外部类对象的情况下,如果创建静态内部类对象去访问外部类的非static成员就会产生矛盾。
静态内部类可以带来更好的代码聚合,提高代码可维护性。
看以下例子:
class OuterClass{
private int a = 10;
private int b = 20;
private static int c = 30;
public OuterClass(){
System.out.println("OuterClass() init!");
}
public void print(){
System.out.println("OuterClass print()!!");
}
static class InnerClass{
// 静态内部类中定义接受外部类的对象
OuterClass outer;
// 传入外部类的对象
public InnerClass(OuterClass outer){
this.outer = outer;
System.out.println("InnerClass init!!");
}
public void print(){
// 外部类的非静态成员不能直接访问,要通过外部类的对象去调用
System.out.println("a:"+ outer.a);
// 静态内部类只能直接访问外部类的静态成员(包括静态变量和静态方法)
System.out.println("c:"+c);
System.out.println("InnerClass print!!");
}
}
}
public class Demo {
public static void main(String[] args) {
// 实例化一个外部类对象
OuterClass outer = new OuterClass();
// 通过外部类对象得到静态内部类的对象
OuterClass.InnerClass in = new OuterClass.InnerClass(outer);
in.print();
}
}
结果:
OuterClass() init!
InnerClass init!!
a:10
c:30
InnerClass print!!
以上程序段中内部类访问外部类实例变量的过程是:
由于实例变量是依赖于外部类的对象而存在的,而静态内部类是不需要依赖于外部类对象的,所以为了调用外部类的实例变量,就需要在内部类中定义一个外部类实例变量,即由“OuterClass outer;”语句声明一个外部类对象outer;经过内部类的带参构造方法传入外部类的对象,outer对象就完成了实例化,即outer获得了外部类对象,所有的内部类变量和方法就可以通过outer访问外部类的实例变量了。
最后
以上就是合适棉花糖为你收集整理的静态内部类的全部内容,希望文章能够帮你解决静态内部类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复