[英]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;
}
}
还有很多其他问题,...
请搜索该站点,因为已经问过这个问题并回答了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.