1

考虑以下示例

public class Human
{
public Human h1;
public String name;
public int age;

public Human()
{
  name = "myName";
      age = 22;
}
}

在那里有一个h1有什么意义?如何使用?为什么要使用它?我们不能只使用我们将使用 new 创建的实例吗?

4

4 回答 4

5

在那里有一个h1有什么意义?

这完全取决于班级。

如何使用?

像任何其他实例成员一样。

为什么要使用它?我们不能只使用我们将使用 new 创建的实例吗?

考虑一个链表,其中每个节点都有到下一个(也可能是前一个)节点的链接。这些链接将与节点本身属于同一类。例如,大致:

class LinkedListNode {
    private LinkedListNode previous;
    private LinkedListNode next;
    private Object value;

    LinkedListNode(LinkedListNode p, LinkedListNode n, Object v) {
        this.previous = p;
        this.next = n;
        this.value = v;
    }

    LinkedListNode getPrevious() {
        return this.previous;
    }

    // ...and so on...
}

还有很多其他类似的用例。一个Person类可能有相关人员(配偶、子女)的成员。树类可能会有叶子,而叶子可能与其他叶子有链接。等等。


在评论中,您询问了单例课程。是的,这绝对是您拥有一个属于该类类型的成员的情况。这是一个标准的单例(这个主题有很多变体):

class Foo {
    // The singleton instance
    static Foo theInstance = null;

    // Private constructor
    private Foo() {
    }

    // Public accessor for the one instance
    public static synchronized Foo getInstance() {
        if (theInstance == null) {
            theInstance = new Foo();
        }
        return theInstance;
    }

    // ...stuff for Foo to do, usually instance methods...
}
于 2013-09-22T09:32:44.333 回答
2
  • 如果手动构建链表、树或其他形式的对象关联,则可以将此类字段命名为prev, next, parent, child, firstChild, lastChild, prevSibling, nextSibling, ... 。
  • 具有相同类型(递归)或不同类型的父/子关联使用 JPA 实体建模,例如,它(通常)不仅仅指向同一个实例(this)。
  • 相同类型的静态字段可用于单例实例或某种预定义的,可能是最终值。
于 2013-09-22T09:34:27.377 回答
2

一个例子,如果你有一个树状结构,那么一个节点可以包含它自己类型的子节点。这就是您的Human类具有自己类型的属性的原因。

于 2013-09-22T09:32:41.303 回答
1

为了在java中实现链表、树等数据结构,拥有与类相同类型的字段是很常见的。

它与 C 中用于此目的的指针基本相同。

由于在 java 中创建的每个对象实际上都是对堆中对象实际位置的“引用”,因此在某种程度上您可以将它们视为 C 中的指针。

所以像:
struct List{ int val; List *next; }


在java中会是这样的:
class MyList{ int val; MyList nextNode; }

于 2013-09-22T12:05:42.557 回答