求大佬!這實現了靜態方法訪問普通成員方法嗎?
public class Staticlearn {
????static int score1 = 66;????????????????//定義靜態變量
????static int score2 = 99;?
????public static int sum(){????????????????//定義靜態方法
????????int sum = score1 + score2;
????????return sum; //返回值
????}
????public int show(){
????????//System.out.println(sum);? 普通成員方法需要會報錯
????????int show = sum();
????????System.out.println(score1); ???? //普通成員方法可以直接訪問靜態變量或非靜態變量
????????return show;
????}
????public static void main(String[] args){
????????Staticlearn object = new Staticlearn();????????//創建類的對象
????????int allScore = object.show();????????????????????????//靜態方法訪問普通成員方法???
????????System.out.println(allScore);
????}
}
我梳理了一份序列,求大佬幫我看看是不是對的~
static靜態方法
??????? -靜態變量????? (直接訪問)
??????? -非靜態變量?? (創建類的對象訪問)
??????? -靜態方法????? (直接調用)
??????? -非靜態方法?? (創建類的對象訪問)
普通成員方法
??????? -靜態變量????????(直接訪問)
??????? -非靜態變量?????(直接訪問)
??????? -靜態方法????????(通過對象調用)
??????? -非靜態方法????(直接訪問)
2019-11-25
這是我的測試流程,如果有問題歡迎指出,謝謝大家的幫助( ?? ω ?? )y
我得出的結論是:
因為程序優先加載靜態,所以靜態互相訪問和調用OK,此時普通成員還未加載 ,所以報錯。
通過創建類的對象,把普通成員方法加載出來,此時靜態訪問和調用OK。
普通成員最后加載,場上所有成員都已出現,所以直接訪問OK
2019-11-23
題主你就沒有定義靜態方法啊,main函數不算
2019-11-20
我也是剛入門,對于你所提的,不知我下面的筆記是否能解答!?
普通成員方法:
靜態變量????????(直接訪問)
-非靜態變量?????(直接訪問)
?-靜態方法????????(直接調用)
?-非靜態方法????(通過對象訪問)
/靜態方法:
public static void print() {
System.out.println("靜態方法調用執行==");
//靜態方法可以直接調用同類中的靜態成員:
System.out.println("調用同類中的靜態成員:"+ hello);
//不能直接調用非靜態成員:
//System.out.println("調用靜態成員"+ vae);
//通過對象來調用非靜態成員,對象必須是在方法體內創建才有效調用,在方法體外創建的類對象調用非靜態成員是無效的
tesedemo tesed = new tesedemo();
System.out.println("通過對象調用非靜態成員:" + tesed.vae);
}?
//==================================================================================
//普通成員的方法中,可以直接訪問同類中的? 非靜態變量與 靜態變量:
public void pel() {
String huy = "方法體中的非靜態變量";
?
// 普通方法體內調用靜態方法是允許的
print();
//普通方法可以直接訪問同類中的 靜態變量
System.out.println("普通方法訪問 靜態變量:"+ hello);
//調用普通方法須通過類的對象調用,在方法體內可直接訪問非靜態變量
System.out.println("普通方法訪問非 靜態變量:"+ huy);
//調用普通方法須通過類的對象調用
System.out.println("調用普通方法須通過類的對象調用");
// 注: 因程序入口"main" 是靜態方法,在調用普通方法時必須是對象調用。而定義的靜態方法可直接訪問方法名