标题: 疑问 [打印本页] 作者: Hugoo 时间: 2014-6-30 09:07 标题: 疑问 demo 1:
class Foo {
int x = 3;
public static void main(String[] args) {
Foo a = new Foo();
System.out.println(a.x);
}
}
这段代码可以通过编译并运行
demo2:
class Foo {
int x = 3;
Foo a = new Foo();
public static void main(String[] args) {
我又遇到了新问题,
demo1:出错
class Foo {
int x = 3;
Foo a = new Foo();
public static void main(String[] args) {
Foo b = new Foo();
System.out.println(b.x);
}
}
错误提示如下
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
at Foo.<init>(Foo.java:3)
Demo2我仅仅删掉了一句话,变成
class Foo {
int x = 3;
/*Foo a = new Foo();
public static void main(String[] args) {
Foo b = new Foo();
解析DEMO1:
大致可认为:初始化Foo这个类(是类,而不是这个类的实例),这时x变量还没有初始化,它先初始化这个类变量及类方法(通俗点就是静态变量及静态方法):这里就一个main方法。
很显然,由于main方法是有特殊性的:它会被调用,这时它创建了一个Foo的一个实例:Foo a = new Foo();这个时候,才会有一个Foo的实例被创建,并且给x赋值。所以你能打印时能访问到a.x
作者: blue_sky 时间: 2014-6-30 09:22
主函数前面的修饰符里含有static:静态修饰符;
使用static修饰的静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)
class Foo {
int x = 3;
Foo a = new Foo();//当加载这个类的时候,这个类不会被创建,只有使用这个对象的时候,才会被创建;
public static void main(String[] args) {//而主函数时静态的,只能访问静态的方法,所以访问不到a对象;
Foo b = new Foo();