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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李新辉 中级黑马   /  2013-11-1 21:08  /  1478 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李新辉 于 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有必要静态吗?
为什么?

6 个回复

倒序浏览
有必要静态,因为内部类如果不是静态的话,你要在外部类的静态方法中访问内部类的方法,你首先得实例化一个内部类,但是你要实例化内部类,你必须得先实例化外部类,即new Test(),那么你为了访问一个内部类的方法而额外的在内存的开辟了一个Test()类的空间,是不是造成空间浪费了呢?
访问一个非静态的类的非静态方法,你首先需要创建这个非静态类的实例,你要创建的这个类刚好又是一个内部类,那么创建他必须先得创建外部类才可以!这是java规定的。
一般在含有main方法的类中不会放入内部类,就是因为实例化太麻烦还浪费空间!

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

回复 使用道具 举报
~﹏~ 发表于 2013-11-1 21:26
有必要静态,因为内部类如果不是静态的话,你要在外部类的静态方法中访问内部类的方法,你首先得实例化一个 ...

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

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

你是看的哪个视频呢?
你说的这些我怎么都没看到呢?
回复 使用道具 举报
外部类和内部类什么时候用呢?当一个类要建立另一个类的对象,而第二个类中又调用了第一个类的成员方法,这时候怎么设计类呢?此时,通常把第一个类设计为外部类,第二个类设计成内部类。这种设计非常常见!

评分

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

查看全部评分

回复 使用道具 举报
wenbaoxing 发表于 2013-11-1 22:09
外部类和内部类什么时候用呢?当一个类要建立另一个类的对象,而第二个类中又调用了第一个类的成员方法,这 ...

谢谢你的回答
只是和我问不太匹配……
回复 使用道具 举报
李新辉 发表于 2013-11-1 21:49
就是说我这样调用是可以的,不管是不是静态,都能调用。语法都是没问题ide
只是这样的调用方法不是最优的 ...

是这样的!我是软件技术专业毕业的,长期的摸索中会逐渐发现这些问题,然后自己梳理,就总结出来啦!
回复 使用道具 举报
~﹏~ 发表于 2013-11-2 15:31
是这样的!我是软件技术专业毕业的,长期的摸索中会逐渐发现这些问题,然后自己梳理,就总结出来啦! ...

原来如此……
受教了……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马