为什么把变量hello声明放在main的外面就不对

 public class HelloWorld {
    static String className = "JAVA开发一班";
    HelloWorld hello=new HelloWorld();
    public static void main(String[] args) {
    System.out.println(hello.className);
    }
}

为什么会报错?

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

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

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

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