是否可以从一个static方法内部发出对非static方法的调用 ?

不可以
因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。

上面这句话是从文档上抄的,其实我还是有疑问,不是不能调吧而是不能直接调用,所以还是可以调用的,看下面代码:

 public static void main(String[] args) {
        //静态方法 调用
        int a = test01(1, 1);
        System.out.println("a:" + a);
        //    普通方法调用
        StaticTest staticTest = new StaticTest();
        int b = staticTest.test02(1, 1);
        System.out.println("b:" + b);
        //  普通方法内部调用静态方法
        StaticTest staticTest1 = new StaticTest();
        System.out.println("c:" + staticTest1.test03(1, 1));
        //  静态方法内部调用普通方法
        int d = test04(1,1);
        System.out.println("d:"+d);
    }

    //静态方法
    static int test01(int x, int y) {
        return x + y;
    }

    //    普通方法
    int test02(int x, int y) {
        return x - y;
    }

    //  普通方法内部调用静态方法
    int test03(int x, int y) {
        int c = test01(x, y);
        return c;
    }

    //  静态方法内部调用普通方法
    static int test04(int x, int y) {
        StaticTest staticTest = new StaticTest();
        int d = staticTest.test02(x, y);
        return d;
    }
输出:
a:2
b:0
c:2
d:0

看代码并没有编译运行报错。
那么想一下为啥要用静态方法?

静态方法的生命周期跟相应的类一样长,静态方法和静态变量会随着类的定义而被分配和装载入内存中。一直到线程结束,静态属性和方法才会被销毁。(也就是静态方法属于类)

非静态方法的生命周期和类的实例化对象一样长,只有当类实例化了一个对象,非静态方法才会被创建,而当这个对象被销毁时,非静态方法也马上被销毁。(也就是非静态方法属于对象)

也就是说平时项目中我们创建共用方法和共用变量直接创建静态的,那样就可以直接调用,不用再创建对象了,是不是就方便多了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值