黑马程序员技术交流社区

标题: 为什么 当内部类被static 修饰的时候 原有的创建内部类对... [打印本页]

作者: 稳中求胜    时间: 2014-9-30 14:46
标题: 为什么 当内部类被static 修饰的时候 原有的创建内部类对...
问题:  为什么 当内部类被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();
}
}


作者: Fightin黑马    时间: 2014-9-30 21:31
不被static修饰的内部类就相当于外部类的成员,必须要有外部类的实体对象才可以使用,相当于使用一个外部类对象的方法,用static修饰的内部类相当于外部类的静态成员,随着外部类的加载而加载,不需要外部类对象就可以通过外部类名.内部类名调用.
简单的方式就是,把内部类理解成外部类的一个成员就可以了,成员怎么使用,内部类就相似的使用
作者: 水竹    时间: 2014-9-30 21:58
楼主:为什么不可以?
沙发:就是不可以。
作者: luofeng    时间: 2014-9-30 23:37
调用静态不需要创建对象,比如Java里的那些工具类
作者: 张业婷    时间: 2014-10-1 08:35
我是这么认为的也不知道对不对各位也可以给的意见,new Outer()这个对象在类加载的时候是在堆中。而静态的类相当于外部类成员,而且这个静态成员还在静态方法区,两个都是成员对不再一个区,都没关系怎么能用点来操作,类名就不一样了!楼主认为我说的对不对
作者: 不系之舟王    时间: 2014-10-1 08:47
也刚看到这,和楼主同问




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2