A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class InnerClass {
    public static void main(String[] args) {
               int m=OuterA.InnerA.i;
             OuterA.InnerA innera=new OuterA.InnerA();//静态内部类对象不依赖于外部类对象的存在
             innera.m1();
               
            OuterA out=new OuterA();
     //                OuterA.InnerB inn=new OuterA.InnerB();//静态内部类和成员内部类的区别
            OuterA.InnerB innb=out.new InnerB("san");//成员内部类对象依赖于外部类对象的存在
         //上面那条语句编译器编译时 相当于将 out对象当做参数通过构造方法传进InnerB类中
    //         OuterA.InnerB innb2=new InnerB("san",out);
             innb.m2();
        }

}

class OuterA
{
  private String name1="hello";
  private static String name2="haha";
  //静态内部类,相当于一个静态成员
  public static class InnerA{
          public static int i=9;
          public void m1()
          {
//                 System.out.println(name1);//得出静态内部类只能访问外部类的静态成员
                  System.out.println(name2);
          }  
  }
  public class InnerB
  {
      InnerB(String name )
          {
                    }
          public void m2()
          {
          System.out.println(OuterA.this.name1);//在成员内部类中访问外部类的当前对象
                  System.out.println(name2);
                  System.out.println(name2);
   }
  }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
我补充一点(这个内容我在其他帖子也发过)

  1. public class StaticTest {
  2.        
  3.        
  4.         private static String str="外部类的静态str";
  5.        
  6.         private String str2="外部类的成员str";

  7.         /**
  8.          * @param args
  9.          */
  10.         public static void main(final String[] args) {
  11.                 // TODO Auto-generated method stub
  12.                 class local{
  13.                         //private static String str="局部内部类的static str";//编译器提示"The field str cannot be declared static;
  14.                                                                                                                         //static fields can only be declared in static or top level types"
  15.                         private String str="局部内部类的非静态str";
  16.                         /*public static void sop_static()//编译器提示"The method sop_static cannot be declared static;
  17.                                                        //static methods can only be declared in a static or top level type"
  18.                         {
  19.                                 System.out.println(StaticTest.str);
  20.                                 System.out.println(str);
  21.                         }*/
  22.                        
  23.                         public void sop()
  24.                         {
  25.                                 System.out.println(StaticTest.str);
  26.                                 System.out.println(str);
  27.                         }
  28.                 }
  29.                
  30.                 //查看局部内部类的情况
  31.                 System.out.println("下面检验局部内部类");
  32.                 new local().sop();
  33.                
  34.                 //查看成员内部类的情况
  35.                 System.out.println("下面检验成员内部类");
  36.                 new StaticTest().new Inner1().sop();
  37.                
  38.                 //查看静态内部类
  39.                 System.out.println("下面检验静态内部类");
  40.                 Inner2.sop_static();
  41.                
  42.         }
  43.        
  44.         /**
  45.          *
  46.          * @author Administrator
  47.          *
  48.          */
  49.         class Inner1{
  50.                 private static final String str="成员内部类的静态static变量";//如果不加final则编译器报错,报错的信息同上
  51.                 public void sop()
  52.                 {
  53.                         System.out.println(StaticTest.str);
  54.                         System.out.println(str);
  55.                 }
  56.                
  57.                 /*public static void sop_static()//编译器报错,报错信息同上
  58.                 {
  59.                         System.out.println(StaticTest.str);
  60.                         System.out.println(str);
  61.                 }*/
  62.                
  63.         }
  64.        
  65.        
  66.         /**
  67.          *
  68.          * @author Administrator
  69.          *
  70.          */
  71.         static class Inner2{
  72.                 private static String str="静态内部类的static变量";//编译器不报错
  73.                 private String str_filed="静态内部类的成员变量";//编译器不报错
  74.                
  75.                 public void sop()
  76.                 {
  77.                         System.out.println(StaticTest.str);
  78.                         //System.out.println(str2);这是从你的帖子学习的
  79.                         System.out.println(str);
  80.                 }
  81.                
  82.                 public static void sop_static()//编译器不报错
  83.                 {
  84.                         System.out.println(StaticTest.str);
  85.                         System.out.println(str);
  86.                 }
  87.         }

  88. }
复制代码
从上面这个例子我们可以看出来成员内部类内不能定义静态成员变量,但是可以定义静态成员常量,局部内部类也是这样。在静态内部类中没有限制,都可以定义。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马