Java静态内部类和非静态内部类的区别

以下当作学习笔记使用,避免遗忘

静态内部类与非静态内部类

这两种类都是为了编码方便,创建一个Outer类如下:

public class Outer {
    static class InnerOne{
    	 public static void show(){
    	     System.out.println("静态内部类中的静态方法");
    	 }
    	 public void shows(){
    	     System.out.println("静态内部类中的非静态方法");
    	 }
    }
    class InnerTwo{
        public void show(){
            System.out.println("非静态内部类中的非静态方法");
        }
    }
}

创建一个Outer类的测试类

public class OuterTest{
    //创建静态内部类的对象
    Outer.InnerOne innerone=new Outer.InnerOne();
    //创建非静态内部类的对象
    Outer.InnerTwo innertwo=new Outer().new InnerTwo();

	public static void main(String arg[]){
	    //调用静态内部类中的非静态方法
	    innerone.shows();
	    //调用静态内部类中的静态方法
	    Outer.InnerOne.show();
	    //调用非静态内部类中的方法
	    innertwo.show();
	    }
}

综上

结合代码,可以了解到,静态内部类创建对象的方式为:new 外部类名.静态内部类名() 即可;与此不同的是非静态内部类创建对象的方式是:new 外部类名().非静态内部类名()。同时还添加一条知识点:静态内部类中可以创建静态变量、静态常量已经静态的方法等而非静态内部类不允许,原因是非静态内部类的对象创建时必定伴随着其外部类的对象创建,从而不符合静态量由类名.调用的原则,结合上面代码即可知。

上一篇:143、Java内部类之访问方法中定义的参数或变量


下一篇:JAVA基础(内部类)