1

我将自己定义为 Java 初学者,只用了一个学期,在此之前我几乎没有任何编程经验,几乎没有 OOP 经验。

无论如何,我正在浏览一段代码,我发现了一个声明为类类型的方法

public Polica stavi (Predmet p, int i)
        throws GPolIndeks, GPolZauzeto, GPolTezina{
        if(i<0 || i>=niz.length) throw new GPolIndeks (i);
        if(niz[i] != null) throw new GPolZauzeto (i);
        if(q + p.Q() > maxQ) throw new GPolTezina (p);
        niz[i] = p;
        q += p.Q();
        return this;
    }

现在代码相当简单,几乎我对它并不陌生,除了声明了一个名为“stavi”的方法的部分。我一直认为有两种类型的方法,一种是返回值,另一种是不返回值,而这种方法确实如此,但它没有被声明为任何经常使用的类型(int、double、long ...) ,它是用一个类名声明的,在这种情况下是"Polica"。这是我第一次遇到这样的事情并且它在编译器中工作,所以我的问题是,我在哪里可以更详细地阅读方法,以更好地理解它是如何工作的。

4

7 回答 7

1

好的,我将为您解释一些要点。这一切都与 OOP 有关

Polica是一个类,Object一旦你创建了它的实例,它就会变成一个

Polica polica = new Polica();

方法可以返回任何类型的变量和对象

这意味着在你的函数中你期望返回一个 ObjectPolica

 public Polica stavi(){
   Polica polica = new Polica();
   return polica;
 }

this代表它自己的自我实例,所以它和这个真的一样

public Polica stavi(){
       Polica polica = new Polica();
       return this;
}

很好,你有一个很好的好奇心!这是一个很好的教程给你。

http://docs.oracle.com/javase/tutorial/java/concepts/index.html

http://docs.oracle.com/javase/tutorial/java/javaOO/objects.html

祝你好运!

于 2012-12-30T14:35:15.833 回答
0

官方的Java 教程是一个很好的起点——我会推荐像Head First Java这样的书籍,它们对 Java 初学者非常有用,可以帮助你掌握 Java 基础知识。

针对您的问题,Java 方法可以返回诸如 int、float 等原语、诸如Integer之类的内置 Class 对象实例,或者您在 Java 应用程序中创建的自定义类,例如您上面提到的“Polica”。

另请注意,在实例方法或构造函数中, this 是对当前对象的引用 - 正在调用其方法或构造函数的对象。您可以使用“this”从实例方法或构造函数中引用当前对象的任何成员。因此,在您的情况下,当您的方法返回“this”并且方法签名说它返回“Polica”时,这意味着该方法“ stavi”是“Polica”类的一部分,指的是“Polica”的当前实例。

于 2012-12-30T14:47:51.343 回答
0

看看这里的文档

返回类型不必是 int、long 或 double 等。它可以是您自己定义的对象。

于 2012-12-30T14:30:20.533 回答
0

它没有被声明为任何经常使用的类型(int、double、long ...),它是用类名声明的

当您返回它们时,int、double、long 等(称为原语)和类之间没有区别。它们以相同的方式返回,并返回不同的类型。

public Potato weirdMethod(Elephant e) {
    System.out.println(e);
    return new Potato();
}

如果您定义了“Potato”和“Elephant”类,那将可以正常工作。

(编辑:正如 Chris McCabe 在评论中澄清的那样,当您返回一个对象时,它是按引用传递的,因此您可以更改它,它会更改您返回的实际对象。基元是按值传递的,所以如果你得到一个方法的原语并改变它,原来的将不受影响。)

在这种情况下,看起来您想要使用构造函数。http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

于 2012-12-30T14:31:26.233 回答
0

我将从Java 方法教程开始

在此示例中,该方法返回对对象的引用,在这种情况下,该对象是您刚刚调用方法的对象。这用于链接,并且经常使用的类是 StringBuilder 例如。

String text = new StringBuilder().append("Hello, the time is ")
                                 .append(new Date()).append("\n).toString();

如您所见,这是有效的,因为每个附加方法都返回this原始 StringBuilder。

于 2012-12-30T14:31:53.650 回答
0

在 java 或任何其他 oops 语言中,方法的返回类型可以是任何对象类型,即它不限于原始类型(int、double ...)

您应该阅读(语言规范)以获取更多详细信息。

于 2012-12-30T14:32:28.707 回答
0

在这里你可以找到你需要的东西。并回答您的问题,此方法返回 Polica 类型的对象。

于 2012-12-30T14:33:34.307 回答