00:01
好了同学们,那咱们接下来呢,这样啊,咱们这个不能一直去讲这个作业啊,那再往下这个作业呢,我在今天下午吧看看,抽点时间把它说一说啊,因为这两个题还是比较简单的啊,一个是封装学生类,一个是封装这个银行账户类是不是哎,模拟模拟这个账户取款这个方法,一个是取款,一个是存款,就是取款的话,其实就把这个余额减去就行了,存款的话就把余额加上去就完事了啊。这个题目咱们今天下午再说吧,啊,那咱们得学东新东西对不对,哎,我们学新东西啊,学完之后我们再来看。来这个我先关了啊。然后这个呢,我也先退了好,呃,那么这个窗口呢。咱们。切换到这里啊,叫CHAPTER11下面。那么上节课我们是学到哪里了呢?上节课我们是学到了。累。对不对啊,这个this这一块呢,我们写了几个例子呢,哎,我这样啊。
01:05
我把class先删了。好。This一共写了两个例子啊,在这里第一个例子呢,最主要是对this的一个理解。这个this到底是什么?是吧,我们说了this啊,它是个全部小写的关键字。他在内存当中是怎样的呢?我们昨天呢,好像应该是给大家画了一个图。对吧,这个呢,其实是在堆内存对象当中。对,内存的对象里边都有一个Z,保存自己的内存地址指向自己。C。这个引用中保存这个内存地址和this里边保存的是一样的。英语单词this翻译过来,翻译过来什么意思?就是这个。这个对不对,That是那个。在英语中this是这个对不对,哎,This这个啊,所以this呢,代表其实就是我们这个,呃,在语言当中就指的是当前的一个对象。
02:07
那么最主要的一个东西是什么呢?是this,它可以用在哪里?它可以用在实例方法当中,它不能使用在什么呀,静态方法中。为什么不能使用在静态方法里面呢?因为静态方法它的调用啊。是采用什么呀,类名去调这个方法。那this呢?在这个大括号当中,它代表的是当前对象,你如果采用类名去调用这个方法的话,那当前对象是不存在的。那当前对象不存在,那自然这个大块里边就没有this喽,This表示当前对象。那么这个shopping方法是可以的,我说了这个客户啊,顾客呀,可能是什么呀,可能是张三,也可能是李四,如果是张三shopping的话,那这个this就是张三。如果李四调这个shopping方法的话,那这个this其实就是说的李四,所以this是当前对象。
03:06
那这个例子最主要是给大家说了,This能使用在实例方法中,但不能使用在静态方法当中。那么紧接着呢,我们又写了第二个例子,是不是啊,这个图也关掉了啊,第二个例子是什么呢?是,我在这里出了这样一个考题。这个题目呢,大家再思考一下。这个I变量为什么在这里访问不了?原因是什么呢?这个I啊,它是个实例变量。大家都知道实例变量它必须得先扭对象才能去访问I。是不是,那main方法是一个静态方法,静态方法调用它不需要创建对象。它是通过这个类名去调用的,这个main方法在这个大括号当中啊,它是没有this的。没有,那自然是访问不了I。对吧,你没有办法直接去访问这个I啊。
04:01
所以这叫静态的上下文。静态方法,大括号被称为静态的上下文。说无法从静态上下文中引用非静态变量I。你I变量是非静态的。那如果说你这个变量是静态的,我在这个方法里边能不能访问可以。因为你静态变量它是在方法区中存储。他不需要对象。直接采用类名去访问就可以了,而你静态方法执行过程当中去访问这个K是没问题的。K可以。但你访问I不行,为什么访问I不行?因为你这个I是实例变量。那么这一块呢,我们可以采用new的方式,我们一个this test02就是当前这个类的对象,我们可以创建一个。创建完之后,我们通过TT去访问I,这是可以的,但你不能直接访问I。你直接访问I,那就出问题了,因为实力的不能在静态上下文中访问。
05:01
那么实际上这个东西啊,和我们之前所讲的一个知识点冲突了,之前我在讲。变量作用域的时候,我给大家怎么说的,我说除了大括号就不认识了,这个变量啊,是在这个大括号里边定义的,按数在这个大括号里边是可以访问的,对吧?哎,但是要注意了。我们并不是所有的都适合这个规则,所以我之前所说的那句话呀,可能只能适用于什么呀,大部分情况下。像这种I在这里访问不了对吧,那访问不了的原因是什么?哎,是因为啊有另外的一个机制啊,因为它是实例变量,需要有对象的存在才能访问。而你的静态方法在执行过程当中啊,哎,我们没有this,所以这个I就访问不了,但如果说你想法访问I,那你可以手动在这new对象,New完对象,你通过TT这个引用去访问I,那谁也管不了,谁也拦不住,对不对,哎,这个是可以的。啊,是可以的。行了,那关于昨天的这个内容呢,我也就不再说再往下回顾了啊,但是有一件事儿我得说明白各位啊,哪一件事呢?大家还记不记得我们昨天啊,把这三块内存空间我们都给它折腾完了,什么意思?就是方法区里边存什么?堆里边存什么,站里边存什么,大家还记不记得这几个,大家一定要知道方法区里边存什么。
06:17
类加载时,初始化叫静态变量。对吧,占里面存什么方法执行调方法,方法一调就压占方法执行过程当中的局部变量在什么呀?在占内存中存储。那么我们还有一个堆对吧,这个堆里边是new对象,对象里边我们叫什么叫属性,属性叫什么?成员变量,成员变量中的什么呀?实例变量。啊,实例变量,那么大家要注意啊,像这两个这个和这个这两个合起来,我们叫什么叫成员变量。注意啊,叫成员变量。那么Java圆当中实际上变量只有两种,一种变量叫什么呢?叫做局部,还有一种变量叫什么呀?叫成员,但成员又分为两个,一个成员是静态的成员,一个成员是实力的成员。
07:08
明白吗?但是实例成员是在堆里中堆中存储,静态成员是在我们的方法居中存储。这个大家要清楚。啊,只有你对内存这块了解的很透彻,那么我们才能够以后很好的调试程序,应付这个程序,在程序没有运行之前,我们就可以知道这个程序的执行结果。啊,知道这个成绩的结果。Java中的三大变量啊,Java中的三大变量,你要知道他们都是谁,在哪里存储,这个叫方法区,方法区这个叫堆,对吧,这个叫占。来这再写上,这叫占,那么这个口呢,我们给它给它给它抹掉,要知道它的初始化,实际个位静态变量在什么时候初始化。
08:04
类加载时初始化分配空间对不对?那局部变量在什么时候开辟出来方法执行过程中。开辟空间啊,实例变量在什么时候开辟,构造方法执行时啊,或者叫对象创建时,对吧?哎,分配空间,那你要知道每一个变量它在哪里存储,分别是在哪一个时间点上给它创建出来的,哪个时间点上给他初始化出来的,这个大家都要清楚,只有你清楚这个以后才不会麻烦啊,如果不清楚这个,那就麻烦了啊,就麻烦了后期你可能就越学越懵,越学越懵啊,这个阶段是一个入门阶段,入门阶段过去之后,后面你会发现一帆风顺,后边没什么东西,非常之简单啊,都是别人写好的东西,现在呢,主要是在一个原理的级别上啊,我们对这个原理要有深入的一个学习啊。
09:04
还是要建议大家多画内存图啊,多画内存图我们才会学的更深入更好一些,我们出去之后才能像工作两年工作三年的一个程序员,这样的话,我们可能薪资可能会拿的更高一些,15K对吧,20K就是只要你学的好,那是没有任何问题的啊。好了,那这个呢,我们就先关了啊,回顾到这儿吧。
我来说两句