首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于静态方法不能调用非静态方法的有关问题

2012-02-22 
关于静态方法不能调用非静态方法的问题大家都知道静态方法是不能调用非静态方法的.那么,由于构造器隐式的

关于静态方法不能调用非静态方法的问题
大家都知道静态方法是不能调用非静态方法的.
那么,由于构造器隐式的就是static,那么为什么在构造器里面可以调用非静态的方法?
比如:
public class Test {
void test() {
System.out.println("non-static method : test()");
}
public Test() {
test();
}

public static void main(String[] a) {
new Test();

}
} //程序可以运行,且输出结果是non-static method : test() ????

[解决办法]
构造器隐式的就是static 
---------------
有这种说法吗?即使有这种说法,也是LZ没弄明白这种说法的意思
所谓显式隐式static,是指类在实例化时,系统会执行的代码
比如
public class StaticTest {

{ //这样没有static关键字的,叫隐式static,系统执行完显式static后会接着执行隐式static的代码
System.out.println("hide static");
show(); // 这个方法不是static的,但是在这里不会出错
}

static { //这样有static关键字的叫显式static,系统会先执行显式static的代码
System.out.println("static");
//show(); //这个方法不是static的,所以会出错
}

public StaticTest() { //执行完显式和隐式static后,系统会执行构造器的代码,因为构造器没有static,但也会被执行,跟隐式static一样,所以书上就把它说成隐式static了
System.out.println("constuctor");
}

public void show() {
System.out.println("show");
}

public static void main(String[] args) {
new StaticTest();
}

}

所以所谓显式隐式static,只是对于类实例化执行代码的先后顺序而言的,从某种意义上说,不带static的都可以叫隐式static,隐式static可以调用隐式static

热点排行