您能解释一下,这些实例与实例化对象的方式有何不同?

时间:2019-02-17 13:48:39

标签: java

我正在查看我的计算机科学老师提供的模板,我可以看到他以两种不同的方式将一个对象实例化为一个类的对象。

第一种方式是这样的:

他首先声明了ProfileView类的对象

//在Profileview中声明一个对象

 private ProfileView profileView;

//Constructor of UserMainView

 public UserMainView() {
    initWidget(ourUiBinder.createAndBindUi(this));

    //Instantiate ProfileView objektet
    profileView = new ProfileView();

这是他做到的第二种方式...

//OnModuleLoad - method 

public void onModuleLoad() {

   //Instantiate an object at ContentPanel "content"  / The screen
    ContentPanel content = new ContentPanel();

所以我想知道的是,这两种方法之间的确切区别是什么?仅声明一个对象和实例化一个对象有什么确切的区别?这对我来说真的很无趣,因为我将在本学期末面临口头考试。预先感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

实例化的方式没有什么不同。两者都使用Id TeamId UserId UniqueId 43 504 722 0 44 504 727 0 45 601 300 1 46 602 722 0 47 602 727 0 48 605 300 1 49 777 300 2 50 777 301 2 51 788 400 3 52 789 400 3 53 100 727 4 关键字来调用构造函数,并且两个构造函数都是无参数的:

new

和:

new ProfileView()

不同之处在于变量作用域,其中包含对这些对象的引用。当您在方法或代码块中执行此操作时:

new ContentPanel()

您正在该方法或代码块中创建名为ContentPanel content; 的{​​{1}}类型的新局部变量。该变量将仅存在于该范围内。一旦方法或代码块结束,变量就消失了。它引用的对象可能会超出该范围,具体取决于使用方式。但是变量 content仅存在于该范围内。

(重要说明:变量和它们引用的内存对象是两个截然不同的事物。)

但是,当您在类级别声明变量时:

ContentPanel

然后该变量现在是类级别的成员。该类上的任何实例方法现在都可以访问相同的变量。

答案 1 :(得分:2)

这是声明

ContentPanel content;

此后,对象content不引用任何内容。
如果尝试在初始化该对象之前使用该对象,则编译器将通过以下消息停止您
“变量内容可能尚未初始化”
您使用此声明只是为了通知编译器对象类型content将是变量。

您以后可以使用以下方法初始化

content = new ContentPanel();

现在content引用了一个新创建的ContentPanel对象。

所有这些都可以在一行中完成:

ContentPanel content = new ContentPanel();

上面的代码行称为ContentPanel类的实例
因为它创建了该类的实例(或对象)。

您可以在此处找到更多信息: Creating Objects

答案 2 :(得分:2)

让我们将您的问题分解为不同的元素。

实例

每次执行一个new Whatever(...)表达式时,都会创建一个完全属于Whatever类的新的 instance 。该实例位于称为 heap 的内存区域中。只要您需要,它就可以在那里生存。无论您将引用的引用存储到任何 field variable 中的频率如何,该实例始终是同一实例。

new ProfileView()

创建一个新的ProfileView,无论是将其存储到变量,字段中还是在更复杂的表达式中使用它。

字段

field 是构成其状态的实例(如果是静态字段,则为类)的元素。在private ProfileView profileView;中声明一个字段会创建一个可以存储对ProfileView的引用的位置,并且不会创建任何ProfileView实例。最初,一个字段包含null。您可以将声明字段与分配初始值结合使用,例如private ProfileView profileView = new ProfileView();,在本例中为新创建的ProfileView实例。

变量

变量是一个您可以在其中存储实例引用的地方,以供在一种当前执行的方法内使用。声明变量不会创建任何实例。变量的初始值是不确定的,如果您尝试读取未初始化的变量的值,则编译器会提示错误。

当程序遇到其声明时,变量“开始存在”,在声明该变量的块末尾(大括号中),“停止存在”。这并不能说明变量可能碰到的任何实例的存在。