静态方法为什么不能调用非静态方法?细品

静态方法为什么不能调用非静态方法!

针对这个问题。有如下两点要说:

 

1>静态方法不能调用非静态方法(变量)

静态方法是把方法由对象层级提升到类层级。这就使得这个方法在类开始加载的时候就在内存中分配了区域,即这个方法在程序run时就开始存在了。

反之,

对象层级的方法也就是<非静态方法>只有在这个方法的对象被调用时才会去内存中分配区域,即这个方法在什么时候使用才什么时候产生、存在。

因此。

静态方法无法调用非静态方法。即等同于已存在的对象调用暂且不存在的对象,这当然是错误的。

 

2>静态方法调用非静态方法(变量)

通过上面的解释,大家知道,要想达成——有→无这一过程。也就是让非静态方法提前存在,也就是在程序run加载main主方法时,就实例化非静态方法的对象即可。

如下代码所示:

public class Test{

      //非静态方法
     public void test(){
         system.out.println("我是非静态方法");                
     }
      //静态方法
     publid static void test1(){
         system.out.println("我是静态方法");
     }

     //main入口
     public static void main(String[] args) {

       //实例化
       Test test = new test();
       //调用非静态方法
       test.test(); 
        
       //不需要实例化,类名直接调用
       Test.test1();

    }

}

静态方法属于类层级。

非静态方法属于对象层级。

以上,也就是为什么静态方法不能调用非静态方法的原因。

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值