00:00
大家好,我是海波老师,之前啊,我们已经用面向对象的方式呢,给大家分析了一些小的例子啊,接下来我们就准备把面向对象的语法呢,我们简单的回顾和梳理一下,然后呢,我们再一个一个的详细去讲,好吧,那么首先呢,我们这里拷贝新的代码,来,我们写上一个我们的零三。那我们把这个呢,我们就去掉啊去掉,然后呢,我们这里呢,直接点击OKOK以后呢,把这个呢,我们改成三,把这个呢,我们改成去掉啊就可以了,好把这都去掉。好了,去掉完成了以后呢,我们这里写上一个啊,咱们的todo啊,我们叫面向对象就可以了,那首先我们把基本的语法呢,我们再简单的回顾一下,咱们这里写上斜杠啊,然后呢来我们叫基本语法,那么基本语法呢,首先分两部分,第一个呢,我们叫声明,那么第二个呢,我们称之为叫使用,那么所谓的声明呢,又分我们的几个部分,首先我们的第一个就是我们类的声明,那么我们类的声明呢,首先就是一个class,对吧?然后呢,后面呢,我们就是我们的类明啊,然后呢,我们写成一个大括号,大括号里面就是我类的主体部分,我们一个类的主体部分呢,我们就会放在我们大括号里面去,然后呢,我们类里面呢,其实还有属性对吧,我们还有属性,我们说了我们的属性呢,有零个啊,获得我们的多个,这个是没有问题的,它的基本的语法呢,我们就说一下它是我们的类型对吧,再加上我们的名称,然后呢,等于值,这就是我们的属性。
01:26
除了属性以外,我们说了还有我们的方法和行为,所以我们说一下我们叫方法,这个呢,我们也称之为叫行为对吧?它也可以声明多个,也可以没有,所以我们也是零个啊或多个好了,那么它的基它的基本语法呢,是我们的VO对吧?那写上一个我们叫方法名,那写个括号,然后呢,再写上一个我们的大括号,哎,就是这样的,那么它的里面呢,就是我们的逻辑代码了啊,咱们这里呢,就是我们的逻辑代码,这是我们最基本面向对象当中的语法声明了啊,但是你光有声明还是不够的,我们还需要去构建具体的对象,对吗?所以呢,我们来把这个去掉啊,去掉然后呢,我们想使用,那么我们使用的时候,我们首先的构建对象啊,所以我们写上构建对象,那么构建对象的方式非常简单,我们直接写个new。
02:12
后面呢,再写上一个类的名称,诶括号就行了,这样的话就把这个类当中的一个具体的对象就构建出来了,非常的简单对吧?还有一个就是我们的访问属性,那我们的属性怎么访问呢?那首先你得有对象啊,你有了对象以后,对象我们叫属性名称,哎,把那个属性名称啊给我拿过来就可以了,那么你访问了属性以后,那万一我还想访问它的行为呢?所以这个时候呢,我们写上叫访问方法,访问方法的方式也非常简单,我们写上叫对象L,然后呢,方法名后面我需要加个括号就可以了,诶所以你会发现声明的语法就很难,对不对,把一些东西大概的看一看,使用的方式也不是很难,所以呀,我们这么写其实基本上就够了,但是呀,我们说了这只是我们基本的语法,那么我们实际的语法比这些要稍微复杂一些,所以我们接下来呢,准备一个一个给大家讲一下,那么我们这里呢,先给大家讲第一个就是我们的类和对象,所以我们这里拷贝,拷贝以后呢,我们写上一个我们的零次,然后后面呢,我。
03:12
写成一个下划线,我叫class,咱们要先讲类了嘛,点就OK,那么点击OK以后,里面的东西我现在都给它去掉,不要它了啊来把这个去掉,去掉了以后呢,我们这里给大家去说一下,我们首先啊就先要说一下我们的这个类,这个类咱们前面给大家说过了,因此啊,它是把多个对象当中相同的特征和我们的行为给它抽取出来,形成了一个特殊的结构体,对不对,它其实是一个结构体,它里面啊包含了我们的属性,我们也称之为叫特征啊和我们的方法,方法呢我们叫行为,我们的类呢,是多个对象给它抽取出来的这么一个结构体,所以呢,一个类会有很多的对象,对吧?所以呢,我们说一下,哎,它会它会有很多的对象,这个是我们一定要明确的,还有一个呢,就是它的语法了,在语法当中啊,我们首先class class它是一个关键字。
04:05
那也就意味着你在起名称的时候,你是不能起class的,这个咱们要稍微注意一下,但是我们也讲过啊,咱们这个关键字呢,它全是小写的啊,所以关键字它全是小写,那么如果你写了大写的话,那么倒是没有什么太大问题,只是呢,我们不推荐使用而已,对不对,这个咱们之前给大家讲过,接下来呢,就是我们的类名,类名啊,其实很简单,就是类的名称嘛,它其实就是类的名称。这个名称我们需要注意一下,其实啊,它是一个标识符,之前给大家讲过标识符吧,而且我们还讲过标识符的命名规则,对不对,所以咱们的类名呢,是需要遵循我们的规则的,同学们,什么数字不能开头吧,对不对?不能使用我们的关键字,保留字,不能使用特殊符号,还记得吧?哎,这个咱们之前给大家讲过啊,数字不能开头,能用什么东西,不能用什么东西,咱们之前都提到过,这里我们就不去重复了,那么还有一个需要注意的就是我们一般情况下,一般情况下我们的类名啊,咱们叫类名。
05:05
的手写字母啊,手写字母我们是大写的,同样啊,这个其实不叫规则,它叫规范,对吧,就是我们识别起来更加容易,如果你都写小写的话,有的时候感觉就跟个什么变量名啊,属性名啊,什么方法名的感觉是一样的,这样的话有点区分不开了,所以我们习惯性的会把类的手写字母变成我们的大写,所以呢,我们这里呢,如果写上一个class的话,我们的手写字母呢,就应该是大写,所以我写上一个U的,我写个零四,然后呢写个花括号,就是我最基本的类的语法,我们先不说我们声明什么属性啊方法什么的,我先不说,我们只要这么写,其实一个类就声明好了,那我光声明类是不够的呀,对不对,为什么呢?你有了累了,可是你还得有对象啊,所以我们接下来咱们说对象。咱们称之为叫做对象,所谓的对象啊,需要同学们注意一下,我们的对象呢,就是类的实例化。或者叫具象化。什么叫具象化?
06:02
这个我们就称之为叫对象,为啥我前面讲了,我们面向对象分析的时候,我们从问题中去提炼出不同的事物,那么每个事物呢,我们称之为一个一个对象,对不对?把对象当中共同化的属性和我们的行为抽取出来,那么你抽取出来的话,所以我们的这个类啊,它更抽象,而我们的对象呢,它更具体,对不对?所以啊,我们说了这叫具象化,就是具体的意思啊,所以我们把这个称之为叫类的实例化,哎,那么我们的基本语法是什么呢?我们说过了,我们的基本语法呢,就是我们的new后面呢,增加一个类名,这个类名啊,就是你这个对象所属的那个类名,比方说我们的张三,它就是U点零四呀,那么这个new就应该写上一个叫U点零四就可以了,那么需要注意一下啊,就是我们这个小括号,它是需要增加的,你不能说省略了,你说我不想写了,那不行对吧,这个合在一块是一个我们的完整的构建对象的语法,也是我们类的实例化的一种方式。
07:01
我们后面会给大家讲啊,用不同的方式来实例化我们的对象,New是我们用的最多的一种啊,这个咱们需要注意一下,还有一个呢,我们再说一下,就是我们这个new啊,它也是个关键字,他们的new啊,它也是关键字,它表示创建一个具体的对象,而且呢,我们说使用一次创建一字。简单来讲就是只要你有new,那么就会创建一个指定类型的对象,比方说我写上它,那叫new build04。同学们,我只要这么写,我们就会在内存中创建一个对象,那如果你再来个new呢,会创建一个新的对象,哦,再来还是会创建一个新的,所以我们这里就要明白我们的new的作用啊,它就是创建的意思,我这好像写错了是吧,咱们写成叫一次啊,OK,把这个拿过来,嗯。然后呢,我们叫每次啊都是全新的啊,这个希望大家能够明白啊,好了,把这个给它注掉,但是我们说我们的类啊,它是个结构体,它里面会有很多的属性和方法,对不对,那为了方便我们的使用啊,我们一般情况下会将我们的对象扭出来以后,给它复制变量使用,所以我们这也说一下,就是我们一般扭出来的对象,我们会啊,赋值给我们的变量方便啊,咱们的重复使用,什么叫重复使用啊,就是你同一个对象啊,一会呢调用它的行为,一会调用它的方法,一会调用它的这个属性,对不对,这就叫重复使用,所以啊,我们这里呢,一般情况下,我们拗出来的这个U的零四呀,我们要把它赋值给一个变量,所以这个变量呢,我们就写上它叫U的零四,U的零四,然后U的等于它。
08:39
们注意一下我们这个变量啊,它的类型呢,就是你对象的类型,所以我们这里说一下我们变量的类型,它就是我们对象的类型。然后呢,我们将这个对象复制给这个UR,就是这个意思,但是我希望同学们注意一下,我们这里把这个对象赋制给UR,并不是说把这个对象给他,这个需要大家注意一下,诶老师你赋值不就是为了给他吗?这个和咱们之前所学的基本数据类型有点不太一样,这里我们给大家解释一下,来咱们解释一下,首先我们要解释的话,就得解释类对象和变量之间的关系,我为什么要给大家讲它们之间的关系呢?是因为在内存中,他们三个存储的地方是不一样的,然后这里我们稍微的说一下,来我们这里画一块,然后呢,我们这里再画一块,咱们稍微拉大一些,然后呢,我们这里呢,再给它画一块,OK,过来,过来以后我放到这边就可以了,那么我的这个地方呢,我给他一个我们的蓝色。
09:36
然后呢,我们这块呢,我给它一个我们的红色,好,然后呢,这块呢,我给它一个绿色,诶可以了可以了,以后什么意思呢?同学们,我们这三块不同的内存区域啊,我们有特定的名称,我们把这个呢称之为叫做什么呢?碳哎,我们称之为我们叫做碳,就是这样的啊,那我们中间的红色呢,我们称之为叫堆,你会发现我们的堆呢,其他两块内存呢,会稍微的大一些,为什么呢?它存储的东西非常特殊,那我们的绿色呢,诶比较小一些,对吧,我们称之为叫圆空间。
10:10
好了,那么好了,内存分了这三大块以后,老师那么有什么用呢?很简单,每一块内存在Java当中存储不同的东西,那比方说我们的站,我们的站呢,就存储我们的方法和变量,所以我们的方法还有我们的变量是这样的,我们方法的执行啊,我们的变量的使用啊,是在这块区域去完成的,而我们的堆呢,它是存储我们的对象,诶我们之前不说了嘛,咱们面向对象,面向对象我们的每一个对象是在咱们的这个位置,对我为什么画的大一些呢?因为对象多嘛,那么这个叫圆空间是什么意思呢?这个圆空间存储的就是关于数据的数据,或者说关于对象的数据,比方说你构建了一个对象,那么这个对象有哪些属性啊,哪些方法呀,它叫什么名字呀?诶我们都在这里存着,所以简单来讲,我们的类的信息都在这里面存着,我们叫类的信息,说白了就是那个class了。
11:04
哎,同学们有没有发现单块区域每一块存的东西不一样,那既然是不一样的情况下,同学们我们就要注意一件事情了,什么事情呢?如果我们现在说了,我把一个我们的对象复制给一个变量,你可要记住这个变量它存储的是这个区域,这也就意味着我当前的位置,我们这边画个小方块,诶下画个小方块好放过来,放过来以后我就写上它,我们就叫U,然后呢,我们写上U。这就是我们当前的一个变量,哎,同学们能不能明白,如果你能明白的话,我就希望你能够知道我们的对象是在这块区域去创建出来的,那么也就意味着我们这里的new,它其实是在红色的区域中去完成的,所以我们再来一个我们的对象啊,我们会习惯性的把它画成个圈,诶,一个圈,那这里呢,我们给它一个颜色就可以了,这里我就写上一个叫做U的。你这个当前的对象有问题呀,问题呢,这个对象是怎么创建出来的呀,我怎么会创建呀,所以咱们的这个new的操作呀,它有一个问题,他得知道你当前的类在哪里呀,我是根据结构体的这个信息来构建具体的对象,你连这个类在哪都不知道,那你怎么构建呢?你不可能啊,所以就意味着我们的原空间当中应该存储的类的信息,所以呢,就意味着这个里面应该有UR的信息,哎,同学们有没有发现我们的U啊,在三个地方都会存在,这里我给它一个紫色吧,好了,那么大家看一下这个是什么变量,这个是对象,而这个是我的类的信息,所以我们说三个是不一样的,那既然不一样的话,那么它的关系是什么呢?很简单,就是当我们想构建一个对象,把那个对象的值赋值给UR的时候,它是这样的,我们这里呢,首先会干嘛呢?会看一看我们类的信息当中有没有这个类的信息,看它有没有啊,有没有,如果有的情况下。
12:58
啊,那么好,我根据它的信息在堆应内存当中来构建我们的对象,所以把它给它拿过来,诶放到这儿,放到这儿以后,那这样的话,我的对象才可以构建出来,我构建出来以后,我再把对象的内存地址或者叫引用地址。
13:14
赋值给U的,我们的UR的变量,它就指向了这块内存,同学们,这个大家现在能不能明白,所以啊,我们这个跟之前讲的那个基本数据类型的那个赋值呀,有点不太一样,为什么呢?因为基本数据类型的赋值呀,直接把那个数字就存在这个地方了,为什么?因为它不会存在堆里面,记住啊,同学们,基本数据类型是不会存在堆里面的,是存在了我们的这个占内存当中,所以呢,也就意味着我们基本类型的赋值呢,就直接对这个地方做操作就完事了,但是我们扭出来的对象它是在这个地方,所以说你这个变量啊,纯粹就是一种引用,这个箭头啊,就是一个引用的一个操作啊,它指向了我们的这个地址啊,它指向了我们的对应内存当中的这个对象,所以这个U的赋值是把什么值给它了呢?叫引用地址啊,这里我们就说一下,我们的对象是将我们内存的地址赋值给了变量,所以我们的变量它其实它引用了内存。
14:14
中的对象。所以称之为叫引用变量,引用变量,而变量的类型我们称之为叫引用数据类型,大家还记得吗?我们之前给大家讲过一件事情,就是我们Java的数据类型分两大类,一个叫基本数据类型,一个就叫引用数据类型,我们能用new的方式来创建的对象的类型,我们都称之为叫引用数据类型,这个大家需要记一下。好了,这是我们把那个变量啊,我们的对象以及我们类的关系给大家,通过画图的方式给大家说一说,下来我们给大家讲一个我们写上叫特殊的对象,空对象,什么叫空对象啊,没有引用的对象诶,我们称之为叫空对象。
15:01
大家看一下,我现在呢,写上一个叫U的零式,我们叫做U1啊,等于那。这个,那我们就称之为叫空对象,它就表示我们没有在这个堆当中去创建对象,所以这个箭头是不存在的,说的简单点,那个箭头不存在,我们就称之为叫空对象,我们在那儿呢,也称之为叫做关键字对象,哎,只不过呢,没有任何的引用是一种特殊的值,这个需要大家注意一下,而且我们还要说一下,就是所有引用类型变量的默认取值。啊,就是。你是个变量,你没有指向任何的一个对象,那你可不就是空嘛,所以这是一个默认值,哎,这些我们是需要给大家介绍一下的,好了,我们内核对象我们就先说到这里。
我来说两句