Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java parameter.method或argument.method如何可能?我以为这总是课堂教学法。有人能解释一下吗?_Java - Fatal编程技术网

Java parameter.method或argument.method如何可能?我以为这总是课堂教学法。有人能解释一下吗?

Java parameter.method或argument.method如何可能?我以为这总是课堂教学法。有人能解释一下吗?,java,Java,我是java新手,我一直被教导它总是class.method,现在这段代码有另一个.getX,这让我非常困惑。我从未意识到参数或参数。方法是可能的。有人能解释它是如何工作的吗 public class Point { private int x; private int y; public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { retu

我是java新手,我一直被教导它总是class.method,现在这段代码有另一个.getX,这让我非常困惑。我从未意识到参数或参数。方法是可能的。有人能解释它是如何工作的吗

public class Point {
private int x;
private int y;

public int getX() {
    return x;
}

public void setX(int x) {
    this.x = x;
}

public int getY() {
    return y;
}

public void setY(int y) {
    this.y = y;
}

public Point() {
    this(0,0);
}

public Point(int x, int y) {
    this.x = x;
    this.y = y;
}

public double distance (){


    double distance = Math.sqrt((x - 0) * (x - 0) + (y - 0) * (y - 0));

   return distance;
}

public double distance (int x, int y){

    double distance = Math.sqrt((x-this.x) * (x-this.x) + (y-this.y) * (y - this.y));
    return distance;
}

public double distance (Point another){

    double distance =  Math.sqrt((another.x - x)   * (another.x - x) + (another.y - y)   * (another.y - y));
    return distance;
}
}这是可能的

对于这类事情,Java语言规范§15.1中对其进行了很好的定义。这是一段摘录:

如果表达式表示一个变量,并且需要在进一步计算中使用一个值,则使用该变量的值。在这种情况下,如果表达式表示变量或值,我们可以简单地说表达式的值

这意味着
someObject.someMethod()
可能会生成一个结果类型的值

下面是一个例子:

class A {
    B getB() {
        return new B();
    }
}
class B {
    C getC() {
        return new C();
    }
}
class C {
    String getString() {
        return "Hello World!";
    }
}
您可以像这样“链接”您的方法调用:

A myA = new A();
String str = myA.getB().getC().getString().toUpperCase();
System.out.println(str); // Prints "HELLO WORLD!"
结果是:

  • myA
    是一个
    A
  • A.getB()
    返回A
    B
  • B.getC()
    返回a
    C
  • C.getString()
    返回一个
    字符串
  • String.toUpperCase()
    返回一个
    字符串
    ,因此最终结果是一个
    字符串
    ,该字符串存储在
    str`变量中


还有一些注释:
SomeClass.someMethod()
表示静态方法。如果当前类是
SomeClass
,则可以省略类名
someVariable.someMethod()
,但是,它是一种实例方法,只能对实例调用。

您可以对任何对象调用方法。只要
expr
是一个对象,就可以执行
(expr).someMethod()
。否则,创建方法有什么意义呢?代码似乎根本没有另一个.getX
。它有另一个.x
,如果
x
是私有的,它就不能工作。请注意,
另一个
是一个变量,它引用了
的实例,因此它实际上是一个类。如果您有另一个.getX()
,则该类将调用其
getX
方法。