这里我在同一个班级宣布一个类动物的实例。 在c中它被认为是一个错误:
struct demo{
int anyvar;
struct demo anyvar1;
};
因为它应该是一个无限循环的声明。
然后,为什么Java中允许使用此代码?
class Animal{
Animal object1 = new Animal();
public static void main(String[] args)
{
Animal obj = new Animal();
obj.dostuff();
}
public void dostuff()
{
System.out.println("Compiles");
object1.dostuff();
}
public void keepdoingstuff()
{
System.out.println("Doing Stuff...");
object1.keepdoingstuff();
}
}
答案 0 :(得分:11)
因为在Java中你声明一个包含引用值的变量;一个指针。
就像在做:
struct demo{
int anyvar;
struct demo *anyvar1;
};
java中的所有对象都是在堆上创建的,并且使用new
关键字显式创建它们。
public class Node
{
Node next;
String value;
public Node() { ... }
...
}
当next
对象被实例化时, value
和null
会自动初始化为Node
,并且会一直保持这种状态,直到为它们分配参考值。