00:01
那么上节课呢,我们最主要呢,是把我们的一个内存这块呢,给大家说了一下,那什么是对象,大家要注意,通过new,我们在堆当中开辟的这个空间,我们叫。那么这个对象啊,它在堆里边,它是有内存地址的,他把这个内存地址放给哎,赋值给谁啊,我们一个变量,这个变量里边保存的是一个内存地址,它和I等于100是一样的。只不过int I等于100的话,就表示这个I变量里边保存的是一个数值100。如果是student SR等于new的话,就相当于S2里边保存的它不是一个数字,SR这个变量里面保存的是一个对象的内存地址,大家注意。在Java语言中,Java程序员是没有办法直接操作对内存的。因为我们没有指针,你明白吗?第一天的时候我就跟大家说了,在Java语言当中啊,他没屏蔽了指针的指针的概念,我们Java程序是没有权利直接去操控我们堆内存当中的这个内存空间是操作不了的。
01:07
我们只能通过这样的一个引用去访问它。比如说我们要访问这个number,那就得加上一点。S2.number的话,访问的就不是这个了,访问的是下面这个number,为什么我们S2点能访问它,因为S2里面这个变量里面保存了一个对象的内存地址,通过这个内存地址,它自动虚拟机会址,通过这个址到我们这个空间上,然后从这个空间上再去。找name,找age,明白我的意思吧。通过一个类是可以创建出一个对象,两个对象对吧,多个对象,一个对象一份。哎,一份实例变量,大家注意啊,局部变量和实例变量存储的位置不一样,大家记住啊,实例变量存储在堆内存对象内部,局部变量存储在占内存的方法活动区域当中。
02:02
一个方法调用会压,这个方法当中有局部变量,应该放在这里,图不能随便画,也不能乱画,各位啊,也不能画。好了,那么这个呢,就是我们上节课讲的一个,呃。对象的创建和使用这一块,那么使用的是通过引用点的方式去访问啊,你记住这个语法就行了,引用点的方式去访问啊,引用点的方式啊。那么接下来呢,我们来看看这个能不能进行中文编程,比如说我们这里呢,写一个学生,这就是一个类。哎呀。学生点Java。那么这块呢,我们就写写上是吧,写一个类名public,然后class,我们这个类名叫学生。然后呢,学生有什么呀,有学号呗,是不是有姓名呗,行吧,那这样的话,接下来我们再去写一个学生测试。
03:06
啊,比如学生测试。我们在这个Java文件里边,我们写上去public class,我们叫做学生测试public static voidman主方法加上去,然后接下来我们在这儿写上学生张三,等于new,一个学生拗完之后呢,我们张三的学号。我们能不能访问一下啊c.out点打印张三点什么呀?哎,学号叫学号啊,然后呢,c.out点打印我们输出什么呀?叫张三的姓名,我们叫张三的姓名。对吧,你点后面呢,这个点前面是一个变量名,这就是变量名啊。
04:02
张三吗?张三的学号?这不是学号的一个变量吗?这不姓名变量吗?所以张三的姓名对吧,这个学号就是零呗,默认值这个呢,默认值什么呀?哎,那所以这个时候呢,我们在这里啊,再编译一下Java运行,叫做学生测试走。好,大家看一个是零一个是那那么这个时候我能不能给他改呢?比如说张三的学号,我们给它设置成1111,然后呢,张三的姓名我们给他设置成张三。那么这个时候呢,我们system.out点再打印输出我们叫张三的什么学号,然后呢,我们再输出我们system.out点打印输出叫做张三的哎,姓名是不是,那这个时候我们再去编译这个程序,再去运行,大家看是不是就是哎1111和张三呀。
05:01
是不是,哎,这个大家没有什么问题吧。这个答案有问题吗?就只不过标识符我们采用中文的方式。和刚才程序是一样的。和刚才的程序一样。只不过标识符采用了。中文。标识符可以有中文。对吧。啊。这个大家有没有疑问啊?各位,这个没有疑问吧?嗯,掉线了。
06:03
没掉线。行好嘞好嘞,好嘞。行,那咱们接着再往下看啊,就是说。我们今天啊,也不再准备讲新的东西了。我呢去写一个程序,然后呢,大家呢,去画一下内存图好吧。我觉得这个还是比较重要的啊。我去写一点程序,然后大家一下内存图。啊,内存图。呃。咱们简单点啊,不要那么复杂,不要那么复杂。学生可以调用学生测试吗?学生可以调用学生测试,你要怎么调?学生。调用学生测试。
07:01
你怎么调啊,调谁呀?五中你想,你想调调什么?你想访问谁?这是问方法,这是程序入口。城区入口从这进来,谁去调谁呀?你想怎么调描述一下吴中?这只是个类名。要怎么调啊?学生测试里面都是new学生的。学生测试里面就是你就是准备怎么调,可以把测试里在学生里面输出一下,把测试里。在学生里边输出一下。哦。可以啊,没问题啊,可以可以,你你你不愿意写这个代码,可以没问题。啊,那咱们就把这个闷方法走一下,放到这个类里边行不行,没问题啊,这只是一个类啊,可以呀。
08:03
可以。嗯。这不程序的入口吗?没问题,只不过你在这编译的时候,你编译谁就行了,Java c形式,Java编译,Java运行叫做学生版,因为你现在慢放在学生里边啊。问,方法不在学生里边对吧?你看可以没问题啊。把测试里在学里输出。可以,这不输出了吗?只要是类就可以有闷方法嘛,有闷方法程序就可以执行嘛。是不是啊?好了,那么这个呢,我就说到这儿啊,那么接下来呢,我去写一个程序,然后呢,大家呢去。呃,画一下它的内存图,画一下内存图。假如就叫user吧,User啊,用户很简单。
09:00
来。这是我们的一个系统用户这样的一个类,简单点啊,User类。啊,叫做用户类,每一个用户啊,他都有用户名和密码是不是啊,然后每个用户呢,他都有什么呀?哎,别的一些属性是不是,哎,我们public class user,那这个用户呢,我们有什么呢?有这个UD。用户名,嗯,有这个。嗯,生日生日别给了密码吧,简单点啊,用户的ID,呃,用户名。嗯,然后呢,还有什么呀,Password。这就叫username吧,啊,这是我们的属性是不是,然后接下来呢,我在这个位置上点右键啊,我再新建一个叫user test。
10:02
User test。然后呢,这个user test呢,我在写程序啊,这样写public class user test,然后呢,Publicman。在这呢,我干啥呢?User u1 new user啊,溜完之后呢,这个U一点什么呀?比如说ID对吧,等于111 UE点什么呀?U的name等于什么呀?哎,比如说张三是吧,哎,然后UE点什么呀?哎,Password,哎,然后呢123,然后呢,system.out.print line打印输出输出题啊。输入这个Ue.ID。对吧,哎,是不是用1.id,然后紧接着呢,我们用一点什么呀,哎,U name有一点什么呀,哎,Password是不是,哎,然后接下来。
11:04
我们把这个复制一下。拿过来放到这儿啊,U2来,U2的IDU2的I2的name u2的ID是222,假如说。然后呢,U name假如说是李四啊,密码是456对吧,然后U2U2U2啊访问一下。嗯,你就把这个程序的执行的内存图画一下就可以了。执行内存图画一下各位啊,今天我不准备再往上讲了啊,不准备再上讲了,嗯,我来总结一下今天的这个内容,各位啊,今天这个内容啊,主要是呃,一个面向对象的一个开端,这个这个地方主要讲解了什么呢?就是面向对象和面向过程的有什么区别,然后呢,又说了一下,我们面向对象中三个数据OADP是吧,还有一个什么呀,叫面对向三大特征,封装集成多肽啊,还有类,什么是类,什么是对象,今天理解的东西比较多一些,其实代码不多啊。
12:01
代码不多啊,然后呢,思考一下,加入软软件工程师是起到一个桥梁作用的,对不对,哎,然后呢,在这呢,就是类的定义了,怎么去定义一个类啊,定义行类之后呢,我们怎么去创建对象啊,哎,是不是怎么创建对象,创建完对象之后我们怎么去访问呀,哎,在这个过程当中呢,我们最主要啊就是这个图了。今天最最最重要的,咱不管别的你掌握不掌握啊,最起码这个图你必须得会画。啊,就是应该在堆里边啊,画对象是不是你就画到堆里边,哪个是局部变量,应该画到站里边就画到站里边。是不是,哎,然后呢,这是一个呃题目,各位啊,我写到这儿了,这样我再升级一下难度,各位啊,我再升级一下难度好吧。呃,这。难度较大啊。升级一个难度,你能画的画,不能画的就算了,好吧。不能画的。我觉得够呛啊,至少70%的同学不会画啊,至少70%不会画啊,我先今天啊,我先把这个题目我布置下去,你呢尝试着看一下好吧,尝试着看一下啊。
13:14
嗯,能画就画吧,不能画的话就算了啊,比如说我们给一个什么类呢,我们还是给一个user类。User啊,然后呢,我再给一个什么呢,这次我给一个什么叫address。家庭住址类。然后呢?我在这儿呢,有一个test。啊,这个呢,是个什么呢。嗯,你可以发给我,也可以发给助教啊,都可以。这个咱们会讲啊,我今天把这个布置下去,这是一个什么呀?住址类对不对啊,这是一个住址类。
14:00
啊,然后呢,住址有什么住址呢,有城市。呃,街道。邮编。这个是什么呢?是城市啊,然后呢,这个是什么呀,街道街道啊,然后呢,这个是什么呢?是邮编。邮编啊,这也很简单,这是三个属性呗,对吧?啊,一个地址,一个家庭住址,有三个属性,一个是城市,一个是街道,一个是邮编,那么接下来呢,我在这个位置上啊。我干什么呢?我有一个用户。这个用户呢,大家看好了啊,Public class user。啊,那这个UR有什么呀,有用户的ID。是不是,哎,有用户名啊,还有什么呀,有家庭住址,他这个用户的ID是什么呢?哎,我们int ID就行了,用户名是什么呢?是username是不是,哎,那么家庭住址是什么呢?Address address。
15:12
啊好,大家看看,先先看这个程序能不能理解。不是什么套娃啊,也不是啥套娃了,你能理解这个就能理解这个。各位,我问大家一个问题啊,这个是不是公司写的一个class?是不是引用数据类型?在program file Java jdk下边有一个,下边有个src源码,Java base下有个Java,有个language,还有一个叫什么呀,叫做string的东西,好大家看,再打开这个string,这个string这个类啊,实际上它是个class。你在这里看到了,是不是那么死顺,既然是一种类型。哎,大家看string既然是一种类型,那它可以写到这儿,只不过string是一种什么类型啊,String是一种引用数据类型是不是?那么int是一种什么数据类型啊?Int是一种什么呀?基本数据类型,那如果是address,这个address是我自己写的,这个address大家看我自己写的address是不是也是个class?
16:23
所以它是不是也是一种引用数据类型啊,所以address啊,哎,是一种什么呀?引用数据类型,好,我问大家一个问题,这是不是实例变量对不对?好那么我问你这个是不是实例变量,那么我再问你这个是不是实例变好实例变量都在哪存还记得吗?实例变量,实例变量都存储在哪里?好,回来看那个图啊,这个name age sex address是不是们是实例变量,实例变量都是在象对吧。
17:01
是不是?实例变量都存储在哪啊?实例变量都在堆内存的对象内部。是不是,哎,实例变量都在堆内存的对象内部。嗯。好了。别多想啊,我就怕你特殊啊,待特殊待遇啊特殊待遇。我还是那句话啊,能画你就画,不能画你就快点放弃啊。别挑战啊。觉得头疼的,你先把那个简单的画了,我们这个明天讲啊,这个题目是我明天的内容,我还没有讲,你可能做不出来。来各位user new user。输出,我这么问大家,我去访问UU是user吗?
18:03
大家看一看。U里边有ID,有U的name和ID点是不是,那u.ID对不对,是不是,哎,那么是不是可以去访问。有点啥?各位是不是有点内幕啊?好,那我问大家,那我既然可以这样访问,是不是就可以优点什么?这个ad啊。对吧,那我问大家一个问题,这个默认值是什么?还记得吗?是不是零。是不是int类型的默认值是零?这个string类型的默认值是啥?String是不是引用类型?这个address是不是也是一种引用类型?引用类型的默认值是不是都是none?所以这个是不是,那这个位置是不是啊。对吧,那接下来来了各位,u.ID等于啥?1111,这是这个人的I Du点的name等于啥?假如说字符串呗,大家知道为什么加双引号,等号右边为什么加双引号,因为username,它的数据类型你看清楚了,它是一个死string string是字符串,字符串都得加双引号,这是加文中规定的,所以这块呢,我们写上张三,那么还有一个问题,再往下u.ADDR怎么办?
19:23
等号这块应该怎么办?有。点ADR说的是不是就是u.ID等于通过这种方式给它赋值,u.u的name通过这种方式给它附上值了,对不对?那u.ad drr那后边应该有个什么值呢?对吧,好,那么接下来我在这里呢,写一个程序,各位看好了啊address。A。啊,New一个address,好,各位大家看这是不是一个对象,这是不是一个对象,这个对象指的是谁?是不是就是这个对象,这个对象里面有没有三个属性,City,街道和右边都有吧?好,那么接下来a. Ca.C是什么?是北京,假如说A点什么呀?
20:12
Street街道,街道是什么呀?哎,大兴区,然后呢,a.zip code zip code是什么呀?是邮编啊邮编随便写了啊好了,那整个这个其实就是一个家庭住址对象是吧?哎,这是一个家庭住址对象,那么现在呢,这是一个什么对象啊,这是一个用户对象对吧?哎,然后接下来呢,在这儿你给ID呢,给这个用户对象的ID附上了,给他的名字,用户名附上了,那给他这个用户的住址附个啥?能不能把拿过来?A通过等号的方式付给他。反正是赋值嘛。对吧,那A的类型是不是address啊。就相当于说你在这有特I等于100,然后J等于I,理解吗?这代码理解吗?
21:08
好,这是什么原理,会把I变量里面保存的100复制一份给谁对吧?哎,这个原理是什么。会将I中保存的100复制一份传给谁G变量对吧,那现在这个呢。你自己分析吧,行吧,Address a好,各位为什么不能加,不能写个数字啊,为啥不能写个数字,因为u.ad.user是谁?User user它的ADR来看看啊,User它的ADR在这是个int吗?不是,它是一个啥呀,Address。如果是int,你当然可以在这个地方给一个数字。如果你是一个字符串string,那OK,我也可以在这给一个双引号,但你现在在这个位置,我不是一个string,也不是个我是个address,我是个address等号后边这块应该是谁?
22:05
它是应该是一个什么样的数据是吧,于是呢,我就把A放到这儿了。对吧,那为什么把A放到,因为A的类型是什么类型address对吧,而我们这个位置ADR,它的类型也是address。对吧,哎,你你先思考思考,你看这个能不能看明白,A通过等号的方式付给他,咱们这几天呢,这块的内容啊,比较的重要啊,咱们慢慢来,慢慢来,不着急,这个内存图你画一画好吧,你画一下这个内存图,哎,就是说你思考一个问题,思考一个问题什么问题。我想知道。张三,他。是哪个城市的?代码应该怎么写?就system点点打印输出。张三。u.u nameme呗,U是谁啊?这个U吧,u.user nameme,张三是不是,哎,是。
23:07
哪个城市的对吧,哎,你把这呢搞定一下。是哪个城市的?你看你能不能输出一下。反正呢,我这块有这么一个挺难的一个题目啊,这个题目呢,你看情况吧啊,你要有精力你就研究一下,没有经历的话,你就把刚才我所说的最基本的这个你能画出来。把它的内存图画出来好吧。好好好好。我说了啊,诶。牛啊牛。行,这个呢,下去之后思考一下,好吧,思考一下。然后今天的作业,我再强调一下啊,今天的作业是什么。在吗?各位在的话打个一。
24:02
今天的作业是把这个user user test以及难度较大的这两个内存图画出来。别的没有了。别的没有了啊,你把内存图给我画出来,内存图,我要内存图。这样吧,内存图画出来啊。发我邮箱。
我来说两句