关于Non-static method xx cannot be referenced from a static context的 ...

打印 上一主题 下一主题

主题 918|帖子 918|积分 2754

关于static method的解释


   想要解决上面的报错,我们首先需要了解什么叫做static method(静态方法)。   
静态方法为类所有,一般情况下我们通过类来使用(而对于不加static的实例方法我们则只能通过对象的来调用)。
以下我们通过一些代码的例子来对此进行说明:
在同一类里面调用静态方法与实例方法的区别:

点击查看代码
  1. public class Main{
  2.         public static viod main(String[] args){
  3.         //Test01();//直接调用Test01会报Non-static method xx cannot be referenced from a static context.
  4.         //用如下方式调用Test01
  5.         Main m=new Main();
  6.         m.Test01();
  7.        
  8.         //Test02可以直接调用,通过类
  9.         Main.Test02();
  10.        
  11.         }
  12.         public viod Test01(){
  13.         System.out.println("此方法为非静态方法")
  14.         }
  15.        
  16.         public static viod Test02(){
  17.         System.out.println("此方法为静态方法")
  18.         }
  19. }
复制代码
通过上面的代码不难看出我们的**main()方法是静态的**,如果要在 main() 方法中调用本类中的其他方法,则该方法也必须是静态的,否则需要先创建本类的实例对象,然后再通过对象调用该成员方法。在不同类里面调用静态方法与实例方法的区别:

点击查看代码
  1. public class Main{
  2.         public static viod main(String[] args){
  3.                 TestNonStatic.Test01();//会报错,不能直接引用其他类的非静态方法
  4.                 TestNonStatic testnonstatic=new TestNonStatic();
  5.                 TestNonStatic.Test01;//依然可以通过创建一个实体对象来访问。
  6.                 TestNonStatic.Test02();
  7.         }
  8. }
  9. class TestNonStatic{
  10.         viod Test01(){
  11.         System.out.println("其他类中的实例方法")
  12.         }
  13.         static void Test02(){
  14.         System.out.printlin("其他类中的静态方法")
  15.         }
  16. }
复制代码
通过以上代码不难看出静态方法与实例方法的主要区别在于是否需要创建一个对象来引用所对应的方法。只要满足封装的条件在同一类或者不同类均不影响调用。(从内存模型上来讲,我们的静态成员是处于堆中的,已经被分配了内存,所以我们可以直接对其进行调用。而非静态成员是没有被分配内存的,只有当他们被对象化,实例化才能被我们调用)。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表