黑马程序员技术交流社区

标题: 关于静态方法访问内部类的问题 [打印本页]

作者: 李新辉    时间: 2013-11-1 21:08
标题: 关于静态方法访问内部类的问题
本帖最后由 李新辉 于 2013-11-1 21:14 编辑

毕老师视频中讲解说:
当外部类中的静态方法要调用内部类中的方法时,内部类也必须被static修饰
代码如下:
class Test
{
         public static void main(String[] args)
         {
                  method();
          }
         static class Inner
         {
                  void show()
                    {
                            System.out.println("method"+"Inner。。。。。。show");
                    }
         }
        public static void method()
          {
                  new Inner().show();     //类加载外,Inner方法已经存在。建立其对象直接调用其方法
         }
}
------------------------------------------------------------------------------------------------------------------------------
但是我发现内部类不是静态也可以调用
代码如下:
class Test
{
         public static void main(String[] args)
         {
                  method();
         }
         class Inner
         {
                  void show()
                  {
                            System.out.println("method"+"Inner。。。。。。show");
                  }
          }
          public static void method()
          {
                   new Test().new Inner().show();    //Inner类不是静态的,通过”外部类对象.内部类对象.内部类中的方法“,这样的形式调用
           }
}
==========================================================


问:
那么这个内部类Inner有必要静态吗?
为什么?

作者: ~﹏~    时间: 2013-11-1 21:26
有必要静态,因为内部类如果不是静态的话,你要在外部类的静态方法中访问内部类的方法,你首先得实例化一个内部类,但是你要实例化内部类,你必须得先实例化外部类,即new Test(),那么你为了访问一个内部类的方法而额外的在内存的开辟了一个Test()类的空间,是不是造成空间浪费了呢?
访问一个非静态的类的非静态方法,你首先需要创建这个非静态类的实例,你要创建的这个类刚好又是一个内部类,那么创建他必须先得创建外部类才可以!这是java规定的。
一般在含有main方法的类中不会放入内部类,就是因为实例化太麻烦还浪费空间!
作者: 李新辉    时间: 2013-11-1 21:49
~﹏~ 发表于 2013-11-1 21:26
有必要静态,因为内部类如果不是静态的话,你要在外部类的静态方法中访问内部类的方法,你首先得实例化一个 ...

就是说我这样调用是可以的,不管是不是静态,都能调用。语法都是没问题ide
只是这样的调用方法不是最优的
内部类静态之后才是最优,最省内存,所以java这样规定了必须静态。是这样吧

这只是一最优化的规则……

你是看的哪个视频呢?
你说的这些我怎么都没看到呢?
作者: wenbaoxing    时间: 2013-11-1 22:09
外部类和内部类什么时候用呢?当一个类要建立另一个类的对象,而第二个类中又调用了第一个类的成员方法,这时候怎么设计类呢?此时,通常把第一个类设计为外部类,第二个类设计成内部类。这种设计非常常见!
作者: 李新辉    时间: 2013-11-1 22:46
wenbaoxing 发表于 2013-11-1 22:09
外部类和内部类什么时候用呢?当一个类要建立另一个类的对象,而第二个类中又调用了第一个类的成员方法,这 ...

谢谢你的回答
只是和我问不太匹配……
作者: ~﹏~    时间: 2013-11-2 15:31
李新辉 发表于 2013-11-1 21:49
就是说我这样调用是可以的,不管是不是静态,都能调用。语法都是没问题ide
只是这样的调用方法不是最优的 ...

是这样的!我是软件技术专业毕业的,长期的摸索中会逐渐发现这些问题,然后自己梳理,就总结出来啦!
作者: 李新辉    时间: 2013-11-2 16:56
~﹏~ 发表于 2013-11-2 15:31
是这样的!我是软件技术专业毕业的,长期的摸索中会逐渐发现这些问题,然后自己梳理,就总结出来啦! ...

原来如此……
受教了……




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