Java 静态内部类

进行android 开发的时候会经常用到内部类,所以这里复习一下Java内部类的使用方式:

一、静态内部类:

public class StaticInner{
    public static class Inner{
        public void saySomething(){
            System.out.println("this  is Inner Class ");
        }
    }
}
public class Client{
    public static void main(String [] args){
        StaticInner.Inner inner = new StaticInner.Inner();
        inner.saySomething();
    }
}
静态内部类的初始化不依赖于外部类,静态方法在程序加载初VM就对其进行了加载,这个时候的非静态的方法还没有加载,所以静态内部类不能使用外部类的资源,也就是方法和参数,他是独立存在于外部类中的

执行结果:



静态内部类被编译的时候名称是这样的;


如果将外部类增加一个静态的方法:

public class StaticInner{
    public static String  inner = "benben";
    public static class Inner{
        public void saySomething(){ 
            System.out.println("this  is Inner Class ");
            System.out.println("this is outter Class :" + StaticInner.inner);
        }
    }
}
外部类不变,而执行结果是正确的:


这就说明了静态内部类就和静态方法是一样的,他就是在VM加载静态的方法变量的时候进行加载的,所以他们可以互相引用

public class StaticInner{
    public static String  inner = "benben";
    public void saySomethingOutter(){
        Inner.saySomething();
    }

    public static class Inner{
        public void saySomething(){ 
            System.out.println("this  is Inner Class ");
            System.out.println("this is outter Class :" + StaticInner.inner);
        }
    }
}
这样写是会报错的,即:


无法也就是说,内部类是静态的但是里面的方法是非静态的,外面要使用类进行调用需要和外部是一样的方式进行调用:

public class StaticInner{
    public static String  inner = "benben";
    public void saySomethingOutter(){
        Inner.saySomething();
    }

    public static class Inner{
        public static  void saySomething(){ 
            System.out.println("this  is Inner Class ");
            System.out.println("this is outter Class :" + StaticInner.inner);
        }
    }
}
这种形式就是可以的,静态类调用它的静态方法:

外部类调用静态内部类的非静态方法:

public class StaticInner{
    public static String  inner = "benben";
    public void saySomethingOutter(){
        Inner  inner = new Inner ();
        
        inner.saySomething();
    }

    public class Inner{
        public   void saySomething(){ 
            System.out.println("this  is Inner Class ");
            System.out.println("this is outter Class :" + StaticInner.inner);
        }
    }
}


这样结果就对了,

总结;

静态内部类就相当于外部类的一个静态方法,静态方法只能调用静态的变量,这是因为静态的变量和方法的加载的时机在不同的方法之前,所以静态的只能加载静态的,然而在外部类内部进行内部类的调用非静态方法也是需要进行初始化来进行调用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值