java main函式是靜態函式,只可以呼叫靜態方法,為什么類實體中的方法不是靜態的也可以直接在MAIN函式中呼叫呢?如下所示
為什么 可以在 MAIN函式中呼叫不是靜態的 call 函式?
public class AccessProperty {
static int i = 47; // 定義靜態成員變數
public void call() { // 定義成員方法
System.out.println("呼叫call()方法");
}
public AccessProperty() { // 定義構造方法
}
public static void main(String[] args) { // 定義主方法
AccessProperty t1 = new AccessProperty(); // 創建一個物件
AccessProperty t2 = new AccessProperty(); // 創建另一個物件
t1.call(); // 使用第一個物件呼叫類成員方法
t2.call(); // 使用第二個物件呼叫類成員方法
}
}
uj5u.com熱心網友回復:
自己方法內的為什么不能呼叫啊?請仔細看靜態只能呼叫方法外的靜態,沒說內部不能使用
uj5u.com熱心網友回復:
實體變數是方法內部建立的變數,當然可以直接呼叫。uj5u.com熱心網友回復:
你都new了,那你叫直接呼叫?new了呼叫物件的方法不是常規操作嗎?不知道你問這個干嘛.uj5u.com熱心網友回復:
靜態方法可以呼叫 物件.非靜態方法,不可以直接呼叫 非靜態方法也就是在main里呼叫 t1.call是沒問題的,但是直接呼叫 call就不可以了。注意區別
uj5u.com熱心網友回復:
public class TestOne{
public static void main(String[] args)
{
// TODO Auto-generated method stub
print();
}
public static void print()
{
System.out.println("hello world");
}
}
這樣才叫直接呼叫,靜態方法可以不通過物件直接訪問靜態方法,但靜態方法不能直接訪問非靜態方法,這里涉及到隱含的 this 參考,建議好好研究一下
而且你都創建物件了,當然可以用物件來訪問這個方法啊,管他是不是靜態的都可以用所在類的物件來訪問
uj5u.com熱心網友回復:
靜態的記憶體空間是固定的,相對來說更省資源。創實體的創一個實體就要開辟一個新記憶體,耗費資源靜態方法屬于類所有,類實體化前即可使用;
非靜態方法可以訪問類中的任何成員,靜態方法只能訪問類中的靜態成員;
因為靜態方法在類實體化前就可以使用,而類中的非靜態變數必須在實體化之后才能分配記憶體;
static內部只能出現static變數和其他static方法!而且static方法中還不能使用this等關鍵字,因為它是屬于整個類;
靜態方法效率上要比實體化高,靜態方法的缺點是不自動進行銷毀,而實體化的則可以做銷毀;
靜態方法和靜態變數創建后始終使用同一塊記憶體,而使用實體的方式會創建多個記憶體。
主要區別:靜態方法在創建物件前就可以使用了,非靜態方法必須通過new出來的物件呼叫。
靜態方法可以通過 類名::方法名直接呼叫。普通方法需要創建一個實體,也就是new一個物件,然后通過 物件名->方法名的方式來呼叫
靜態類只能包含靜態成員,否則會拋出編譯錯誤;然而非靜態類既可以包含非靜態成員也可以包含靜態成員
靜態類是不能實體化,之所以不能實體化,是因為靜態類會導致C#編譯器將該類同時標記為abstract和sealed,并且編譯器不會在型別中
生成一個實體的建構式,從而導致靜態類不能實體化;非靜態類可以,并且靜態成員的訪問只能通過類來進行訪問,因為靜態成員是屬于類的。
https://blog.csdn.net/weixin_44535476/article/details/90245351
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265749.html
標籤:Java EE
下一篇:使用HttpURLConnection模擬登錄,出現sql注入失敗,但是資料庫中也沒有這個資料庫,下面是報錯資訊,圖片為代碼。控制臺列印為用戶登錄界面。求教
