在java中转发引用类型

时间:2014-02-21 16:26:18

标签: java compiler-construction typechecking

在java中,你不能这样做

Object x = y;
Object y = null;

但你可以这样做:

class A { B bref = null; }
class B {}

为什么会这样? 在第二种情况下,任何人都可以解释编译器如何了解B

2 个答案:

答案 0 :(得分:1)

在第一个区块:

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,因为它首先编译您的文件,因此所有类都存在且已知。

答案 1 :(得分:-1)

在第一种情况下,您没有在x之前声明引用y。因此,编译器不知道y代表什么。在第二种情况下,你有一个类型B的引用为null,所以它没问题。如果你没有放置null,它仍然是相同的,因为实例成员对象默认设置为null。这是一个组合的例子。