00:00
嗯,行了,同学们,那么接下来咱们就接着往下看吧,啊,接着往下看。我们今天呢,呃,到这为止吧,算是把这个static就算说完了。那么这个this到底是什么呢?哎,我在这里啊,给大家开个头啊,我们看看this到底是什么好吧,This test01啊。来我还是呢,把这个重点我给大家总结到这个。哎,整个这个案例的上面啊,This。来,我们一个一个看啊,首先第一点吧,This是一个关键字啊,全部小写,这是我向大家传达的第一个信息啊,它是一个关键字啊,全部小写。那么第二点是什么呢?是什么?内存方面是怎样的?我觉得这个呢,有必要给大家画一画啊,给大家画一下。
01:03
来public class this test01这里呢,我们加一个public static void。好,那么接下来在这里呢,我们来一个什么呢?来一个。顾客类吧,啊,顾客类class,我们叫customer。顾客啊,顾客呢,有一个什么呀,有一个属性啊,这个属性呢,呃,叫做name。啊,然后接下来呢,呃,给构造方法吧。比如说我给一个无参的过道方法,然后再给一个有参数的构造方法。嗯。这个角叫S,然后name呢,附上什么呀?S啊,Name附上S。
02:01
好了,那这是属性,这是两个构造方法,接下来呢,我们在这儿呢,提供一个什么呢?这个顾客购物的方法啊,购物的方法public。VO啊,购物。然后在这里我输出什么system.out.print打印输入什么呀,输出name是吧,哎,正在购物。啊,正在购物。好了,大家看这个方法呀,没有带static,所以它是个实例方法是不是。对吧,那这个变量呢,它现在呢,没有加static,所以它是个什么变量,叫做实例变量,是不是实例变量。啊,实例变量,那么接下来呢,我在这儿干什么呢?这个类应该能看懂吧,先把这个类看明白啊,这是一个顾客类。类当中有一个属性是string类型,Name有两个构造方法,一个无餐,一个有餐,然后有一个购物的方法叫shopping。
03:01
那么我们这个实例方法要想调用的,我们必须得先把对象创建出来,是不是才能调这个方法呀。所以这个时候我们把对象创建一下customer c new,一个customer new的时候呢,这边我就写上一个,比如说张三吧,那我调的构造方法是哪个,构造方法是这个。当我调这个构造方法,张三付给SS,付给name。是不是啊给name,然后呢,接下来我们就看这个程序啊,来画一个什么呀,内存图啊,比如这叫C1,我再new一个吧,C2拗一个什么呀,Customer然后接下来叫李四,那基于现在这个呢,我画一个内存图出来,各位啊。好。那么这个内存图这块呢,咱们这样还是老规矩吧。老规矩啊,这个是我们脑袋里面想象的这个Java虚拟机GM。
04:00
然后呢,我们接下来啊,在这块呢,有一个叫方法区的东西。还有一个叫什么呀,叫做堆。啊,然后还有一个什么叫站。是不是,哎,那么这块呢,我们分别写上啊,这叫方法区啊,然后呢,这个叫什么呀,叫做堆啊,然后呢,这个呢叫做站啊站。来我们这块呢,给它删一下啊,删一下首先呢,我们把它保存一下啊,这个是关于this关键字啊,This关键字。那么接下来呢,首先第一步会进行类加载,它会加载,它会加载,它会加载,都会加载进来,那我就简单在这画一画啊,因为没有静态变量,所以这就很简单了,它点class是不是,然后呢,还有谁啊,就string.class呗,是不是,还有谁呀,customer.class是不是?哎,都装载进来,这是代码片段啊,那这块呢,如果有什么静态变量的话,诶,我们就初始化出来了是不是?哎,但现在呢,是没有的啊,那么接下来这个程序啊,会执行这个问方法,问方法执行呢,肯定是压站呗,所以这个时候呢,我们在这个地方啊,会分配我们的空间是不是,哎,这个其实就是那个焖方法。
05:15
站针,那么这个闷方法战针呢,接下来是应该是先执行我们这里的第一行程序等号,右边先执行第二的构导方法,是我们这个构造方法,然后把张三呢付给了S对吧,然后S付给了name,这个name其实现在是叫张三对不对。那就意味着我们在堆内存当中有一个对象,这个对象叫customer类型的对象啊,叫customer对吧类型的对象啊。类型的对象,这个类型的对象啊,它里边有一个什么呀,有一个name明白吧?啊,有一个name啊。来,这是string类型的name string类型的name啊变量,那么这个string类型name的变量,它现在是是什么呢?是张三。
06:05
啊,是张三。那么接下来啊,我们这样啊。我把他挪一下。小一点啊。好,那整体呢,我再把它往左边挪一下啊。哎,那么接下来这个对象创建完之后呢,它这个对象的内存地址就给了C,大家注意听啊,这个你要能听明白,那么你今天上午的实例方法就应该能听懂。来我们这块呢,应该是有一个叫什么呀,Customer c给你一个艰巨的任务,你必须听明白啊,必须听明白,来这块呢,是我们的C1对不对。然后呢,这个变量当中啊,保存了一个内存地址,这个内存地址是0X2356,然后呢,这个内存地址指向了谁啊啊指向了我们的这个对象,那么在这里呢,我不知道大家有没有理解这么一件事,就是说。
07:05
C1这个C1变量当中保存的这个东西,这个到底是什么?实际上是这个对象它的内存地址啊,我不知道大家有没有理解这个东西啊,就是0X2356啊,实际上是我们的这个哎对象的在堆内存当中的一个内存地址,那么这个this到底是谁呢?来,各位啊,回到我们正题上,This到底是什么?在内存方面是怎样的?This啊,实际上是一个变量,各位。它是一个引用。啊,这个引用啊,保存了。内存地址指向自身。那有老师这个到底是个啥玩意儿。来。看好了啊,这个this啊,在堆内存的对象内部。有个东西叫this,并且this这个变量,或者说这个引用,它里面保存了一个内存地址,指向自身。
08:05
那这句话是什么意思呢?就表示啊this啊,它保存了一个内存地址也是多少啊,0X23560X2356。啊,然后呢,我们从这连一下啊,连连连到这儿吧,连到这儿啊来点一下这个,来我们画个箭头,各位啊,画个箭头。这个this到底在哪?就在这儿啊,来我这里说明一下各位啊。一个对象一个this,这是第一点。啊,第二个this是一个变量。是一个引用。啊。它既然是引用,大家之前有没有听我说过,引用就是变量,变量里边保存了一个内存地址,就指向了它C是一个引用啊。
09:03
C是不是一个引用。是吧?C是个引用哈,是一个变量,是一个引用啊保存。那保存内存,保存当前对象的内存地址。指向自身。所以,所以严格意义上来说,This代表的就是当前对象好这几个字。This存储在哪?存储在堆内存当中?对象的内部。This存储在多内存当中对象的内部,This在这个位置上。注意啊,这个Z里边它也是保存内存地址,而这个内存地址就是我当前对象的内存地址。
10:07
这就是这意思。啊,然后呢,大家要注意啊,这个this啊和这个C啊,它实际上是一样的。因为这个变量当中保存的内存地址指向这个对象,我这个this里面保存的内存地址怎么着指向自己。对吧。所以从一定意义上来说,C和是一样的。啊,就是从内存图上来看。C和Z是一样的。对吧,那么接下来这个程序会继续往下再扭一个对象,只不过叫李四,然后C2去指向它,那么这个时候就相当于啊,我们。有一个什么呀,对象。
11:01
啊,有一个对象拿过来。放到这吧,啊是这个意思,各位啊,是这个意思。啊,然后呢,这个位置呢,就是李四了。他创建出了一个新的对象。叫李四,这个对象的内存地址赋给了一个变量,这个变量叫customer CR。然后这个变量当中保存的这个内存地址是什么呢?是。0X1111,那么这个就是那个C2变量,然后0X11这块指向呢,其实就是我们哎堆内存当中的这个对象。然后呢,我们这个Z,它里边保存的也是什么呀,叫0X1111啊,我不知道大家理解不理解这个意思啊,我来给他拿过来。
12:08
放哪儿呢?放这儿。放。就是这个this,各位啊,我在这里画一下,就这个this,还有这个是一个对象一份,就我这个对象里边有个this,我这个对象也有this,这个this是存在堆存的对象的里面,并且this是个变量,This是个关键字,This是个引用,这个引用当中保存了内存地址指向自身。指向自身。啊,这就是this。那从内存图上来看,C2和Z是一样的,对吧?哎,从什么呀,内存图上来看C2。和谁呀?哎,和this是一样的。
13:02
啊,和this是一样的。那所以this从内存图上来看,就是这样的一个情况,各位啊,就是这样一个情况。
我来说两句