在java中,你不能这样做
Object x = y;
Object y = null;
但是你可以这样做:
class A { B bref = null; }
class B {}
为什么会这样? 谁能解释一下,在第二种情况下,编译器如何知道
B
?
在第一个区块:
Object x = y;
Object y = null;
您首先声明
x
等于 y
,只有当且仅当 y
已声明时才会编译。Object y
声明为 null
,只有在之前未声明 y
时才会编译。
因此,你的第一个语句永远无法编译并且没有任何意义。
现在进入第二个区块:
class A { B bref = null; }
class B {}
在这里,您创建一个包私有类
A
,它具有类 B
的变量作为包私有成员(无论 B
是什么,只要 B
存在于源文件中),即初始化时null
。该类还有一个公共构造函数,它不执行任何重要操作。B
,它只有公共构造函数。
您在代码中无需执行任何其他操作,所有内容都是完全有效的 Java。
您可以做您正在做的事情,因为它都是有效的 Java 语法。
此外,编译器知道
B
,因为它首先编译你的文件,因此所有类都存在并且已知。
在第一种情况下,您没有在 x 之前声明引用 y。因此,编译器不知道 y 代表什么。在第二种情况下,您有一个类型 B 的引用为 null,所以没问题。如果您不设置 null,它仍然会是相同的,因为实例成员对象默认设置为 null。这是一个构图示例。