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还未实例化
2 年多之前 回复
qq_16273201
qq_16273201   2016.04.09 07:23

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

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

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

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

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

qq_18952073
qq_18952073 好像懂了,类变量和类方法先初始化,而当时hello还未实例化
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
为什么大数组要定义在main函数外
全局变量在静态存储区分配内存,局部变量是在栈上分配内存空间的。(c语言程序在运行时会动态创建一个堆栈段,里面存放着调用栈,保存着函数的调用关系和局部变量。)如果数组太大,可能会造成栈溢出。
变量声明到底在循环外部好还是在循环内部好?
 原文出处:http://weblogs.java.net/blog/ddevore/archive/2006/08/declare_variabl_1.html作者写的比较磨叽,我也不是非常专业的翻译,有不妥之处,请指正。这个问题已经被很多人问了很多遍了。到底是在循环内部还是外部进行变量声明比较好呢?针对这个问题,我最近找了很多有关这方面的资料。我发现大多数资料都给出了一大堆的讨论,但是
在main函数内和外定义的结构体的作用范围
#include struct struct_out_main { int a; }; void fun(void) { // struct struct_in_main var1; //这条语句会报错,因为struct struct_in_main的定义在这个函数内是不可见的,它只在main()中可见 struct struct_out_main var
main()主函数内外的变量有何区别??(菜鸟级的问题)
main函数是一个进程的入口,初次之外,和别的函数无区别,你说main函数内的
变量声明在循环体内还是循环体外的争论
(1) for (int i = 0; i 10000; ++i) { Object obj = new Object(); System.out.println("obj= "+ obj); } 应改成 (2) Object obj = null; for (int i = 0; i 10000; ++i) { obj = new Object();
【Go】为什么 Go 语言把类型声明放在后面?
关于类型,官网上有一段仔细地介绍了一下函数指针的部分,现在的设计比起 C 的语法,清晰很多。 也就是说,类型放在后面是为了更加清晰易懂。Rob Pike 曾经在 Go 官方博客解释过这个问题(查看原文:Go’s Declaration Syntax),简略翻译如下(水平有限翻译的不对的地方见谅):引言Go语言新人常常会很疑惑为什么这门语言的声明语法(declaration syntax)会和传统的C
C语言中main函数之前可以进行赋值作吗?
这两天用结构模拟面向对象的方法在C语言中编写硬件的驱动程序,涉及到多文件的变量的初始化问题。如下:        在DS1302.h中定义了一个结构:        typedef struct{     void (*fun1);     void (*fun2);    }DS1302_T;   extern DS1302_T ds1302;   并声
Java: 变量声明在循环体内还是循环体外的争论
下面两段代码本质上是一样的,首先看看for循环内局部变量的生命周期。(1) 在第i次循环,初始化变量obj引用了一个生成对象O1;但当此次循环结束时,变量obj被回收,所以对象O1可以被GC回收了;在第i+1次循环,初始化新变量obj(跟第i次循环的obj没有任何关系)引用了一个生成对象O2;但当此次循环结束时,变量obj被回收,所以对象O2可以被GC回收了;for (int i = 0; i <
js在if else语句中var的变量在条件语句外可以使用吗?
答案:可以。 实例如下: Insert title here document.write("这是一个标题"); function myFunction() { document.getElementById("demo").innerHTML="我的第一个 JavaScript 函数"; } function test() { var
为什么 Go 语言把类型放在后面?
本文整理自知乎,原文作者 @林建入。 不是为了与众不同。而是为了更加清晰易懂。 Rob Pike 曾经在 Go 官方博客解释过这个问题(原文地址:http://blog.golang.org/gos-declaration-syntax),简略翻译如下(水平有限翻译的不对的地方见谅): 引言 Go语言新人常常会很疑惑为什么这门语言的声明语法(declaration syntax)会和传统的