簡體   English   中英

無法從非靜態中找到java-方法

[英]java- method cannot be found from non static

我有2個類,即dog和printing,dog類用於通過char [] []發送以進行打印,以便可以將其打印到打印機。 但是,狗類在打印類中找不到打印方法。

//Printing class-
public class Printing implements Printable, ActionListener {
    String str = "";

    public String printString(char [][] grid ){  
        for(int i=0;i<9;i++){
            for (int j=0;j<9;j++){    
                str += String.valueOf(grid[i][j]);
            }
            str += "\n";
        } 
        return str;
    }
}

然后,我也需要在另一種方法中使用該str。 當我鍵入Printing.printString(grid); 不能從靜態上下文中引用它。 當我將其更改為public static String(char [][] grid )其方法無法找到str字符串變量。

您不能調用Printing.printString(grid); 除非您將其設置為靜態,否則將這樣。

另外,如果將printString()方法設置為靜態,則需要將str聲明為靜態,因為您不能在靜態方法中引用非靜態變量。

因此,您的代碼應如下所示:

public class Printing  implements Printable, ActionListener {
static String str = "";

    public String printString(char [][] grid ){  
        for(int i=0;i<9;i++){
            for (int j=0;j<9;j++){    
                str += String.valueOf(grid[i][j]);
            }
            str += "\n";
        } 
        return str;
    }
}

閱讀有關靜態變量和方法的更多信息

str成員也必須是靜態的。 只要確保在每次調用printString將其重置printString

  class Printing
  {
    private static String str = "";

    public static printString( char[][] grid )
    {
      str = "";

      for(int i=0;i<9;i++)
      {
        for (int j=0;j<9;j++)
        {
          str += String.valueOf(grid[i][j]);
        }

        str += "\n";
      }

      return str;
    }
  }

另外,這實際上不是問題的一部分,但是我建議在這種情況下使用StringBuffer類。

這會有所幫助

public String printString(char [][] grid ){  
     String str = "";

        for(int i=0;i<9;i++){
            for (int j=0;j<9;j++){    
                str += String.valueOf(grid[i][j]);
            }
            str += "\n";
        } 
        return str;
}
static String str = "";

 public static String printString(char [][] grid ){  
        for(int i=0;i<9;i++){
            for (int j=0;j<9;j++){    
                str += String.valueOf(grid[i][j]);
            }
            str += "\n";
        } 
        return str;
}

現在您可以使用Printing.printString(grid);調用該方法Printing.printString(grid);

非靜態實例變量不能在靜態類中引用,反之亦然

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM