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