进行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);
}
}
}
这样结果就对了,
总结;
静态内部类就相当于外部类的一个静态方法,静态方法只能调用静态的变量,这是因为静态的变量和方法的加载的时机在不同的方法之前,所以静态的只能加载静态的,然而在外部类内部进行内部类的调用非静态方法也是需要进行初始化来进行调用。