繁体   English   中英

JAVA 无法对非静态字段进行 static 引用

[英]JAVA cannot make a static reference to non-static field

这是我在 JAVA 中的第一个程序,我无法理解这个错误

Cannot make a static reference to the non-static field *

无法对非静态方法进行 static 引用 *

public class Cerchio{

   float r;
   float area;
   float cfr;
   final double pi = 3.14;

   public static void main(String[] args){
      System.out.println("CIRCLE PROGRAM\n");
      r = 5;
      c_cfr();
      c_area();
      System.out.ptintln("The cir is: " + cfr);
      System.out.println("The area is: " + area);
   }

   float c_cfr(){
      cfr =(float)(2 * pi * r); //casting
      return cfr;
   }

   float c_area(){
      area = (float)(pi * (r*r));
      return area;
   }

}

错误 你能给我什么建议吗? 我在 Android 上的 SandIDE 上编码

您正在从静态方法中调用实例方法和字段,这是无法完成的,因为没有对象就不会存在实例字段和方法,并且在main方法内部没有this对象。 相反,您必须创建该类的实例,然后在该实例上调用方法。

public class Cerchio{

  float r;
  float area;
  float cfr;
  final double pi = 3.14;

  public static void main(String[] args){
    System.out.println("CIRCLE PROGRAM\n");

    Cerchio cerchio = new Cerchio();
    cerchio.r = 5;
    cerchio.c_cfr();
    cerchio.c_area();
    System.out.ptintln("The cir is: " + cerchio.cfr);
    System.out.println("The area is: " + cerchio.area);
  }

  float c_cfr(){
    cfr =(float)(2 * pi * r); //casting
    return cfr;
  }

  float c_area(){
    area = (float)(pi * (r*r));
    return area;
  }

}

还有很多其他问题,...

  • 您正在直接访问类字段,这是不应该做的。 相反,字段应该是私有的,您应该使用getters / setters / contructor参数来获取,设置和设置字段。
  • 您的代码是缩进的,很难阅读和理解。

请搜索该站点,因为已经问过这个问题并回答了gabizillion次,并且很可能存在比我更好的答案。 如果找到,则应将此问题作为重复项予以关闭。


编辑
您声明:

我不明白“相反,字段应该是私有的,您应该使用getters / setters / contructor参数来获取,设置和设置字段。” 我应该写私有float c_cfr()吗?

您的字段是:

float r;
float area;
float cfr;

这实际上不是一个字段,而是一个常数:final double pi = 3.14;

只需使用Math.PI即可对其进行替换/改进。

您的字段应更改为:

private float r;
private float area;
private float cfr;

并且仅在绝对必要时,才应通过公共getter和setter方法访问它们。

简单的解决方法是将“静态”一词放在每种方法的前面。 它是一个通用的静态真值圆周= 2pi * r,您的圆可能大于我的圆(两个圆的实例),但是要找到面积,则有一个公式

c_cfr()和c_area()是非静态方法,您尝试直接从静态main方法中调用它们。 要么将方法c_cfr()和c_area()设置为静态方法,要么使用对象引用对其进行访问。

In this code you are trying to acess non static instances and methods of class in static method ie public static void main(String[] args)

因此,将实例和方法更改为 static 或创建 Cerchio 的 object 然后访问它们

public class Cerchio {

       static float r;
       float area;
       float cfr;
       
       static  float c_cfr() {
          return (float)(2 * Math.PI* r);
       }

       float c_area() {
          area = (float)(Math.PI * (r*r));
          return area;
       }

       public static void main(String[] args){
          System.out.println("CIRCLE PROGRAM\n");
          Cerchio.r = 5;
       
          Cerchio s = new Cerchior();
          
          System.out.println("The cir is: " +c_cfr());
          System.out.println("The area is: " + s.c_area());
       }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM