2 qq 18952073 qq_18952073 于 2016.04.08 17:58 提问

为什么把变量hello声明放在main的外面就不对
 public class HelloWorld {
    static String className = "JAVA开发一班";
    HelloWorld hello=new HelloWorld();
    public static void main(String[] args) {
    System.out.println(hello.className);
    }
}

为什么会报错?

4个回答

hoho_12
hoho_12   2016.04.08 18:29

不能对非静态字段hello进行静态引用,你如果放在外面,编译器就会把hello当做静态引用,可是现在它是非静态的字段。

qq_18952073
qq_18952073 应该是编译器优先初始化static变量和方法。而在主函数中hello还未实例化
一年多之前 回复
qq_16273201
qq_16273201   2016.04.09 07:23

静态是可以直接调用的
HelloWorld.className

qq_18952073
qq_18952073 额,这个我知道
一年多之前 回复
devmiao
devmiao   Ds   Rxr 2016.04.09 07:28

HelloWorld hello=new HelloWorld();
->
static HelloWorld hello=new HelloWorld();

qq_18952073
qq_18952073 这样行是行,就是这样做没什么意义。
一年多之前 回复
evil9999
evil9999   2016.04.09 09:35

main是入口,它里面的变量没有创建肯定会报错。了解下作用域以及实体创建顺序

qq_18952073
qq_18952073 好像懂了,类变量和类方法先初始化,而当时hello还未实例化
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!