Java 对象以及对象的引用
Aujourd’hui,j’étudie java の class and reference
-
—甩个图
- 先定义一个简单的类(模板):class Dog { int size; String name; }
- 创建对象(对象的实例化 ):
- Dog d=new Dog(); 这条语句包含了四个动作
- 1)右边的“ new Dog “,是以Dog类为模板,在堆空间里创建一个Dog类对象(也简称为Dog对象)。
- 2)末尾的()意味着,在对象创建后,立即调用Dog类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造函数(无参构造函数)
- 3)左边的“ Dog d ”创建了一个Dog类引用变量。Dog类引用,就是可以用来指向Dog对象的对象引用。
- 4)“=”操作符使对象引用指向刚创建的那个Dog对象(这里指的是 d )
- 将上面的语句可以拆分成2部分,有两个实体:一是对象引用变量,一是对象本身
- 1):Dog d; ( 语句1 )
- d是Dog对象声明的一个的引用变量(d不可能指向Cat类型的对象只能指向Dog对象类型),
- 但是 d 还没指向任何一个具体的对象 ,它的值是null。
- 引用变量可以指向某个对象,或者为null。
- 2):d=new Dog(); ( 语句2 )
- 执行了第二句后,一只新的狗做出来了,并被系在 d 这根绳上。我们抓住这根绳,就等于找到了那只狗 。
- 1):Dog d; ( 语句1 )
- ps 如果 再执行语句 Dog d1; 又做了一根绳,还没系上狗
- d1=d; 系上了。这里,发生了复制行为。但是对象本身并没有被复制,被复制的只是对象引用。结果是,d1也指向了d所指向的对象。两根绳系的是同一只狗狗汪。
- 如果再创建一个对象:d1 = new Dog(); 引用变量d1改指向第二个对象。
- Dog d=new Dog(); 这条语句包含了四个动作
- 为了形象地说明对象、引用及它们之间的关系,可以做一个比喻。对象好比是一只很大的气球,大到我们抓不住它。引用变量是一根绳, 可以用来系汽球。
- 结论
- (1)一个对象引用可以指向0个或1个对象(一根绳子可以不系汽球,也可以系一个汽球);
- (2)一个对象可以有N个引用指向它(可以有N条绳子系住一个汽球)。
- 自我梳理心得
- 所有对象都是引用类型,都是堆里放实体,栈里放一堆钩子
- 栗子:比如我把对象object传给方法a,a又传给方法b,b又给c,c又给d,这就5个引用了,但是实体就一个,其中一个地方改动实体,所有都有影响