package j2se.basicKnowledge.exercises; public class InnerClassTest { static int i=10; int i1 = 1; static class StaticInnerClass{ int staticInnerVar = 1; //‘静态内部类’中可以有‘非’静态的成员 static int staticInnerVar1=9; public void staticInnermethod(){ i++; //i1++;//k为非静态成员,在静态内部类中不能直接用this.i1使用,故此处会报错!但可以像下面那样来使用。 InnerClassTest is = new InnerClassTest(); is.i1++; } } class NotStaticInnerClass{ int notStaticInnerVar=2; //static int notStaticInnerVar1=3; //非静态内部类中'不能'有'静态成员',故这里会有错! public void notStaticInnerMethod(){ /*在‘非静态内部类’的‘非静态方法’中可以‘直接使用’外部类的‘非静态成员’和‘静态成员’*/ i++; i1++; } } //非静态方法中建立非静态内部类和静态内部类实例的步骤:一样的,都是直接new他们的实例对象,而‘不用’先new外部类的对象 public void notStaticMethod(){ //建立静态内部类实例 StaticInnerClass ic = new StaticInnerClass(); //建立非静态内部类实例 NotStaticInnerClass nic = new NotStaticInnerClass(); } //静态方法中建立非静态内部类和静态内部类实例的步骤:有区别的 public static void main(String [] args){ //建立非静态内部类实例:先new外部类实例,再用“外部类名.内部类名 = 外部类实例.new 内部类()”的方法 InnerClassTest ict = new InnerClassTest(); InnerClassTest.NotStaticInnerClass nsic = ict.new NotStaticInnerClass(); //建立静态内部类实例:直接’外部类名.静态内部类名 var = new 外部类名.静态内部类名()‘的方式 InnerClassTest.StaticInnerClass sic = new InnerClassTest.StaticInnerClass(); //引用静态内部类的静态成员方式: int l = InnerClassTest.StaticInnerClass.staticInnerVar1; //引用静态内部类的非静态静态成员方式: int l1 = sic.staticInnerVar; } }
package j2se.basicKnowledge.exercises; /*静态内部类在无论是在static方法中还是在非static的方法中都可以直接new自己的实例对象;而不用先new外部类*/ public class OutClass { private static class InterClass { public InterClass() { System.out.println("InterClass Create"); } } public OutClass() { InterClass ic = new InterClass(); System.out.println("OuterClass Create"); } public void aa() { InterClass ic = new InterClass(); } public static void main(String[] args) { InterClass ic = new InterClass(); OutClass oc = new OutClass(); oc.aa(); } }