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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜佳瑞 中级黑马   /  2012-7-26 19:59  /  2472 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

class  InnerClassTest
{
public static void main(String[] args)
{
  new Test().new Inner().method();
  
  
}
}
class Test
{
  class static Inner //为什么不能加static,还是不太明白static的用法,编译结果会出现“限定新静态类这个错误”
{
  public  void method()
  {
   System.out.println("method run");
  }
}

}

评分

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

查看全部评分

10 个回复

倒序浏览
说实话,感觉这道题看到过,而且就是在黑马论坛,骚年你去找一下吧...
回复 使用道具 举报
关于static的用法:
成员方法或成员变量前面没有static,可以通过创建对象调用,但不可以直接用类名调用。
成员方法或成员变量前面加static,不仅可以通过创建对象调用,还可以直接用类名调用。
加上static的成员变量,不管是通过set改变还是创建对象改变,你只要调用,它的值就是你最后一次改变的哪个值。比如说:
Student s = new Student();
s.score = 33;
Student s1 = new Student();
虽然现在没有设置s1的score,但它不是没有值它的值就是最后一次改变的那个值,即s1.score=33;
记住,加staic的成员变量只要一改变,它的值就是改变后的值。成员方法加static的最大好处就是通过类名调用而不需要创建对象。
回复 使用道具 举报
class  InnerClassTest
{
public static void main(String[] args)
{
  //new Test().new Inner().method();//这个格式是当内部类没有呗static修饰的时候才可以这样调用
  new Test.Inner().method();//你内部类静态了,就要直接用外部类名调用而不是用“外部类对象.内部类对象.方法”调用。


}
}
class Test
{
  static class  Inner //这个static应该是在class前面吧?
{
  public  void method()
  {
   System.out.println("method run");
  }
}

}
回复 使用道具 举报
static 的用法很多,其定义在成员变量上时或者成员函数上时的用法很多,看看毕老师的视频可以知道;
还有定义在内部类中的static,你看看毕老师的视频在第十天,static用法基本上能搞明白。但是你的这个问题我也搞不清楚为什么!
回复 使用道具 举报
赵森羊 发表于 2012-7-26 21:11
class  InnerClassTest
{
public static void main(String[] args)

//new Test().new Inner().method();//这个格式是当内部类没有呗static修饰的时候才可以这样调用
  new Test.Inner().method();//你内部类静态了,就要直接用外部类名调用而不是用“外部类对象.内部类对象.方法”调用。
这两句话有出处吗?
回复 使用道具 举报

class  InnerClassTest
{
public static void main(String[] args)
{
  Test.Inner.method();


}
}
class Test
{
  static class  Inner
{
  public static void method()
  {
   System.out.println("method run");
  }
}
}

将你的程序改成上面的方式即可运行。你的程序主要有几个问题:
1、 在外部其他类中,访问static内部类的静态成员 应当用 Test.Inner.method(); 的方式;
2、static class  Inner 此时的static 必须方面class前面因为class  Inner 相当于类成员。

一下是毕老师讲课的总结的一些总结:
内部类的访问规则:
1,内部类可以直接访问外部类中的成员,包括私有。
        之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this
2,外部类要访问内部类,必须建立内部类对象。
3、当内部类中定义了静态成员,该内部类必须是static的。
4、当外部类中的静态方法访问内部类时,内部类也必须是static的。

希望对你有所帮助!!!!{:soso_e100:}

评分

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

查看全部评分

回复 使用道具 举报
赵森羊 发表于 2012-7-26 21:11
class  InnerClassTest
{
public static void main(String[] args)

附议。。。。。。。。。
回复 使用道具 举报
public class Test2
{
        public static void main(String[] args)
        {
                new A.B().bprint();//此处应该这样调用;
        }

}

class A
{
        static class B
        {
                 public void bprint()
                {
                        System.out.println("B");
                }
        }
       
}

外部类访问static内部类规则:
1.其他外部类,直接访问static内部类的非静态成员,格式为:new Outer.Inner().function();
2.在外部类中,直接访问static内部类的静态成员,格式为:Outer.Inner.function();
注意:
1.当内部类中定义了静态成员,该内部类必须为static;
2.当外部类的静态方法访问内部类时,内部类也必须为static。

评分

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

查看全部评分

回复 使用道具 举报
不必像7楼所做的,将内部类方法变成static。
回复 使用道具 举报
杜佳瑞 发表于 2012-7-26 21:39
//new Test().new Inner().method();//这个格式是当内部类没有呗static修饰的时候才可以这样调用
  new T ...

上面那句老毕关于静态内部类的视频里有说 下面那句就是静态修饰的特性了,我是这么理解的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马