如何在Java类方法中访问私有变量

时间:2012-12-29 23:49:59

标签: java private-members

我正在尝试在我的方法x中访问私有变量(distanceFromPoint),但它似乎不起作用。我该如何访问它?无论其他值如何,我的方法都会一直返回0.0

代码

public class Pointdeclare {
    private static int x;
    private static int y;

    Pointdeclare (int x_ , int y_ ){
        this.x = x_;
        this.y = y_;
    }

    int getX(){
        return x;
    }

    int getY(){
        return y;
    }

    static double distanceFromZero (){
        return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
    }

    double distanceFromPoint(Pointdeclare point){
        int distX = point.getX()- this.x;
        int distY = point.getY()- this.y;

        return (double) Math.sqrt(Math.pow(distX, 2) + Math.pow(distY, 2));
    }
}

主类

public class main {
    static Pointdeclare p1 = new Pointdeclare(6, 7);
    static Pointdeclare p2 = new Pointdeclare(3, 7);

    public static void main (String[] args){
        System.out.println(p2.distanceFromZero());

        System.out.print(p1.distanceFromPoint(p2));
    }
}

5 个答案:

答案 0 :(得分:2)

这对您更有效:

package cruft;

/**
 * Point2 description here
 * @author Michael
 * @link http://stackoverflow.com/questions/14087002/how-to-access-private-variables-in-a-java-class-method
 * @since 12/29/12 6:52 PM
 */
public class Point2 {

    private int x;
    private int y;

    Point2(int x_, int y_) {
        this.x = x_;
        this.y = y_;
    }

    int getX() {
        return x;
    }

    int getY() {
        return y;
    }

    double distanceFromZero() {
        return distanceFromPoint(new Point2(0, 0));
    }

    double distanceFromPoint(Point2 point) {
        int distX = point.getX()-this.x;
        int distY = point.getY()-this.y;

        return (double) Math.sqrt(Math.pow(distX, 2)+Math.pow(distY, 2));
    }


    public static void main(String[] args) {
        Point2 p1 = new Point2(6, 7);
        Point2 p2 = new Point2(3, 7);
        System.out.println(p2.distanceFromZero());
        System.out.print(p1.distanceFromPoint(p2));
    }
}

答案 1 :(得分:1)

您声明了“x”和“y”static,这意味着它们是类变量,而不是实例变量。

因此,每次对构造函数的新调用都将覆盖旧值。因此,distanceFromPoint始终返回零,因为只有一个x和一个y

答案 2 :(得分:1)

您不应将您的班级字段声明为static,只需将其留下private

顺便说一下,请考虑使用Point包中的Point2Djava.awt.geom本机类。

答案 3 :(得分:1)

问题不在于私有,相反,这是因为静态。 x是静态的。在您的方法中,您应该使用x作为:

int distX = point.getX()- Pointdeclare.x; // You could use this.x because x is static.

答案 4 :(得分:1)

我希望你发现这是相关的,它没有直接回答你的问题,但我最近被告知我对static的理解是不正确的,所以刚刚研究了我认为可能有帮助的主题。 Static变量属于一个类而不是它的对象,类的对象可以访问一个静态变量,但无论该类有多少个对象,都只有一个静态变量的副本。所以我认为我之前的人所说的是p1和p2而不是p2和p2都有自己的x和y副本,两个对象共享相同的x和y字段因此返回的值为0.在其他世界中你试图找到它们之间的距离一个位置,它将始终为零。希望这有助于:-)。对不起,我错过了主要方法的第一行。 p2应该返回一个值,只要它不为零,但p1不会。