黑马程序员技术交流社区

标题: 关于static [打印本页]

作者: 黑夜里的白猫    时间: 2013-5-28 10:14
标题: 关于static
本帖最后由 黑夜里的白猫 于 2013-5-30 09:36 编辑

interface Inter
{
        void method();
}

class Test
{
        

class Inner implements Inter//为什么这个类要定义static ,不定义会报错
        {
                public void method()
                {
                        System.out.println("method run");
                }
        }
        static   Inter  function()
        {
                return new Inner();
        }
        
}



class InnerClassTest
{
        public static void main(String[] args)
        {

                Test.function().method();
        }
}
作者: 王永贺    时间: 2013-5-28 10:33
因为你的function()方法是静态的,但是你调用的是一个非静态类的构造方法,所有就是非静态方法。而静态方法只能用来调用静态函数和变量的  所以会报错的。
作者: 无妄无涯    时间: 2013-5-28 10:36
你定义的function()方法是静态的,如果类本身不是静态的话,情况就会变成类中的方法要先于类加载,这显然不可能,所以会报错。
作者: lpflpy    时间: 2013-5-28 10:48
因为你的function()方 法是静态的,是随着类的加载而加载的, 所以访问非静态的内部类对象,必须是new Outer().new Inner();
  1. class Inner implements Inter//为什么这个类要定义static ,不定义会报错
  2.         {
  3.                 public void method()
  4.                 {
  5.                         System.out.println("method run");
  6.                 }
  7.         }
  8.         static   Inter  function()
  9.         {
  10.                 return new Test().new Inner();//看此处
  11.         }
  12.         
  13. }
复制代码
如果你的内部类是也是静态的,那么方法与内部类就是同一个等级了,就可以直接new Inner();
  1. static class Inner implements Inter//为什么这个类要定义static ,不定义会报错
  2.         {
  3.                 public void method()
  4.                 {
  5.                         System.out.println("method run");
  6.                 }
  7.         }
  8.         static   Inter  function()
  9.         {
  10.                 return /*new Test().*/new Inner();//看此处
  11.         }
  12.         
  13. }
复制代码

作者: 小石头39910    时间: 2013-5-28 10:51
static   Inter  function()//function方法是静态的,内部类规定,只要内部类中定义了静态成员,那么这个内部类必须是静态的
        {
                return new Inner();
        }
作者: 王瀛    时间: 2013-5-28 12:23
  1. interface Inter
  2. {
  3.         void method();
  4. }

  5. class Test
  6. {
  7.         static class Inner implements Inter//为什么这个类要定义static ,不定义会报错
  8.         {
  9.                 public void method()
  10.         {
  11.                         System.out.println("method run");
  12.         }
  13.     }
  14.     static Inter function()//静态方法
  15.     {
  16.                 return new Inner();//静态方法中调用了Inner(),所以Inner必须被static修饰
  17.     }   
  18. }

  19. class InnerClassTest01
  20. {
  21.         public static void main(String[] args)
  22.     {
  23.                 Test.function().method();
  24.     }
  25. }
复制代码
解释在注释中,看一下吧

作者: 黑夜里的白猫    时间: 2013-5-30 09:36
小石头39910 发表于 2013-5-28 10:51
static   Inter  function()//function方法是静态的,内部类规定,只要内部类中定义了静态成员,那么这个 ...

明白了。谢谢!




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