考虑以下示例
public class Human
{
public Human h1;
public String name;
public int age;
public Human()
{
name = "myName";
age = 22;
}
}
在那里有一个h1有什么意义?如何使用?为什么要使用它?我们不能只使用我们将使用 new 创建的实例吗?
在那里有一个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...
}
prev
, next
, parent
, child
, firstChild
, lastChild
, prevSibling
, nextSibling
, ... 。一个例子,如果你有一个树状结构,那么一个节点可以包含它自己类型的子节点。这就是您的Human
类具有自己类型的属性的原因。
为了在java中实现链表、树等数据结构,拥有与类相同类型的字段是很常见的。
它与 C 中用于此目的的指针基本相同。
由于在 java 中创建的每个对象实际上都是对堆中对象实际位置的“引用”,因此在某种程度上您可以将它们视为 C 中的指针。
所以像:
struct List{
int val;
List *next;
}
在java中会是这样的:
class MyList{
int val;
MyList nextNode;
}