黑马程序员技术交流社区

标题: static引起的错误,为什么 [打印本页]

作者: cehkongfu    时间: 2012-10-12 23:20
标题: static引起的错误,为什么
class Outer
{
private static  int x = 3;

class Inner
{
  void function()
  {
   System.out.println("inner :"+x);
  }
}
}

class  InnerClassDemo2
{
public static void main(String[] args)
{
  Outer.Inner in = new Outer().new Inner();
  in.function();
}
输出结果  inner: 3
================================================

class Outer
{
private static  int x = 3;

static class Inner
{
  static void function()
  {
   System.out.println("innner :"+x);
  }
}
}

class  InnerClassDemo2
{
public static void main(String[] args)
{
  Outer.Inner in = new Outer().new Inner();
  in.function();
}
}
这段程序就报错了, 仅仅就多了一个static  为什么呢?

作者: 范泰洋    时间: 2012-10-12 23:39
.内部类可以直接访问外部类的成员,包括私有成员。
内部类之所以可以直接访问外部类中的成员。是因为内部类中持有一个外部类的的引用,格式 外部类名.this
然而静态方法中不可能有this和super关键字,所以不可以!

作者: 唐增友    时间: 2012-10-12 23:53
static 可以修饰 类名么?
作者: 李润根    时间: 2012-10-13 00:07
本帖最后由 我是菜鸟 于 2012-10-13 00:15 编辑

public class A
{
        public static class B
        {
                public void fun()
                {
                        System.out.println("OK");
                }
        }
        public class C
        {
                public void fun()
                {
                        System.out.println("OK");
                }
        }
        public static void main(String[] args)
        {
                A a = new A();
                A.B ab = new A.B();//静态内部类(方法),访问格式:外部类.内部类()
                A.C b = a.new C();//成功
                A.C c = new A().new C();//成功
        }
}
作者: 徐梦侠    时间: 2012-10-13 00:32
static可以修饰类成员位置上的内部类,但是这是内部类只能访问外部类中的static成员。这里要访问function,可以直接用类名调用Outer.Inner.function();静态成员是随类的,与对象无关的,若想创建静态内部类对象,可以Outer.Inner in = new Outer.Inner();即不能用外部类的对象来调用静态内部类的构造方法。





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