为了账号安全,请及时绑定邮箱和手机立即绑定

求大佬!这实现了静态方法访问普通成员方法吗?

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下载
官方微信