黑马程序员技术交流社区
标题:
有关于类的实例化的疑问
[打印本页]
作者:
杨翔
时间:
2013-1-9 01:05
标题:
有关于类的实例化的疑问
本帖最后由 杨翔 于 2013-1-15 22:24 编辑
这个算是个疑问吧,我有点转不过弯来,是视频中异常练习的一小部分,在
Teacher类中构造函数初始化的时候new了hp作为Computer的对象,问题不在这边
,问题是主函数中,我new了Teacher对象的时候,hp这个对象就产生了,当我再
次new一个Teacher对象时,堆内存中会再次new一个hp这个对象?到这边有点想
不明白了,如果我想初始化老师的时候初始化不同的电脑该怎么做呢?
class Computer
{
public void run()
{
System.out.print("computer run");
}
}
class Teacher
{
private String name;
private Computer hp;
Teacher(String name)
{
this.name = name;
hp = new Computer();
}
}
class ExceptionTest
{
public static void main(String[] args)
{
Teacher i = new Teacher("laoshi");
}
}
复制代码
作者:
罗利华
时间:
2013-1-9 01:27
本帖最后由 修心者 于 2013-1-9 01:35 编辑
当你第一次创建Teacher对象时,
会在栈空间创建一个引用变量指向在堆空间中的Teacher对象.
在Teacher对象中也有一个引用变量,它指向的是Computer对象。
第二次创建Teacher对象,它也会按照这样步骤走一遍。
你可以做这样的实验:
class Computer {
Computer() {
System.out.println("computer...");
}
}
class Teacher {
private String name;
private Computer hp;
Teacher(String name) {
this.name = name;
hp = new Computer();
}
}
class ExceptionTest {
public static void main(String[] args) {
Teacher t1 = new Teacher("laoshi");
Teacher t2 = new Teacher("laoshi");
}
}
打印结果:
computer...
computer...
说明Computer被new了两次。即有了两个Computer对象。
作者:
心弦上的景致
时间:
2013-1-9 02:03
这个和寄存器的工作原理挂钩 看代码你解决不了问题
作者:
黄锦成
时间:
2013-1-9 16:26
这个你可以在写个老师的构造函数Teacher(String name,Computer computer){....},同时电脑那里的构造函数要有多个,否则,电脑还是一样的,没什么变化
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2