1.什么是对象?
“万物皆对象”, 此乃JAVA于设计起始阶段的理念当中的一个, 所谓“对象”, 依照通俗的表述而言便是“某一个类(class)的一个实例()”, 通常是处于堆里存储着的。
2.什么是引用?
在JAVA里的引用, 跟C语言当中的指针相同, 都是操控对象的标识符, 是依据特殊语法的间接表示, 一般存于速度更快的堆栈之中。
3.代码分析:
定义类:
class {
Int age
name
创建类对象:
lisi = new ();
下面分析这句创建对象的语句,总共包含4个动作:
(1)处于右边位置的那个“new () ”, 它是以类作为模板, 进而去创建一个类的对象, 也就是那个对象。
(2)表示在末尾的(), 是当对象被创建之后, 会马上调用类的构造函数(不管是自定义的还是系统默认的), 进而对该对象实施初始化。
(3)左边的那个被称作“lisi”的, 创建了一个类引用变量, 这个变量是用来指向对象的, 而所指对象又具有对象引用。
(4)“=”意味着一个传递地址的环节, 也就是把右边创建那儿新生成的对象“new ()”的地址传送到左边的引用变量“lisi”, 进而让“引用”指向了“对象”。
下面将创建对象的语句拆分成更清晰的两部分:
lisi;//引用变量部分
lisi = new (); //对象部分
对象是在堆内存里创建的, 它没有名字, 没办法直接去访问以及表示, 因此要用引用变量来进行间接的访问还有表示。
延伸讨论:
情况一:
若代码仅执行了开头部分, 鉴于未针对任一对象进行指向, 如此一来, 引用变量 lisi 便会呈现 null 值。
情况二:
再创建一个引用变量:
= lisi ;
第二句表明, 将引用lisi里所存有的那个对象的地址, 复制给予引用, 于是引用也指向了该对象。
情况三:
在创建一个新的()变量
= ();
表示引用,指向了新的变量。
综上:
(1)一个对象引用可以指向0个或1个对象;
(2)一个对象可以有N个引用指向它。
情况四:
lisi = ;
这时, lisi并非再指向初始的那个对象, 偏偏却如同那样也指向了第二个被创建出来的对象。如此一来, 这时头一个被创建的对象就会被归入垃圾回收所要处理的对象范畴。对象跟引用之间的关系就会持续一直到对象被回收。
情况五:
如果创建的对象没有引用变量也是合法的。
调用.out.方法将空字符串打印出来, 在这个操作完成之后, 该对象就会被当作可回收对象, 被列入到回收序列行列。
延伸思考:
Java当中全都是依据值来传递参数, 在参数如果是对象这个情形下, 那么就类似引用的那种传递方式。
class Test
{ int i,j;
void (Test a)
{ Test b = new Test();
b.i = 1;
b.j = 2;
a = b;
void (Test a )
{ a.i = 1;
a.j = 2;
void main( argv)
{ Test t= new Test();
t.i = 5;
t.j = 6;
输出,(“t点i等于”加上t的i, “t点j等于”加上t的j);这里要注意是5, 6!
t.(t);
.out.(把"t.i="与t.i连接起来, 再把"t.j="与t.j连接起来);//5,6,a和t都指向了一个对象, 而在中s又指向了另一个对象, 所以对象t不变!
t.(t);
输出("t.i ="加上t.i加上" t.j="加上t.j);//1,2。
有关 JAVA 对象引用, 还涉及对象赋值, 参考自csdn官方网站。