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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

稳中求胜

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

问题:  为什么 当内部类被static 修饰的时候 原有的创建内部类对象的方式 不可以了,需要使用新的格式?
我的想法:原有的格式不就是利用对象来调用静态内部类的吗?为什么这种方式不可以啊?
  原有的格式:
   外部类.内部类 对象名 = new 外部类().new 内部类();
   Outer.Inner oi = new Outer().new Inner();
  新的格式:
   外部类.内部类 对象名 = new 外部类.内部类();
   Outer.Inner oi = new Outer.Inner();
*/
class Outer {
private static int num = 20;
static class Inner {
  public static void method(){
   System.out.println( num );
  }
}
}

class InnerClassDemo4
{
public static void main(String[] args)
{
  //创建内部类对象,调用method()方法
  Outer.Inner oi = new Outer().new Inner();
  oi.method();
  //System.out.println(Outer.num);
  //新的格式
  //Outer.Inner oi = new Outer.Inner();
  //oi.method();
  //调用method()
  //Outer.Inner.method();
}
}

5 个回复

倒序浏览
不被static修饰的内部类就相当于外部类的成员,必须要有外部类的实体对象才可以使用,相当于使用一个外部类对象的方法,用static修饰的内部类相当于外部类的静态成员,随着外部类的加载而加载,不需要外部类对象就可以通过外部类名.内部类名调用.
简单的方式就是,把内部类理解成外部类的一个成员就可以了,成员怎么使用,内部类就相似的使用
回复 使用道具 举报
楼主:为什么不可以?
沙发:就是不可以。
回复 使用道具 举报
调用静态不需要创建对象,比如Java里的那些工具类
回复 使用道具 举报
我是这么认为的也不知道对不对各位也可以给的意见,new Outer()这个对象在类加载的时候是在堆中。而静态的类相当于外部类成员,而且这个静态成员还在静态方法区,两个都是成员对不再一个区,都没关系怎么能用点来操作,类名就不一样了!楼主认为我说的对不对
回复 使用道具 举报
不系之舟王 来自手机 中级黑马 2014-10-1 08:47:44
地板
也刚看到这,和楼主同问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马