00:00
咱们看下这个课后题,课后题的话呢,咱们前面呢,有一个这个题,诶这个呢叫练习二啊说呢编写教师类和学生类,并通过测试类呢,创建对象呢进行测试,诶这个题目呢,相对来讲比较简单一些,诶我这儿呢就不写了哈,简单的我们说一下就是这儿呢,我们去造一个student类,诶声明呢,这样几个属性,对属性的类型和名字,哎都写好了,直接呢你就呃声明就可以了,目前的这个权限呢,大家可以对于属性先省略啊,就是先用这个缺省的这个属性就可以啊,权限就可以了,然后这个C方法呢,哎咱们说了方法里面呢,是可以调用属性的,所以呢,直接在这个C方法里面,大家呢,可以去它让你返回了啊,你看明确告诉你有返回值了,哎,你就给它return一下,哎,然后返回个人信息呢,你就把这几个信息拼一起,那自然呢,你就用个string去返回,哎就可以了啊行,然后再。
01:00
造一个这个测试类,哎,我们去测试就行,诶这个题目的话呢,我们就不写了,咱们呢,看一下这个后面的这些题目。诶看这几个题目,哎,首先呢,是第一道说创建一个person类啊要求它的定义呢,是这样子的,哎这呢有属性有方法这块有对应的这个要求,那我们这儿呢,去新建一个包。好在这个包下呢,来写咱们这个题目啊行,那这里边的话呢,提到了有一个类呢,叫做person类,那另外的话呢,我们再专门的再去造一个类呢,充当这个叫测试类,诶咱们呢,讲课的这个知识的这个代码呢,大家会发现我这儿呢,其实造的类呢比较呃造的这个文件比较少,咱们一个原文件当中呢,哎,我就是说一个问题呢,所以呢,诶我就都把它写一起了哈,就是这呢是说这个呃创建类创建对象,这个呢是咱们说属性的,这个呢是说方法的,所以呢,我就是都造到一起了,看着稍微干净一点哈,实际上我们这一个。
02:05
原文件里边,咱们讲课的时候呢,我是写了两个类啊,一个呢是充当的叫测试类,一个呢充当的就是我们造的这个具体的一个某个功能的一个类啊,那现在在练习这块呢,咱们可以给它拆开,哎,这是OK的啊,比如说呢,我们去造一个类,这个类的话呢,我们就把它叫做person类,然后呢,再去造一个文件,这个文件的话呢,我们就是专门充当这个测试的,诶这个分开分开写呢,一点问题没有啊,诶而且通常情况下,咱们在开发当中呢,基本上一个原文件当中通常都爱只放一个类。啊,这块呢,只是为了咱们把这个知识点让它合在一起,这样我要一个拆俩的话呢,这一块有好几个,看着就显乱,所以我合到一起写了,啊是这个意思,哎,那我们这呢,就拿个例子来说明咱们分开写的这个情况,首先的话呢,我们先去创建这个类,呃,这块的话呢,我们把它放在这个靠边一点啊。
03:02
行,咱们在这块呢去写这呢提到了这样的几个属性,哎,有string类型的name,好,Int型的age,下面的int型的sex,哎,这个sex性别它是用int型标识的啊,人家写的啥,那咱们这个人家要求用啥,咱们就用什么啊这呢是属性下面的话是方法,方法里边这个加号呢,表示的是public,对,就是这个公共的意思啊,也就是咱们说的目前咱们写方法呢,大家先都写成public的,然后呢,在这个冒号的后面呢,指明的就是方法的返回值类型,哎,那这个就是一个word啊,叫study的方法。还没有行参,那就这样写study的话呢,这里下边写了说当我们调离方法的时候,输出一个字符串叫studying,那这呢,咱们就直接S。诶,这就studying啊就OK了,行,下一个方法show age,哎,还是一个public,然后avoid show age参数呢也没有,哎就这样在这个里边说当调这个方法的时候呢,显示age值啊,既然是个VO了,我们就在里边呢,是s out一下说age,哎,咱们呢加上一个age,这就是我们所谓的在方法当中来调属性,哎,这样的一个操作。
04:26
好在下面public这个方法呢,有个反回值叫int,在冒号后边呢,明确指出来了,好int,接下来I age,哎,我们int型的一个I,好这样子,哎,那么I age要做什么事呢?下边有写说当我们调用I age方法的时候呢,给这个对象的A呢,属性增加两岁,那这个是咱们具体调用的时候呢,相当于给I的值是R,那这块呢,我们当于就是A呢,应该加等于这个I。哎,就是给我们这个年龄呢,加上两岁,加上两岁以后呢,人家这个还要返回哈,他这块呢,没有说,那咱们呢,就返回一下他这个心加了加了I岁以后的这个年龄,就我return一下这个位置,哎这样子来进行处理。
05:15
好,这块有问题不,大家看看。哎,就是加两岁呢,是咱们一会儿呢,调用这个,呃,方法的时候呢,负的值是R,现在的话呢,这不是人家这写的是I嘛,咱们讲这个行参的话呢,不能在这赋值啊。哎,我下去走的时候看还真有同学这样写了哈,这个行三这块呢,是不能赋值的。哎,咱们形态呢,是你调用这个方法的时候呢,再复制啊,它是一个比较特别的情况,行还有别的问题吧。那没有的话呢,咱们下面呢,就开始来写这个测试类了啊,CTRLC一下,哎,那么来写这个测试,哎,咱们在这个person test这里边,哎,写一个main方法。
06:03
CRV啊,这是这样的一个需求。行,咱们来看一下这个情况啊,说创建person类的对象,哎,我们就person PE等于new一个person啊这就这样了,找好对象了。诶大家呢,始终通过咱们这个练习,还有我写的这个代码呢,一直不停的在印证一个事情,就是这里边的三步,哎这个下去走的时候呢,其实很多同学也问问题了,就是感受到的就是这三步呢,体会的不好啊,咱们刚才呢是把这个P类呢造好了,接下来呢,我们在另外这个测试类当中,我现在想去这个调用咱们相关的你person中的这个方法了,那这时候我们必须要先造一个对象啊,一定要明确我们这三个步骤,造完对象以后,我们再通过对象呢去调这个属性,调方法,行,那这里边的话呢,我们说首先呢,就要设置该对象的内A值和S,哎,我就p1.name,哎,这个比如叫Tom,然后p1.age,年龄就18岁,诶p1.sex,诶这个呢,他明确没有明确的去说啊,说这个sex该怎么去设置,诶这呢,就我们可以在这提示一下,咱们前面讲过这个叫文。
07:25
档注释啊,你看我这加上这样的一个文档注释,两个星的,我们在这儿呢,你去设置一下,如果我们这个sex取值为。比如说取值是一的时候呢,我们表明。哎,这个我们表明是男性这样啊,然后如果这个sa呢,它的取值是零的时候,哎,表明是女性。然后就别然后了,就这样吧,啊就就这两个啊,诶完事以后的话,你看过来,我们把光标往这一放,哎,大家会看到这个注释就有了,这就是我们文档注释的一个效果啊,哎,就能够提示你当时设置的时候这个需要怎么做是吧,这块就OK就有了啊行,这呢是我们来调这个属性啊,然后接下来我们去调用这个方法,通过PE咱们去调,首先叫study。
08:23
哎,调这个study了,哎此时呢,执行一下。诶,这出来了叫study OK下面嗯调用叫收age,显示它的age,诶通过这个PE点我们叫收age,哎,这个收age这个方法我们按住CTRL键哈,这不就能点进来,就咱们声明的这个情况,咱们这是word的在里边输出了啊行,这我又回过来了,回来我再怎么回去呢?你同说我点一下就回去了是吧?啊我这到这以后呢,我这时按住这个alt点左。就回来了。就是out左,就是相当于我这呢就进去了,我out左呢,我就再出来了,你在out右呢又进去。
09:04
再出来。那就这样,这out左跟右啊好这呢就出来了,这叫收位置执行。哎,因为呢,我们前面呢,给A复制为18了,所以我调用收A呢,呃,就输出了你当前这个对象的A就是18,哎,再接着我们调I的age,给我们当前的对象呢,增加两岁p1.i的age写个二。哎,就这样子啊,那写完二以后呢,这个方法呢,还有一个返回值,返回的呢,就是我们加完这个年龄以后的这个加完这个I以后的这个新的年龄啊,再out左一下就回来了,诶你可以拿一个新的变量呢,去接收一下,比如叫new age,诶我们这呢输出一下说呢,新to姆是吧,汤姆,咱们可以这样说,P一点内啊的新年龄为。哎,加上我们这个叫new age,一开始呢是18岁,在这里边呢,我们给当前属性加了两岁,还返回的这个新年龄,哎,我们这时候呢,一直行,这就是20岁了。
10:12
能理解我们整个过程吧。啊,能理解哈,诶那要能理解,我在这儿看看这个写的话会不会晕啊,我要这块我去输出一下谁呢,我输出一下我P的age值,问这时候你说A是多少。想想多少20吧,20啊,这个呢,其实就是我们的年龄。你像咱们这个方法里边,这不是返回的就是你的这个属性A嘛,是吧,诶你把属性这个加了两岁,其实返回的就是我们这个,呃,这个这个年龄,只不过呢,我把这个,呃,本身你这个A值20这个呢,付给一个新的变量了,咱们这打的是你这个新变量,新变量,我这个这个新变量的值不就是拿我这个值给你付的嘛。
11:05
哎,所以这也是20哈。这个大家要注意一下。呃,这个题目呢,如果你要不清楚的话呢,其实可以画一下这个内存结构的啊,那内存结构咱们简单的我在这画一下啊,大家看这是一个占空间,这是一个堆空间,我们呢,在站这块呢,这不生明的叫P1诶,然后指向堆空间当中我造的这个对象的实体,然后呢,属性啊,目前呢,咱们讲到的属性都是非静态的啊,静态这个词呢,假设大家现在就不知道,咱们现在讲的这个知识点都是基于非静态的啊啊,那静态以后呢,其实有很多东西就变了,那这种这个时候呢,我们这些属性都是放在咱们的堆空间当中,有一个叫name,一个叫age,一个叫sex。那一开始的话呢,他们有一个默认值啊,我们一看person咱默认值好像一个也没设置啊,所以呢,这是no。
12:02
这是年龄,这是零啊,In型的,这也是in特型,这也是零。好,咱们第一行代码就搞定了。那接下来我们通过这个P1呢,去调这样的几个属性,哎,那我们通过PE1去调,把它呢改成Tom,把它呢改成18,这个改成一。行,那到此为止呢,这个就完事了,然后接下来呢,我们通过PE呢,调这个叫study,我调study呢,这里边没有任何的这个局部变量了哈,Study里边呢,就直接cor的这个study,其实这呢,在内存这个层面呢,没有任何变量的一个加载,就直接呢掉了一个方法就输出了一个study就完事啊,不用管了,再下面呢叫showage。收age的话呢,里边输出了一下,我们当前这个呃,P这个人的一个年龄,就是相当于把这个age给输出了一下,所以也没什么啊,就结束了,好看下边下边啊,下面的话呢,我们调了一下叫I age,我调I age的时候,我这传的是一个二。
13:04
这个二是我们传的这个数值,把它赋给了咱们person当中定义的那个I的A方法,哎,我这看不到这个界面了啊,我这再把这个ah简单写一下这个I age方法呢,咱们这声明的是个int型的I,哎,在这里边呢,咱们是拿这个age呢加等于了一下这个I,好,相当于咱们是把这个二呢赋值给了这个I,对吧。嗯,那这个I是个行参。形态呢就是局部变量,局部变量呢,就应该在站立。所以说呢,这个时候这个I其实是在这儿。这个I呢,值是多少?我们调离I的方法时传的是二,所以呢,这个I呢,它就是二,就这样子啊,那么在这个I age方法当中,咱们把这个I累加到我们的age上了,这个age呢,就是我们P这个对象的age,就是谁调这个方法。
14:01
啊,那这个age呢,就是谁的,咱们不是P对象调的这个方法吗?那呢,这个age呢,就是P这个对象的啊,那我通过P1呢找到它的age,把它上面呢加了一个ii呢,这不是二嘛,相当于就是把二呢累加到我们这个18上,哎,这就变成20了,变成20了,行,那这个方法执行完了以后,他return了一下,其实就相当于把这个age呢给返回了。理解吧,就把它给返回了,这不累加完以后返回了,然后这个方法呢就结束了,这个方法一结束。咱们的这个I,你是定义在这个方法当中的方法都结束了,这个变量呢,是不是作用欲也就消失了,它就相当于就出站了,它就出去了,然后此时呢,咱们这age这不已经变成20岁了吗?啊,所以呢,我们再去打印p.a的时候呢,它就是20。啊,那这个呢叫new age,这个怎么理解呢?这个呢是咱们,呃调这个方法的时候呢,这不是返回了一下这个age,咱们把这age呢,就赋给一个新的变量,叫new age,这个new age呢,是不是也是在may方法当中,May方法也是方法呀,方法里边定义的变量是不是都是局部变量,哎,你要写的话,你也可以在这写个这个叫new age,这个age呢,就是把你这个age返回的,所以这也是20,所以咱们下边呢说输出语句说呃,Tom的新年龄是new age,咱们输出的是它,下边这个呢,调p.a呢,我们调的是它。
15:28
哎,是这样子的,大家呢,就严格按照咱们讲这个内存解析这个结构当中提到的行参放在占不是行参了,局物变量放在这不管形参的啊,然后呢,这个属性呢,目前咱们讲的是非静态的啊,都是放在堆,哎接着呢,你看该怎么调该怎么样的,就按照这个规则来,它就错不了啊就OK了。行,那这是我们说的这个这块哈,然后下边呢,说创建第二个对象执行上路操作,体会一下同一个类不同对象之间的关系,来我们说这个问题。
16:05
下边我再去创建第二个对象,叫P2。诶,我造完这个对象以后,那现在我呢直接呢叫P2点,我直接上来就收位置,收位置里边呢,直接去打印你的位置,好问这个时候的这个收位值输出的是多少。看一下这块的这个这个情况啊,多少对输入的是零。是不是零啊,这个呢,如果有疑问,那下来还真得,嗯得找我,咱得说一说这个事了啊,就这个呢,应该大家都得知道才行,哎,我们说你新造了一个对象,是不是说在这个堆里边,就是刚才那个呢,是P1是吧,这是P1了吧,然后现在咱们就生明这个P2,这是new的,只要是new是不是就得新造一个,哎,所以呢,我这里边这个name啊,A值啊,哎,这个sex啊,都是独立的一套,跟你没关系,哎,由于我这呢,这不是都没有复过值,所以没有显示负过值,那就默认值,哎默认值不就是零呗,哎,包括呢,咱们给这个P2点,我们去I的A值,我加上一个十,呃,是在你原有的零碎的基础之上加了一个十岁,那我再去P2点收位,是不是你就变成十岁了?
17:26
哎,就变成十岁了,然后我要再去打印P点,收益是多少岁啊。对,是不是还是20岁啊,哎,这里呢,我们就来强调一下这个age指哈,就是你有一套,我有一套,你是你的,我是我的,嗯,咱们这个叫I的age里边呢,对这个age呢,加上一个I,哎,那这个age是谁的呢?咱们刚才强调了谁调这个方法,这个A值就是谁的,我们拿这个P2调的这个方法,那我里边累加这个十呢,就是你P2的那个A加了十。
18:02
哎,这要注意啊,行,那这一道问题呢,看着好像不太复杂,但其实里边涉及到知识点呢,还是挺多的啊,哎,我们说每个类的对象呢,是独各自啊,独立的拥有一套这个类的这一套属性啊,这是针对咱们这个非静态的啊,目前咱们不涉及到静态的问题。
我来说两句