我的程序有问题。Eclipse写道:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Cannot make a static reference to the non-static method umfang() from the type GeoPolygon
Cannot make a static reference to the non-static method laenge() from the type GeoPolyline
我做错了什么?我的应用程序中有2个错误。班你能改进我的代码并解释一下吗?先谢谢你。
import java.util.ArrayList; //import Array List (java.util)
import java.util.List; //import List (java.util)
public class App { //new public class App
public static void main(String[] args) { //main methode
GeoPoint p1 = new GeoPoint(10.681,-48.857); // new Points (x,y)
GeoPoint p2 = new GeoPoint(96.980,20.724);
GeoPoint p3 = new GeoPoint(66.647,-66.558);
GeoPoint p4 = new GeoPoint(-2.674,-58.571);
GeoPoint p5 = new GeoPoint(40.11,-12.342);
GeoPoint p6 = new GeoPoint(27.782,46.809);
GeoPoint p7 = new GeoPoint(54.759,-46.709);
GeoPoint p8 = new GeoPoint(-33.89,-90.787);
GeoPoint p9 = new GeoPoint(15.84,-67.553);
GeoPoint p10 = new GeoPoint(19.481,51.331);
List<GeoPoint> list1 = new ArrayList<GeoPoint>(); // Create ArrayList and add Points
list1.add(p1);
list1.add(p2);
list1.add(p3);
list1.add(p4);
list1.add(p5);
list1.add(p6);
list1.add(p7);
list1.add(p8);
list1.add(p9);
list1.add(p10);
BoundingBox bbox = new BoundingBox(list1); // get the list from BoundingBox
double c = GeoPolygon.umfang(); //new variable c = height
double d = GeoPolyline.laenge(); //new variable d = width
System.out.println("Das Array beinhaltet die Punkte: " + list1 ); // This prints: "Das Array beinhaltet die Punkte" and the list
System.out.println("Der Gesamtlaenge des Polygons betraegt (" + d +")." ); // This prints the polygons circumference
System.out.println("Der Umang des Polygons betraegt: (" + c +")." ); // This prints the polygons area
}
}
多边形
import java.util.List;
public class GeoPolygon implements Geometry {
private List<GeoPoint> Polylinelist;
private String name;
private double umfang;
public double umfang() {
umfang = 0;
for (int i = 0; i < Polylinelist.size() -1 ; i++) {
GeoPoint p1 = Polylinelist.get(i);
GeoPoint p2 = Polylinelist.get(i + 1);
umfang += GeoUtil.distance(p1, p2);
}
umfang += GeoUtil.distance(Polylinelist.get(0), Polylinelist.get(Polylinelist.size() -1 ));
return umfang;
}
public GeoPolygon(List<GeoPoint> punktliste, String name) {
this.Polylinelist = punktliste;
this.name = name;
}
public BoundingBox getBoundingBox() {
BoundingBox bbox = new BoundingBox(Polylinelist);
return bbox;
}
public String getName() {
{
return name;
}
}
public void addGeoPoint(GeoPoint geoPoint) {
Polylinelist.add(geoPoint);
}
}
地聚线
import java.util.List;
public class GeoPolyline implements Geometry {
private List<GeoPoint> Polylinelist;
private String name;
private double laenge;
public double laenge() {
laenge = 0;
for (int i = 0; i < Polylinelist.size() - 1; i++) {
GeoPoint p1 = Polylinelist.get(i);
GeoPoint p2 = Polylinelist.get(i + 1);
laenge += GeoUtil.distance(p1, p2);
}
return laenge;
}
public BoundingBox getBoundingBox() {
BoundingBox bbox = new BoundingBox(Polylinelist);
return bbox;
}
public GeoPolyline(List<GeoPoint> punktliste, String name) { //Konstruktor
this.Polylinelist = punktliste;
this.name = name;
}
public String getName() {
{
return name;
}
}
public List<GeoPoint> getPolylinelist() {
{
return Polylinelist;
}
}
public void addGeoPoint(GeoPoint geoPoint) {
Polylinelist.add(geoPoint);
}
}
您需要将关键字static添加到GeoPolygon上的方法中
public static double umfang() {
...
}
在你的应用程序类中,你在publicstaticvoidmain
中有以下行:
double c = GeoPolygon.umfang();
注意它所在的方法是静态的。因此,您不能调用umfang()
,因为它不是静态的。这同样适用于laenge()
。
在这里阅读静电
可以直接访问类中的静态项,但不能直接访问类中的非静态项。若要访问非静态项(如方法或字段),必须创建该类的新实例。
double c = GeoPolygon.umfang();
double d = GeoPolyline.laenge();
这些不是静态方法。如果希望它们是静态的,请将它们声明为静态的。
或者,您可以在调用类之前创建类的实例:
如:
GeoPolygon x = new GeoPolygon();
double c = x.umfang();
问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以
问题内容: 只是为了澄清我正在考虑的这个权利,在Java中,静态字段是整个类使用的变量/字段,还是可以用于引用该类的所有对象?非静态字段是由对象定义的变量吗?并且与对象1引用相同类的第二个对象可以具有与对象1的静态字段不同的值吗? 问题答案: 与实例变量不同,在创建该类的实例之前,可以访问该类中的静态字段或静态类变量。在运行时创建该类的实例时,将创建该类中的实例变量(非静态变量)。因此,直到创建该
我想澄清一下,在java中,静态字段是整个类使用的变量/字段,或者可以被引用该类的所有对象使用?非静态字段是由对象定义的变量?第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?
我试图理解重载和重写静态和非静态方法是如何工作的。事实上,我试图理解这些方法如何能够和不能出现在父类和子类中。我想出了下面的规则: 我们不能重写静态方法,只能隐藏它们。通过隐藏,我们的意思是在编译时根据引用变量类型决定执行哪个方法,而不是重写(,在运行时根据实例类型选择哪个方法执行)。 例如,让,然后隐藏. 我们可以重写实例方法。 例如重写. 两个或多个具有相同签名的方法不能以静态或非静态组合形式
问题内容: 在UNI atm上做Java课程,我遇到了骰子问题。 我有以下内容: 编译时,我得到:无法从静态上下文引用非静态变量n。我如何解决这个问题,同时让它从用户给定的值中随机化? 问题答案: 不是静态变量,因此您不能以静态方式()引用它。 由于它是类中的实例变量,并且您正在类中引用它,因此可以使用代替。
我有以下代码: 当我尝试编译它时,会出现以下错误: 因此,我尝试使dbConnect静态如下: