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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 康大玮 中级黑马   /  2012-5-23 12:24  /  1516 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕老师的java基础课程中day09的第2段视频中说道:
在外部类其他类中,如何直接访问static内部类的非静态成员呢?
         new Outer.Inner().function();

         在外部类其他类中,如何直接访问static内部类的静态成员呢?
         Outer.Inner().function();
但是我测试的结果怎么不一样?

5 个回复

倒序浏览
附上代码:
class Outer
{
  private static int x = 3;

  static class Inner//内部类
  {
      static void function()
     {
       System.out.println("inner :"+x);
     }
  }
}

class InnerDemo
{
   public static void main(String[] args)
   {   
     /*
       在外部类其他类中,如何直接访问static内部类的静态成员呢?
         Outer.Inner().function();
    */
        new Outer.Inner().function();   //但是我测试的时候用  Outer.Inner().function();  会报错 而用 new Outer.Inner().function(); 却正确 不知道那错了?
   }
}
回复 使用道具 举报
new Outer.Inner().function();     改为Outer.Inner.function();  既然是静态的成员,不new对象,就直接用类名.方法名
Inner.function(); 不知道这样可以不...前面加上Outer.
回复 使用道具 举报
本帖最后由 冯越 于 2012-5-23 12:40 编辑

class Outer
{
  private static int x = 3;

  static class Inner//内部类
  {
      static void function()
     {
       System.out.println("inner :"+x);
     }
  }
}

class InnerDemo
{
   public static void main(String[] args)
   {   
     /*
       在外部类其他类中,如何直接访问static内部类的静态成员呢?
         Outer.Inner().function();   //把()去了 你这样写什么都不是  Outer.Inner.function() 就对了
    */
        new Outer.Inner().function();   //这里错了 应该是  Outer.Inner.function() Inner是静态类 你为什么要在后面加()呢?你这样的写法表示的是先创建一个内部静态类的对象然后通过这个对象调用function()方法 但你的function方法是静态的所以不需要创建这个内部静态类的对象
   }
}

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
攻城狮 + 1 赞一个!
康大玮 + 2 赞一个!

查看全部评分

回复 使用道具 举报
你木有发现你外部其他类使用内部类中静态成员多了个括号吗?

       在外部类其他类中,如何直接访问static内部类的静态成员呢?
         Outer.Inner().function();

把Inner()的括号去掉就对了。
回复 使用道具 举报
冯越 发表于 2012-5-23 12:33
class Outer
{
  private static int x = 3;

谢谢,是这样的!自己太粗心了,呵呵,我新手!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马