无法从静态上下文引用非静态方法toString

时间:2014-12-21 19:02:45

标签: java static tostring

我正在尝试创建一个读取用户输入并存储它的程序,然后计算多边形的面积 当我尝试编译它时,它给了我一个关于.toSting非静态的错误

import java.util.Scanner;

class regularpoTest {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        boolean finished = false;
        double s;
        double n;
        double area;
        //starts loop to record data
        do {
            s =0;
            n =0;


            System.out.println("Enter the side length, or anything else to quit: ");
            s = in.nextDouble();
            in.nextLine();
            if (in.hasNextDouble()) {
                System.out.println("Enter number of sides");
                n = in.nextDouble();
                area = (s*s*n)/(4*Math.tan(Math.PI/n));
            } else {
                finished = true;

            }
        } while(!finished);

        //This prints out the student details 

        System.out.println(regularpo.toString());

    }
}  

public class regularpo {

    private double side;
    private double numberOf;
    private double area;

    public regularpo(double side, double numberOf){
        side = 0;
        numberOf = 0;
        area = 0;
    }

    public double getSide(){
        return side;
    }
    public double getNumberOf(){
        return numberOf;
    }
    public String toString(){
        return ("area = " + area+ " side length "+side+ " number of sides "+numberOf);
    }
}

5 个答案:

答案 0 :(得分:1)

当您为该类的实例定义该方法(并且仅作为其意义)时,您正尝试调用类的方法。也许您的意思是创建该类的对象,并调用其toString方法,尽管我无法从您的代码中确定。

答案 1 :(得分:1)

您无法使用classname.nonStaticMethodName访问非静态方法。您需要使用new关键字实例化对象。基本上,您可以通过regularpo r = new regularpo(2.0, 2.0)创建对象的实例。之后,您可以调用r.toString();

查看此SO-question了解详情。

这个Oracle-tutorial很好地解释了班级成员。

答案 2 :(得分:1)

建议:

1)消除" regularpoTest"。只需移动" main()"进入" regularpo"。

2)大写" RegularPo" (按照惯例,类名应以大写字母开头)。

3)使RegularPo构造函数实际上保存初始值(不只是将它们设置为零)。

......而且,最重要的......

4)你的主人应该致电RegularPo regularPo = new RegularPo (...)。    然后引用对象实例" regularPo"。

答案 3 :(得分:0)

尝试创建类regularpo的对象并在该对象上调用toString

regularpo obj=new regularpo();
obj.toString();

同样根据惯例,类名必须以大写字母开头,因此将您的类命名为Regularpo

答案 4 :(得分:0)

toString()是regularpro类中的非静态方法,我们知道非静态属于一个对象,所以我们需要创建同一个类的对象并调用它。

toString()属于Object类,因此它是非静态方法。

regularpo obj = new regularpo(); obj.toString();