繁体   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