我們都知道,靜態(tài)static方法中不能調(diào)用非靜態(tài)(non-static)方法,準(zhǔn)確地說(shuō)是不能直接調(diào)用non-static方法。但是可以通過(guò)將一個(gè)對(duì)象的引用傳入static方法中,再去調(diào)用該對(duì)象的non-static方法。
其實(shí)這個(gè)事實(shí)的應(yīng)用很經(jīng)常,以至于我們不去重視:在主函數(shù)(static方法)中我們經(jīng)常創(chuàng)建某個(gè)類的實(shí)例,再利用其引用變量調(diào)用它的非靜態(tài)方法。
class Test2{
public void method2(){
System.out.println('HelloWorld2');
}
}
class test{
public void method0(){
System.out.println('HelloWorld0');
}
public static void method1(){
System.out.println('HelloWorld1');
}
public static void main(String args[]){
new test().method0();
method1();
new Test2().method2();
}
}
打印結(jié)果:
HelloWorld0
HelloWorld1 HelloWorld2
總結(jié):
首先static的成員是在類加載的時(shí)候初始化的,JVM的CLASSLOADER的加載,首次主動(dòng)使用加載,而非static的成員是在創(chuàng)建對(duì)象的時(shí)候,即new 操作的時(shí)候才初始化的; 先后順序是先加載,才能初始化,那么加載的時(shí)候初始化static的成員,此時(shí)非static的成員還沒有被加載必然不能使用,而非static的成員是在類加載之后,通過(guò)new操作符創(chuàng)建對(duì)象的時(shí)候初始化,此時(shí)static 已經(jīng)分配內(nèi)存空間,所以可以訪問! 簡(jiǎn)單點(diǎn)說(shuō):靜態(tài)成員屬于類,不需要生成對(duì)象就存在了.而非靜態(tài)需要生成對(duì)象才產(chǎn)生.所以靜態(tài)成員不能直接訪問非靜態(tài). 下面說(shuō)說(shuō)靜態(tài)的特點(diǎn): 1.隨著類的加載而加載
也就是,說(shuō)靜態(tài)會(huì)隨著類的消失而消失,說(shuō)明靜態(tài)的生命周期最長(zhǎng)
靜態(tài)的利弊 |
|
來(lái)自: Levy_X > 《JAVAWEB學(xué)習(xí)資料》