静态引用非静态方法

时间:2013-08-31 22:43:55

标签: java

我们为PercolationStats类提供了这个规范:

public class PercolationStats {
   public PercolationStats(int N, int T)    // perform T independent computational experiments on an N-by-N grid
   public double mean()                     // sample mean of percolation threshold
   public double stddev()                   // sample standard deviation of percolation threshold
   public double confidenceLo()             // returns lower bound of the 95% confidence interval
   public double confidenceHi()             // returns upper bound of the 95% confidence interval
   public static void main(String[] args)   // test client, described below
}

要实现mean()和stddev(),我们必须使用一个名为StdStats的特殊库:

public final class StdStats {

private StdStats() { }

/* All methods declared static. */

}

我试着写一些像

这样的东西
public mean() {

return StdStats.mean();

}

但是我收到以下错误:

Cannot make a static reference to the non-static method mean() from the type PercolationStats

这可能是产生它的原因:

main() {

/* ... */

        System.out.println("-- Summary --\n");
        System.out.printf("mean\tstdev\t[lo\thi]\n\n");
        System.out.printf("%1.3f\t%.3f\t%.3f\t%.3f", PercolationStats.mean(), 
                          PercolationStats.stddev(), PercolationStats.confidenceLo(), PercolationStats.confidenceHi());

        System.out.println("-- End --");
}

有没有办法在不改变规格的情况下摆脱这个错误?我相信我们应该能够制作PercolationStats对象。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您无法使用main方法访问非静态方法。 创建一个新对象并在该构造函数中执行操作。

class PercolationStats {
 public static void main(String[] args){
  new PercolationStats ();
 }

 public PercolationStats() {
  System.out.println("-- Summary --\n");
  System.out.printf("mean\tstdev\t[lo\thi]\n\n");
  System.out.printf("%1.3f\t%.3f\t%.3f\t%.3f", mean(), 
                          stddev(), confidenceLo(), confidenceHi());

  System.out.println("-- End --");
 }
}

我已调整它以便它使用您的类名。您试图从静态方法访问非静态方法,这是不可能的。当您访问静态方法时,此时静态方法没有可用的非静态方法,并且始终会导致错误。 你必须将它们分开。

好吧,您也可以在PercolationStats方法中创建一个main对象并使用其中的所有内容,但这样可以保持简洁。