亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

求大佬!這實現了靜態方法訪問普通成員方法嗎?

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靜態方法

??????? -靜態變量????? (直接訪問)

??????? -非靜態變量?? (創建類的對象訪問)

??????? -靜態方法????? (直接調用)

??????? -非靜態方法?? (創建類的對象訪問)

普通成員方法

??????? -靜態變量????????(直接訪問)

??????? -非靜態變量?????(直接訪問)

??????? -靜態方法????????(通過對象調用)

??????? -非靜態方法????(直接訪問)

正在回答

3 回答

這是我的測試流程,如果有問題歡迎指出,謝謝大家的幫助( ?? ω ?? )y

public?class?Test{
????static?int?s1?=?7;
????static?int?s2?=?9;????????????????????//定義兩個靜態變量
????int?n1?=?5;
????int?n2?=?6;????????????????????????//定義兩個普通變量
????
????public?static?int?Ssum(){
????????Smethod();????????????????????????//靜態方法?直接訪問?靜態方法?OK
????????Ssum();???????????????????????????//靜態方法?直接訪問?普通方法?[失敗]報錯
????????int?sum1?=?s1?+?s2;???????????//靜態方法?直接調用?靜態變量?OK
????????int?sum2?=?n1?+?n2;???????????//靜態方法?直接調用?非靜態變量[失敗}報錯
????}
????
????public?static?void?Smethod(){
????????Test?smd?=?new?Test();?????????????//創建類的對象
????????smd.Nsum();????????????????????????//靜態方法?通過對象訪問?普通方法?OK
????????int?sum6?=?smd.n1?+?smd.n2;????????//靜態方法?通過對象調用?普通變量?OK
????}
????
????public?void?Nsum(){
????????Ssum();?????????????????????????????//普通方法?直接訪問?靜態方法?OK
????????Nmethod();??????????????????????????//普通方法?直接訪問?非靜態方法OK
????????int?sum3?=?s1?+?s2;?????????????????//普通方法?直接調用?靜態變量?OK
????????int?sum4?=?n1?+?n2;?????????????????//普通方法?直接調用?非靜態變量?OK
????}
????
????public?void?Nmethod(){
????}
????
????public?static?void?main(String[]?args){
????}
}

我得出的結論是:

因為程序優先加載靜態,所以靜態互相訪問和調用OK,此時普通成員還未加載 ,所以報錯。

通過創建類的對象,把普通成員方法加載出來,此時靜態訪問和調用OK。

普通成員最后加載,場上所有成員都已出現,所以直接訪問OK

1 回復 有任何疑惑可以回復我~

題主你就沒有定義靜態方法啊,main函數不算

0 回復 有任何疑惑可以回復我~
#1

IEwuIL7 提問者

原來main函數不算啊,謝謝Thanks?(?ω?)?
2019-11-25 回復 有任何疑惑可以回復我~

我也是剛入門,對于你所提的,不知我下面的筆記是否能解答!?

普通成員方法:

靜態變量????????(直接訪問)

-非靜態變量?????(直接訪問)

?-靜態方法????????(直接調用)

?-非靜態方法????(通過對象訪問)



/靜態方法:

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" 是靜態方法,在調用普通方法時必須是對象調用。而定義的靜態方法可直接訪問方法名


0 回復 有任何疑惑可以回復我~
#1

IEwuIL7 提問者

謝謝回答Thanks?(?ω?)? 我測試了好久,也看了您的代碼,我測出來:普通成員方法訪問靜態方法和非靜態方法都是直接訪問Ok的
2019-11-25 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

求大佬!這實現了靜態方法訪問普通成員方法嗎?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號