JFrame frame1 = new JFrame();
如果我通过做声明 frame1JFrame frame1;
是JFrame
类型Object
还是其他?做什么JFrame
,为什么我不能省略它?
JFrame frame1 = new JFrame();
如果我通过做声明 frame1JFrame frame1;
是JFrame
类型Object
还是其他?做什么JFrame
,为什么我不能省略它?
是的,它定义了frame1
变量的类型。Java 是一种强类型语言,所有变量都必须定义类型。许多 Java 类扩展了其他类或实现了其他接口,并且变量通常可以具有多种类型。虽然JFrame
是这里的“自然”选择,但您也可以编写,例如:
Component frame1 = new JFrame();
因为JFrame
扩展Component
。因此,语言坚持指定类型,即使在同一行初始化的地方隐含了一个自然“明显”的类型。
JFrame frame1 = new JFrame();
这是一个变量声明语句。它创建一个名为frame1
type的变量(引用) JFrame
,指向一个新的 type 对象JFrame
。
JFrame frame1;
告诉引用frame1
是 type JFrame
。
所以当instantiating/assigning
它检查类型时。
在您的示例中,JFrame
既是变量的类型,也是变量中对象的类型。当您编写时JFrame frame1
,您正在创建一个名为的变量frame1
,其中包含一个JFrame
; 您放入该变量的实际对象可以是一个JFrame
或任何子JFrame
类。当您编写 时new JFrame()
,您正在创建一个新类型的对象JFrame
以放入frame1
变量中。
声明如下:
JFrame frame1;
表示 frame1 是 JFrame 类型的引用,它不会创建任何对象
JFrame frame1 = new JFrame();
创建一个由 frame1 引用的 JFrame 类型的新对象。
如下图所示:
基本上,您已通过以下方式声明这frame1
是对象/类JFrame
的类型:
JFrame frame1;
并通过
JFrame frame1 = new JFrame();
意味着您已经实例化了frame1
类型为 Object/class的声明JFrame
你的代码
JFrame frame1 = new JFrame();
实际上是对象声明和初始化,这是面向对象编程概念中的基本思想。
在 OOP 中,对象声明和初始化是一个 2 步过程。
Step 1:Object declarion -----> JFrame frame;
实际上,该特定类(jFrame)类型的参考变量(框架)正在贴花,但没有分配任何内容,因此默认情况下它具有空值。
Step2:Object initialization--> frame=new Jframe();
这里发生了实际对象声明,这是由 new 关键字动态完成的,这里调用了构造函数 JFrame()。因此,对象内存引用被分配给“框架”引用变量。
所以如果你贴花
JFrame frame;
在你初始化它之前什么都不会发生
frame=new Jframe();