我正在查看我的计算机科学老师提供的模板,我可以看到他以两种不同的方式将一个对象实例化为一个类的对象。
第一种方式是这样的:
他首先声明了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();
所以我想知道的是,这两种方法之间的确切区别是什么?仅声明一个对象和实例化一个对象有什么确切的区别?这对我来说真的很无趣,因为我将在本学期末面临口头考试。预先感谢您的帮助。
答案 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
实例。
变量是一个您可以在其中存储实例引用的地方,以供在一种当前执行的方法内使用。声明变量不会创建任何实例。变量的初始值是不确定的,如果您尝试读取未初始化的变量的值,则编译器会提示错误。
当程序遇到其声明时,变量“开始存在”,在声明该变量的块末尾(大括号中),“停止存在”。这并不能说明变量可能碰到的任何实例的存在。