java中的静态类

时间:2012-12-26 20:32:10

标签: java class static

package shubh;
class thread5
{
    static class a7 extends Thread
    {
        public void run()
        {
            for(int i=0;i<=10;i++)
            {
                System.out.println(i);
            }
        }
    }

    static class a8 implements Runnable
    {
        public void run()
        {
            for(int i=21;i<=30;i++)
            {
                System.out.println(i);
            }
        }
    }

    public static void main(String arg[])
    {
        a7 a=new a7();
        a.start();
        a8 b=new a8();
        Thread th=new Thread(b);
        th.start();
        for(int i=40;i<=50;i++)
        {
            System.out.println(i);
        }
    }
}

当我从2个嵌套类中删除静态关键字时,它给出了错误非静态变量无法从静态上下文中引用任何人都可以解释这个错误的含义或为什么有必要给出嵌套类为静态

4 个答案:

答案 0 :(得分:6)

如果删除static,则需要一个实际对象才能实例化内部类。即
 new thread5().new a7();

答案 1 :(得分:1)

非静态内部类只能在类的实例中实例化,例如:

thread5 t = new thread5();
a7 a = t.new a7();

答案 2 :(得分:0)

  

当我从它给出的2个嵌套类中删除static关键字时   错误非静态变量不能从静态上下文引用

您不能从静态方法直接访问非静态数据/方法/类,您需要一个类的实例来访问它们。

如果你删除了类a7的静态,你应该像这样创建一个7实例。

Threads5 td = new Threads5()';
a7 a=new td.new a7();

答案 3 :(得分:0)

This Javarevisited Article

中找到答案
  

现在在找到编译器错误的答案之前“无法从静态上下文中引用非静态变量”,让我们快速修改静态。 Java中的静态变量属于Class,其值对于所有实例保持相同。另一方面,当将类加载到JVM时初始化的静态变量实例变量对于每个实例具有不同的值,并且当通过使用new()运算符或使用类似Class.newInstance()的反射创建对象的实例时,它们会被创建。因此,如果您尝试访问非静态变量而没有任何实例编译器会抱怨,因为这些变量尚未创建,并且在创建实例并且它们与任何实例关联之前它们没有任何存在。所以在我看来,只有在静态上下文中禁止非静态或实例变量才有意义的理由是不存在实例。

     

总之,由于静态上下文中的代码甚至可以在不创建任何类实例的情况下运行,因此对于尚未创建的特定实例请求值是没有意义的。