理解java中的"new"关键字

Rol*_*all 2 java keyword

我想知道是否有人确切知道代码行发生时会发生什么:

class Class{}

class Math extends Class{}

class UseClasses{
public static void main (String[]args)

{

   new Math();  //Line 8
   (Class)new Math();//     Line 9

}
Run Code Online (Sandbox Code Playgroud)

我完全理解"new keyword"在堆内存中充当对象实例创建者.但是,在前面的代码中,您可以看到第9行对此关键字(新)的使用不正常.第8行没关系并且编译得很好.但是第9行需要将内容分配给其他一些引用.因此,这意味着每次存在强制转换操作数时,在这种情况下(Class)new Math,将实例化新的引用(强调引用而不是对象).

它以这种方式工作吗?如果没有,你能解释一下为什么它在第8行编译得很好并且它在第9行中出错了吗?(显然由于铸造功能不在那里,但为什么不呢?)

And*_*nov 6

由于第9行没有引用变量,编译器不认为此语句有效.

如果您具有对象本身的"更具体"类型的引用变量,则需要强制转换.例如,当您执行上传时,您不需要它:

Class obj = new Math();
Run Code Online (Sandbox Code Playgroud)

当你执行向下转换时,你需要一个明确的演员:

Class obj = new Math();
Math math = (Math) obj;
Run Code Online (Sandbox Code Playgroud)