2013-10-25 69 views
-3

当我尝试使用移动即Slide.move(1,0)我得到的错误:非静态方法move(int,int )不能从静态上下文中引用非静态方法move(int,int)不能从静态上下文引用

这是我的代码,我不知道什么是错的。

public void move(int row, int col) { 
     char [][] temp= new char [cells.length][]; 
     for (int i= 0; i< cells.length; i++) { 
      int destRow = (i+row)%cells.length; 
      temp[destRow] = new char [cells[i].length]; 
      for (int j= 0; j < cells[i].length; j++) 
       temp[destRow][(j+col)%cells[i].length] = cells[i][j]; 
      } 
       cells= temp; 
     } 

    } 
+1

主要是哪一行代码导致出现。我想知道,如果它的编译器错误在主要方法中,你没有向我们展示 –

+1

你是否从'main'方法中调用这个方法?如果是,那么你必须在'main-me之间创建一个'static-reference' thod'和这个'方法'。 – Tdorno

+0

或者main可以创建一个类的实例并调用实例上的移动。 –

回答

3

错误的含义正是它所说的。

您的move方法不是静态的。它需要一个对象的实例被调用,例如:

Slide s = new Slide(); 
s.move(...); 

要调用它,因为它说,从静态上下文,即没有this的地方,也许是另一种静态方法或直接通过Slide.move(...)。你将不需要那样做。

这些失败:

Slide.move(...); // error: move requires an instance 

// and 

class Slide { 
    void move (...) { 
     ... 
    } 
    static void method() { 
     move(...); // error: method is static, there is no instance 
    } 
} 

这些不失败:

Slide s = new Slide(); 
s.move(...); 

// or 

class Slide { 
    void move (...) { 
     ... 
    } 
    void method() { 
     move(...); 
    } 
} 

// or 

class Slide { 
    static void move (...) { 
     ... 
    } 
    static void method() { 
     move(...); 
    } 
} 

所以,无论是从非静态上下文调用它,或使它成为一个静态方法。

至于推荐阅读更多关于这些东西(你在评论中提到的内容)的地方,请试试http://docs.oracle.com/javase/tutorial/官方Java教程(看看“学习Java语言”轨迹(特别是:http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html)。

至于你输出的问题,因为这是一个单独的问题,你想发布一个单独的问题吧。

+0

我的代码中没有任何静态方法...我只是编辑第一篇文章的所有代码来向你展示...? – Jay

+0

然后,您将它称为'Slide.move(...)',正如我之前所说的那样。你需要阅读链接的教程。 –

+0

我看到你的编辑。当然,您需要清楚地指出导致该错误的行,以便您的编辑有用。 –

1

那么这是因为你说public void定义的move方法作为非静态方法,使其静态,你需要写public static void代替。

另请注意,变量名称区分大小写,如果您编写Slide.move(),则明确请求您的Slide class,因为您的变量名为slide

相关问题