00:00
好,那么接着的话呢,咱们来看一下这个第三章啊,面向对象的第三章,面向对象呢,一共是有三章,这个第三章呢,这个内容呢不算少啊,这个咱们打开看一下啊,一共呢要讲好多内容啊呃,这里边儿呢,有一些内容呢,原来我讲的时候呢,是把它放到面向对象外边了啊,现在呢,我给它放到里边了。啊,所以呢,这一章呢,显得会稍微的多一点啊,从上往下呢,我们稍微捋一捋,首先的话呢,我们讲一个关键字啊,叫做static。实际上呢,这个关键字啊,我们见到它呢,时间很早找到呢,没方法里边就有。啊,但是呢,自始至终我们也没有提过他,哎,那这呢,我们就专门来讲一讲这个static啊,讲完它之后呢,基于这个static呢,哎,我们讲。啊,一个设计模式,诶什么是设计模式呢。实际上呢,就是我们解决具体问题的时候呢,一些呃,规范化的代码格式了。这块提到一个叫呃单立的这种设计模式,哎,大家呢,可以理解成是static之后的一个应用。所以这块呢,都算是一个内容啊。
01:00
这呢我们画到一起,下边这块呢,基于我们讲完死在这个之后,整个这个may方法里边每一个关键字呢,咱们就都见过了。哎,我们稍微的再谈一谈关于main方法的一个理解,所以这个内容呢,属于一个了解性的。然后呢,再往下的话呢,我们讲类的一个成员。啊,所以这块我们说这个内容的时候呢,大家脑海当中也浮现一下,最初呢,我们讲面向对象的时候呢,提到了叫三条主线啊,啊类及类的成员啊,面向对象的三大特征,这都已经讲完了,然后呢,其他关键字的使用啊,这样呢是三条主线啊,然后我们这块呢,相当于再回到第一条主线。讲啊类当中的一个成员叫做代码块。啊叫代码块,那这个呢,结构呢不是特别难,咱们在平时开发当中呢,自己主动写代码块的机会呢,其实比较少。啊,所以说这个呢,重要性上来讲,相较于属性方法构造器那肯定是要低一些了啊,然后呢,基于呢,这个代码块呢,我们再谈一谈,前面讲到了说这个呃,变量啊,赋值的这个位置和顺序啊,原来讲过默认赋值,显示赋值,构造器赋值啊有了对象以后呢,可以调属性调方法,那么代码块呢也可以做这个事儿,所以呢,就把它呢补充进来了。
02:11
OK啊,所以呢,这块呢,我们也可以理解成呢,算是一个事儿啊,关于代码块使用这块的,然后接下来的话呢,我们再讲一下这个关键字啊,一个关键字呢,叫做final。啊,这个呢,不太难理解啊,这个很容易理解啊,所以一讲大家就能明白了,然后呢,下边这个呢叫abstract,这个abstract的话呢,就是抽象的意思啊,它可以呢用来修饰类,修饰方法,那对应的类呢,就是我们上一节课复习的时候提到过的那个叫抽象类。诶,这呢,相当于一个关键字的一个使用,呃,这个关键字呢,其实相当于呢,在我们原有的继承性的基础之上呢,我们稍加对代码进行一个改造,它就是一个抽象的场景了。所以呢,应该来讲啊,就是继承,如果你理解的比较好呢,那其实代讲了抽象以后呢,这个抽象这个在现有的继承的基础上,我们稍微一改,代码量更少了,那就是抽象的这种场景了,所以呢,呃,大家在写代码的时候呢,其实啊,不是特别难啊。
03:09
这两个专题呢,是讲这个抽象关键字的,然后再往下的话呢,也可以理解成是个关键字的使用,叫做interface啊,就是接口的意思了,它呢是与类并列的一个概念啊。这呢就是关于接口啊,在实际的开发当中呢,我们说这个接口啊,其实也不少啊,所以呢,我们单独的说一说,它这儿呢,也算是我们的一个重点内容。好,然后呢,再往下的话呢,我们就呃,再提到一个类的成员,叫做内部类。啊说呢,在一个类的里边,我们还可以在内部呢去声明一个类。像之前呢,有同学写代码的时候呢,就一不小心,本来呢是啊这是person类,这呢是person测试类啊,结果呢,这个大括号没控制好,把一个类呢包到另外一个类里边了,所以怎么老是出问题是吧?其实一看呢是写成内部类了啊,为什么没给你报错呢?是因为呢,诶我们是允许把一个类放在另外一个类的内部的啊诶那这呢叫内部类了,我们看看这块呢都有哪些内容,整个呢也不难啊,要求呢对大家不高,OK啊。
04:08
好,那以前的时候呢,我讲这个面向对象呢,其实到这块呢,就算是结束了哈,诶后来呢,我就把这些内容其实也包进去了,因为呢,从一定程度上来讲呢,它也算是一些语法性的特点。哎,看看都有哪些哈,首先呢,关于这个枚举。啊枚举呢是一类特殊的类啊,就叫做枚举类了,诶看看这块呢是咋用的,然后这个注解呢,是一个特殊的结构啊注解呢对应的是这些,呃到这块的内容啊注解的话呢,像咱们这个一个TRY叫over。啊red是吧,诶这个呢,其实就是注解啊,咱们看看在Java当中,除了这个注解之外呢,还有哪些注解啊,都是干嘛用的啊这呢就是关于注解,所以这块呢也不太难。在实际开发当中啊,咱们后续呢,讲框架大量的使用了主机。啊,但是但是在我们这个基础阶段呢,我们这个注解建造的很少,咱们就知道呢,它是干嘛用的,这些说以后大量使用呢,那你就是具体的去学习那些注解呢,是什么作用就可以了啊。
05:06
好,那么这儿呢,是一类问题了,然后在下边儿这块呢,就涉及到了咱们讲的叫呃一类特殊的类,我们称它叫包装类,这个包装类跟基本数据类型呢是相关的啊,诶包装类的使用,所以这块你会看到呢,这三个箭头呢,其实就是特殊场景的一些结构的使用了。啊注解啊,枚举类啊,包装类啊是吧,这块的内容,诶我呢把它就也放到面向对象里面了,诶后续这块就是咱们关于idea使用的时候呢,诶咱们的快捷键呢,用了一些了,那系统性的给大家呢都过一遍快捷键,然后呢,包括我们如何在程序当中去做这个debug调试啊这呢我们作为两个补充内容,诶给大家呢讲解一下。好,这呢,就是整个咱们这一章的这个点啊,大家呢,先熟悉一下,那么首先我们来讲这个关键字叫做static啊。啊,那么对应的就是我把这两个Mo呢,也都提供好了,大家呢还是用这个Mo,我这呢,我写的话呢,我就用下边这个了啊第一个啊,关于时代的一个关键字的一个使用啊。
06:01
好,那么首先的话呢,我们看一看这个课件啊。哎,往下走。首先呢,我们回顾一下之前的一个场景,这个场景当中涉及到的这个属性,比如说以这个SQL源为例,啊,这呢double类型的一个readers叫半径了,诶这个属性呢,以前我们就是这样写的,里边呢是没有这个死呆的一个声明的,咱们把这种呢称为呢叫实例变量。啊,这以前也稍微提过这个事儿啊,所谓的实例呢,就是每个对象呢有一份儿啊,所以呢,当我们创建这个类的多个对象的时候,到了俩,每个对象呢都有一个半径啊,这呢是各自一份,互不影响。啊,下边你看有一句话啊,说呢,如果想让一个成圆面料。就比如说这里边这个readers啊,如果想要一个程序变量被类的所有的实例呢所共享,那么这时候呢,我们就用static去修饰就可以了。修饰完以后的话呢,它跟具体的这个实例呢,就没关系了,不是每个对象一份了,而是呢,整个所有的对象共用一个,这个我们就归这个类所有了,所以呢就称为叫类变量。
07:04
不太难理解,来,我们看下边这样的一句话,一段话啊。所以呢,当我们编写一个类的时候啊,实际上呢,就在描述这个对象的属性和行为,呃,并没有实质上呢产生对象,当我们通过new关键字啊这个去调用构造器的时候呢,我们才会产生对象,这时候呢,系统呢才会分配相应的空间给对象。哎,其方法呢,才可以供外部呢调用。哎,关键是后边这个啊,说有的时候啊,我们希望无论是否产生了对象。或者是无论产生了多少对象的情况下,某些特定的数据在内存空间中只有一份。比如说诶,所有的中国人都有一个国家的名称啊,每一个中国人呢,都共享这个国家的名称,不必要呢,在每一个中国人的实力对象中,都单独分配一个代表国家名称的变量。啊,这个应该能理解这个事儿啊,那就相当于是每一个中国人的话呢,他们有各自的内幕位置等等一些属性,每个对象一份。
08:06
诶,但是呢,这个中国人啊,大家的这个国籍,比如说啊,这个属性呢,没有必要呢,在每一个对象里边呢,放一份。我们共用就可以了。啊再举个场景,比如说大家呢,呃,现在呢,是住的可能好多都是这种单间了啊呃,等大家毕业之后呢,找工作,你可能会找离这个单位比较近的地方呢,租房子,通常呢,可能租的话呢,有的公寓的,有的是这种公寓性的,有的呢就是比如两室一厅啊三室一厅啊是吧?哎,假设呢是一个三室一厅啊,你进去之后呢,诶,每一个卧室。30吗?哎,每个卧室呢,里边呢,都有一个床啊,有一个桌子啊,有一个衣柜啊,每一个屋呢都如此,那你可以理解成呢,像这里边儿的这个床,哎,桌子衣柜可以类似于呢,我们这里边这个name和age一样。这个呢叫实力变量啊。就是每一个卧室的这个对象呢,有一份儿。
09:01
当然呢,也有共享的,那就是大家呢,共享一个客厅啊,共享一个厨房。呃,三室一平,有的时候那个主卧还有独立卫生间是吧,假设没有啊,哎,共享一个,比如说卫生间,哎,那么这些数据呢,就属于共享的了,就是大家呢,就只有这一份。哎,那么这些呢,如果我们看成变量的话呢,呃,就相当于咱们现在要讲的这种变量,就是怎么表现它就这一份大家共享呢,只需要呢,使用这个此deic来修饰就可以了。哎,就是这样子的啊好,那么接着我们再看这个方法啊,所以呢,在类当中声明的这个实例方法,就是以前咱们写的其实都叫实例方法啊呃,在类的外面呢,必须通过这个对象呢,呃,我们才能够去调用。但是有一些方法,方法的话呢,我发现他这个调用者跟当前这个对象呢,没有什么关系啊。啊,那么这时候呢,我们就可以考虑把这个方法呢,声明成叫类方法。说白了,就直接拿一个死在立去修饰就可以了。啊,用在这个修饰以后的变量。啊,准确的说呢,应该是成员变量啊和方法,我们就称为呢叫类变量啊,类方法也可以称为呢叫静态变量,静态方法。
10:10
啊,就是这个内容啊,回过来啊,这块我们来看一看啊,这个TE的一个使用,首先呢,关于这个关键字的一个翻译呢,诶我们习惯上呢,就把它称为叫静态的。所以说呢,刚才我们修饰的这个,呃,属性啊方法呀,如果用它修饰呢,就叫做静态属性静态方法。啊,也可以称为呢,叫类变量和类方法啊,它可以用来修饰的结构呢,有属性啊,有方法啊,还可以呢,有代码块还可以呢,有内部类。都可以。哎,针对于类中的成员呢,就差一个。扩大器是吧。注意构造器不能够用斯代IC克来修饰啊,讲完斯代利呢之后呢,其实你自然而然你也就知道了啊。好,那这块的话呢,我们目前呢,先来讲前两个。
11:00
诶,后边这两个呢,当我们去讲代码块和内部类的时候呢,咱们再专门的去结合着sta格去说就可以了,所以呢,这里边咱们主要讲的就是斯sta格来修饰这个属性啊,修饰这个方法。哎,把这两个事儿说清楚就行啊。好,那么首先的话呢,我们来看一下这个sta修饰属性的事儿啊。一说到这儿的话呢,咱们再做个复习啊,时不时的就给大家把这个知识点呢穿一下啊,这个变量的这个分类的话,我们提到过两种分类方式啊,第一种呢,按照数据类型。啊,这个都很清楚了啊,基本。呃,数据类型。对,引用啊,数据类型啊。好,具体这个细节呢,我就不多说了啊,这有八种啊,这个呢,我们也说了有好几种啊,这个我就略了啊好,那么按照在类中生命的位置呢,分成了叫。成员变量。哎,局部变量。好,这个呢,大家注意一下啊,那么这里边儿这个局部变量呢,我们提到了有方法内是吧,声明的还有呢方法的。行参是吧,哎,构造器咱们也讲了,构造器内。
12:03
哎,构造器的这个行参是不是都是啊。哎,所以呢,其实后边我们讲这个代码块内啊,也算是啊等。哎,这些都叫做局部变量。那么成液变量呢,就是你直接声明在这个类内部方法呀,构造器呀,他们这些外面的啊,叫成液变量了,成业变量以前我们没有说具体说再往下再分了,那现在的话呢,我们把成员变量说按照。是否使用此代的一个修饰?进行分类啊。啊,那么就分成了使用磁带这个修饰的。啊哎,修饰的是吧,修饰的这个叫成衣面料啊。或者呢叫属性也行,下个呢就不使用在这个修饰的。哎,这个应该很好理解啊,那么使用在这个修饰的这个成变量呢,我们就称为它叫做静态变量了。也称为呢,叫类变量。然后呢,不使用这个修饰啊,就我们原来的啊,非静态变量。
13:04
或者呢,对照着上面的类变量呢,它叫做实例变量。哎,就是这个概念。所以呢,现在你知道呢,咱们原来啊讲的这个,呃,成员变量的时候呢,因为咱们没有讲过死在这个,所以当时呢,咱们其实说的呢,都是这种变量。现在的话呢,咱们专门来讲一下这种变量。好,就就是看你是否用死在这个修饰了,OK,好,那这块我们来去写这个例子啊,在这个包下呢,我们去新建。啊,这个我就写成叫Chinese啊,中国人的一个测试了。好,把这个中国人这个类呢,为了方便咱们去演示这个测试,我就直接写这里了啊,现在叫Chinese。哎,这个呢,叫中国人的类啊。啊,这样的一个类,好,那么这个类里边呢,原来我们说哎,String型的name啊,Int型的age,原来我们都这样写,其实呢,现在我们说呢,这都叫做。呃,非静态变量是吧,哎。变量啊,或者呢,咱们也称为它叫实力变量。
14:03
哎,怎么叫实力辩证呢?就是咱们所谓的每个对象一份是吧。或者叫每个实例,实例就是对象的意思啊,一份,所以呢,在这里边儿,比如说我们来一个a Chinese是吧。啊,这个我们叫C啊,一个Chinese好,这c1.name等于比如说这个。咱说姚明是吧。哎,这c1.a。姚明得多大了?四四得40 40多岁了吧,差不多是吧。好,我就这样写了啊,这样写完以后的话呢,咱们针对当前这个类,咱们不也讲了object们这这个图方法了吗?所以呢,就out加insert啊,咱们整一个图整错了整。没错。点刚才点哪了,重来一下啊。点这是吧,好OK一下,哎,那这样的话呢,我们就把这个两个属性呢,给打印出来了哈,这呢是我们其中的一组,那咱们再整一组。
15:00
啊,姚明呢,也是上海的是吧,上海的话呢,这边是还有一个。嗯,刘翔是吧。刘洋现在已经,嗯,退役了,都是吧。这个多大了?好像也不小了,嗯,39吧,假设啊。假设了是吧,好这呢,你看我就造了两个这个对象啊,然后这两个对象里边关于name和A来讲,咱们以前也说过就各自有一份啊,所以这块我们去打印这个C1啊,打印这个C2的时候呢,他们打印出来这个信息呢,就互相不影响。哎,各自有一份诶。呃哦,C2是吧。这个都是C2的,忘了改了啊。再走一下。哎,这边啊各自呢都不影响,那这儿呢,我们就称为呢叫实力变量,就是每个对象有一份,那现在的话呢,我们说呢,诶不管是哪个中国人啊,大家呢,都有一个叫诶国籍是吧,我们称为他叫nation了。啊,就这样写了啊,那么这个nation的话呢,如果你要目前这样去写,那又是每个对象有一份了。
16:02
那其实呢,大家都共用一个就可以了,没必要呢,每个对象一份,所以呢,我就把它呢声明成叫哎斯static了,这呢就我们生呢叫静态。变量啊,也称为呢,叫类变量。OK啊。好,这个呢跟它对应啊,这个名字呢跟它对应,这个呢,我写完以后,哎,大家注意看啊,如果呢,我在这个位置。啊,这个位置呢,我们给这个C啊,咱们也可以呢,通过这个对象呢,去调这个叫nation啊,我给大家赋个值,比如说呢,叫。China。诶这呢,你看我就附上了啊,哎,我这个附上值以后,呃,咱们在这个位置吧,首先呢,我去通过C呢,调一下这个nation。然后呢,我再通过这个C2呢去调。C调的话呢,我们说没啥问题,就是China呗。哎,问题呢,就是你看我们这个C2呢,去调的时候呢,由于我们C2也没有去负过这个值,它会有值吗。
17:01
对女方呢,是不是也有值啊?呃,因为呢,它在整个我们这个内存当中啊,它的特点呢,就是只有一份了啊,因为就一份呢,所以你通过任何一个对象去掉,都会影响其他对象掉。所以呢,诶这块呢,也是China。好,这是一个点啊,哎,那以及的话呢,大家你看啊,我在哎这个位置吧。哎,或者说我这样啊,这个代码我就这样留着了,在这个位置啊,我通过这个C2呢,我再去调这个nation。我把它那改成叫CN了。啊,其实也代表是中国的意思了啊好,我通过C2呢去改的,然后呢,我们再打印一下这个C1和这个CR它的这个值。你会发现呢,这个C1的是不是也跟着改了。对的啊,因为呢,还是说白了就一份嘛。就一份的话呢,你谁去改,是不是都会导致别人掉的时候也改了。哎,对的啊,哎这呢,就是我们所谓这个静态它的一个特点,你看如果呢,你看我要把它给去了啊。
18:00
这表示就各自一份了。各自一份,你再回过来看这个事儿,他就不太一样了啊。你看这个时候呢,就有区别了啊,这个区别就成这样了啊,你给C1的nation呢叫China了,那我C2呢呢。我没复过职吗?诶是吧,诶那我通过C2呢,叫nation呢,我叫C了,那你C2呢就是C,那C的话呢,我我也有一份,我跟你没关系,所以呢,它还叫China是吧。哎,这呢就是实例变量的特点,哎,现在我们说这个呢叫呃,静态的。啊,就是我们刚才说的这两个点啊,整个呢,内存当中就一份被类的多个对象所共享。哎,就说清楚了啊,把这个事儿清楚以后呢,我们这块呢,来总结一下他们二者的一个区别。啊,其实足可以呢,说明问题了,我们通过这样的算是六个问题啊,来对比一下他们二者。好,他们二者做对比,静态变量啊,和这个实体变量啊。
19:00
呃,首先呢,从这个个数上来讲,静态变量的话呢。嗯,是不是说就只有一份啊。嗯,在。内存空间中。哎,只有啊一份被类的多个对象。来做共享是吧。哎,这样的,那实力变了呢。哎。对我们说呢,呃类的每一个实例是吧。哎,这个实例呢,或者理解成就要对象啊,哎,是不是都保存着啊,一份实例变量啊。哎,就是每个对象一份OK啊,所以这点呢,你看就有区别,然后第二位置啊,第二个区别,他们的二者呢,在内存当中存放的位置啊,也是不一样的啊,这个呢,要说起来的话呢,嗯。就画长了,来我们看一下这个PPT啊。我画了几个图,这个图呢,就非常直接的呢,去表达了这个事儿了。呃,一说到这个静态变量啊,一般传统的咱们都说呢,它是在方法区的。
20:04
啊,在方法区的包括呢,大家你现在看很多网上的一些呃图啊等等的,你发现呢,把静态变量都放到这个方法区的这个位置了,这块要注意呢,它其实是在JDK6当中啊。大家可能会发现我这块呢,呃,有一个小括号啊说呢方法区怎么这块呢叫永久带呢。哎,注意哈,这个站对方法区这个概念呢,是GVM规范说的。啊,这块呢,稍微理解一下啊,这是GM规范说的就是Oracle它发布的一个规范啊,上面提到战队方向去了,那么具体的话呢,我们说呢,有。实打实的一些虚拟机了,比如说像这个,呃,Oracle官方呢,他也发了一个叫houseport是吧。哎,这呢也是个虚机,是不是就是咱们,呃问2CMD咱们的Java杠,我这块看到的这个吗。呃,这就是实打实的一个虚拟机了啊,那么这个虚拟机啊,它呢,在实现这套规范的时候呢,它这个方法区呢,它叫做永久带。
21:08
所以大家你可以把这个,呃,这个这个在house里边呢,这个永久贷呢,你就看成是方法区的一个具体的实现就可以了。所以说呢,在GDP6当中啊,你也可以说这个静态变量啊,静态这个域就是field的意思。它呢,是放在这个永久袋里的。好,那么到JDK7的时候呢,它有个变化啊。他呢,把这个静态变量,或者叫静态运呢,给从方法区呢移走了,放到这个堆里边了。啊,放到堆里边了。OK。啊,为什么往这堆里放呢?因为呢,你看这个堆呢,我们平这个JC呢,是比较频繁的方法区呢,我们其实很少去JC。所以导致这个回收的话呢,就会不及时啊。哎,所以它给放到堆里了啊,然后这块还有应用在在GD8的时候呢。啊,以及以后那就到现在了啊,它还有一个变化呢,就是这个方法区呢。
22:00
换了一个实线,它叫圆空间了。啊,开始使用这个本地的这个内存了,这个细节我就不多说了啊,换完以后的话呢,这个静态变量呢,也没有换回来。说白了就是这个静态变量还是在这个堆里边的。这个呢,是看官方文档明确说了的啊,咱们也可以去呃测试啊测试呢,当你这个静态变量足够多的时候呢,最后发现你通报的啊,就我们说溢出的是堆,而不是方法区,可见呢,就是这个静态变量也确实呢啊,以后呢,还是在这个堆空间的啊,这个都可以验证的啊这呢有一个变化啊,就说到这就可以了。哎,那么回过来,那我们再去说这个问题,说这个静态变量放哪儿呢。哎,所以我们可以简单来说啊,GTK6。啊及之前是吧。这个呢,是存放在。哎,咱就叫方法区吧,哎,我不管你叫永久带啊,还是叫这个圆空间了是吧,就是方法区啊,然后JDK啊八那错了,七级之后啊,它呢是存放在。
23:02
堆空间。哎,只有这样的一个点啊好,那么对于我们这个实例变量呢,它存放在哪。对,它自始至终啊,都存放在堆空间中的对象实体中是吧。堆空间的对象。诶,实体中啊,咱不是说每个对象一份嘛,那你就看你具体是哪个对象了啊。好,这就结束了,然后下一个问题,你看我这块我写了个叫加载时机。诶说这个还有区别呢。有啊,这个点的体现呢,大家你可以看我这儿哈。咱们上来呢,是不是就造对象了?咱们先说实例变量吧,像这里边儿这个name和age,你说他俩什么时候有的?是哎对,是不是创建对象以后才有的是吧?哎,那这我们就关心一下,说那这个nation。啊,这个啊,我说呀,跟对象啊,咱们说了多个对象共享了,其实跟对象没什么关系。哎,那也就是说呢,它跟这个类是有关系的啊,所以呢,你看啊,我就刻意的为了说明这个问题,我上来呢,我就去试图调一下,我就先不去考虑你对象了啊,因为在这个位置的时候还没创建对象呢。
24:11
你看你会发现呢,我直接通过这个Chinese这个类哈,我就可以去点。哎,我也可以去输出一下,当然你现在来看的话呢,这个值呢,其实是个nor是吧。诶,在最开始这是闹啊,哎,那我们也可以给他附上值。比如说这块呢,我就写成叫中国是吧。来附上这以后呢,看我现在呢再去打印。这时候你发现呢,我这个中国就附上了,此时的话呢,对象还没有创建呢,我这个属性呢就有。可见呢,它是什么时候加载的呢。对,诶我们说呢,就是随着类的加载而加载,所以呢,有了类就有了这个静态变量了,我们就可以去调用了。OK啊,好,回过来静态变量,它的加载时机要随着类的加载而加载。
25:06
哎,这是有区别的,而且呢,由于。啊,什么样,由于类呢,只会加载一次。哎,只会。诶加载一次,诶所以呢。咱们这个静态变量是不是也只有一份啊。啊,也。只有啊一份啊,那这边就跟这块就统一了嘛。好的,然后这个实例变量呢,哎,随着对象的创建。啊,而加载也行,而分配也行是吧。哎,这个呢是它的一个特点,所以呢,我们说呢,呃,由于对象呢有多个,所以说呢,你这块呢,每个对象呢有一份儿是吧。哎,每个。啊,对象啊,拥有。一份,哎,实例变量啊。好,这呢就说清楚我们这样的一个特点。其实大家你就能理解了,为什么我们说刚才提到这个静态变量,它还有个名叫类变量呢。
26:04
啊,为什么你叫实例变量呢?啊,因为呢,每个对象一份,而我们这个变量的话呢,它是随着类的加载而加载的,它跟对象没关系。诶,所以这块呢,我们就自然而然的就称为呢,叫类变量。就好理解了啊好,下边来看这个调用者啊,那么这个静态变量呢。怎么说呢,可以被类是吧,直接调用啊。啊,也可以。使用对象调用是吧。啊,那么对于实例变量呢。只能使用。哎,是不是对象进行调用啊。哎,优先的明确一下,这个泪呢,是不能掉的啊。哎,那这块的话呢,我们如果呃,画成一个这个小表格的话呢,你看就是这样的啊,这叫类变量。呃,或者说这个这个我们就要累吧。这个呢叫做对象啊,然后上面这块呢,我们在这儿啊,叫类变量。哎,然后后边呢,叫做实例变量。哎,这样呢,我们看一看能不能调用啊,哎类呢去调类变量。
27:02
可以是吧。呃,那么对象呢,叫类变量。也可以。好,真的都是噎死的啊,然后呢,这个类呢,去调实力变量。是不可以啊,那对象呢,调实力变量。可以。哎,看这有这样的一个区别啊。应该呢是比较好理解的。啊,这个理解的话呢,大家就从这个生命周期的角度去解释就行啊,我简单来说一下,比如说这个呢,线,我理解成是这个类的一个加载啊。那么内在加载的时候呢,实际上呢,我就同步这样画一下吧,比如这个呢,我们也称叫做类变量了哈。就是在这个去修饰的啊哎,那么这时候呢,类的加载跟这个在这个变量的这个加载呢,是同时进行的,然后之后的话呢,我们会创建比如说当前这个类的对象。这呢是创建了一个对象,这呢又创建了一个对象,哎,然后等等等等等啊后续的操作,然后呢,最后。哎,这块呢,我们用这条线来表示呢,整个这个泪呢,就是消亡了啊。
28:05
好,我就简单这样画一下。呃,那么由于呢,我们这个静态变量随着类的加载而加载,所以呢,我们用类去调它呢没问题。你上来拿类去调这个实例变量,这个对象可能还没创建呢,是吧,所以这块呢,这个就不行了。啊,那么反过来说啊,我们这个对象呢,创建了里边呢,就有这个实力变量,我通过这个对象叫实力变量,天经地义。然后呢,我要是调之前已经加载过的静态变量,当然也可以了。啊对,因为你后出生的,可以调先出生的。先出生的,你想调后出生的,这个不行。你说我现在先给我儿子先借上2万块钱。现在还没儿子呢是吧?这不靠谱啊,你说跟你爸借两两万块钱那可以,你爸比你先出生是吧?哎,这个往前调是可以的,不能往后调啊。那么这呢也同样的道理啊,哎,那么对象呢,消亡了,消亡以后呢,这个实力边量呢也就没有了啊,然后呢,在消亡之前呢。就是这个消亡的时候呢,跟着我们这个静态变量呢,也是同时消亡的。
29:02
哎,这样的过程啊,哎,所以这块呢,也自然而然的就指出来,这个叫消亡的一个时机啊,静态变量呢,就是哎随着啊类的卸载。啊,这个类呢,我们称为它叫卸载啊而消亡。而这个实力变量呢?随着对象的。消亡。嗯,而消亡是吧。哎,就可以了啊行这个事的话呢,大家应该也比较好理解。啊,那么关于我们说的叫静态变量跟实力变量对比呢,其实也就说到这儿了。哎,OK,那大家呢,去通过这些点,你不用死记硬背啊,哎,能够体会一下就可以了。那这个体会完以后的话呢,关于这个内存结构这个事儿呢,咱们稍微的可以画个图啊,哎,就是这里边儿我给了几行代码,稍微的我们看一下啊。啊,没方法一进来这儿呢,对应的就是这个战争就进来了。这是妹。哎,这样啊,好,那么在这里边呢,呃,这个行三这个X呢,这块也也会有一个局部变量了啊,这个我就把它给略了,哎,然后接着我们考虑这个叫C1啊。
30:04
然后呢,在堆空间里边,我们用了一个Chinese的一个实例。哎,就是用了一个Chinese啊,这个就放到这儿了,然后呢,Chinese这块呢,我们声明了有这样的几个属性哈,Name age,因为他俩呢是非静态的,所以直接呢放到我们这个对象里边。Name。配置。哎,这样啊,然后我把这个变得稍微的小一点啊好嗯。这呢,我们接下来就通过这个指针呢,这不就指过来了啊。哎,吃香糖。行,这是一组,嗯,还没完事哈,嗯,这时候呢,它有默认值,呃,然后的话呢,我们还得给它呢,接下来显示赋值,默认值呢,这个no,这个是零,我就不写了啊,接着的话呢,这个呢,给它复制为叫刘翔啊。然后呢,对应的这个A呢,是39是吧。哎,这样啊好,呃,这块呢,其实我上来就把这个对象这块给创建了,实际上呢,在这个对象创建之前呢,我们这个类呢,肯定是先加载的,在加载这个类的时候呢,这个静态的这个变量呢,其实就已经有了啊。
31:10
这个静态变量的话呢,这就看你JDK的这个版本了,如果呢,JDK6呢,咱们就把这个。在这个声明的这个nation呢,就放在这儿了。在你整个这个类的一个静态空间当中啊,这个我们称为呢,叫一个nation。那就他啊。哎,这呢,我把它变得稍微的小一点啊。Nation,好呃,然后这个nation的话呢,因为是个string类型,它一开始的这个值呢,其实就是个no,这是在GDK6当中,如果呢,在GDK7的时候呢,这个呢,就把它放在了我们这个堆空间里边了。这空间里边呢,专门呢有个区域呢,我们说比如说就放这个类当中的这个静态属性的啊,就放到这儿了啊好哎,就不单独的在这块就放一份了,接下来的话呢,你通过这个对象呢,去调这个nation的属性。啊,因为对象呢,我们都知道你所属的类。
32:00
哎,所属的类呢,我们再去找你类里边这个nation就能够找得到,哎,把它呢改成中国。OK,把这个呢,就做了一个修改啊。在中国啊。诶,这样就可以了。诶,我们就相当于替换了它了啊好,这呢,就相当于是我们代码呢,执行到这儿的目前的一个场景。好,那么接下来的话呢,我们这又造了一个对象呢,叫做C2啊。接下来这个叫C2。那这个我们稍微的往这一点,这是这个C1啊好,那么这个C2的话呢,又创建了一个新的对象,哎,我们就得重新的再给他扭一份,哎,然后对应的也会有相应的这个相应的这个属性值。哎,这个呢,姚明啊。诶没问题,哎,这个年龄呢,这我写的是42岁,好,哎,这个没问题啊,各自有一份嘛,然后接着我们通过这个C2的话呢,当然这个地址呢,我们也先附上啊。通过这个CR呢,去调这个nation。
33:01
啊,这个nation呢,把它改成叫C。那你就把这个给改了。哎,这个我们给大家调一下啊。哎,就这样了。嗯,这样啊,好,这块我稍微的给它来一个框啊,这个呢,就是我们说这个叫金泰玉了啊。这个填充就不填充了。看不见了。这个呢是给它叫置顶。吴田中。嗯。嗯。再画再画,再。重来一个。胡填充。哦,没有边框了是吧。这有了啊。
34:00
哎,这么着一下啊。哎,这个呢,就是我们说的这个叫静态域啊,这样的一个位置啊。诶这样一个场景行,那这样的话呢,我们就知道呢,它诶大体的一个形式了啊,那由于呢,你通过这个C2呢,把它改成C身了,所以呢,导致呢,就是相应的,不管是C也好,C2也好,包括呢,我们这个类本身去调这个nation的时候呢,都变成这个C了。那就这个意思好,这块的话呢,大家去理解一下我们这个静态变量它的这样一个场景啊。诶回过来看这个我们就放在这儿了。Shift加F6啊静态。变量的一个内存解析啊就可以了。好,这呢,关于这个静态变量呢,我们就说到这儿。行,那么接着的话呢,咱们来看一下这个代这个修饰方法啊,上面呢,我们说了修饰这个属性了,哎,只要呢,这个内容呢,大家基本上能够听进去,那么修饰方法这块呢,其实也不在话下了,是吧,也比较好理解了。
35:00
那如果用代这个修饰的方法呢,这个方法呢,我们称为它叫类方法啊,也叫做呢静态方法,有了上面一个打底之后呢,我们其实也就知道这个事儿了啊,首先第一个点我们可以理解成叫随着类的加载而加载是吧。啊,随着类的加载而加载啊,这个呢就很好理解了,然后下个问题,那因为呢。你是随着类的加载而加载的,那进而的话呢,我们直接通过类去掉,是不是也就合情合理了。啊,所以说我们可以啊。哎,可以通过,哎我们说呢,就是哎累。哎,第二。这个叫静态方法,哎的方式,诶直接啊调用。哎,这个这个静态方法啊。好,这个呢也比较好理解了,那咱们就直接来说一下啊,好比如说呢,在我们刚才这个Chinese的这样一个类里边,我们就可以来写一个方法。哎,Public static啊,Avoid给我买一个show方法。在这里边我们写一句话说,诶,我是一个啊,中国人。
36:03
诶这就可以了,好,那么这个方法呢,它是一个静态的,随着类的加载而加载了,所以说我在当前咱们这个代码里边,在你没有对象之前哈,诶我们的直接就可以呢,去调用了,通过我们的这个Chinese点,哎,我们就调这个收方法。改正我们这块呢,做一个执行。哎,没啥问题啊,这不就调用了吗。哎,这个呢,就是我们说的这样一个事情啊好,那么这个完了以后呢,接着我们来看一看,关于这个静态方法啊,多少也是个方法了是吧,前面的话呢,我们提到过啊,说方法内呢,可以调属性,可以调用其他的方法,那这时候我们就要说清楚了啊,死在这个修饰的方法叫做静态方法了,那么静态方法内啊,可以调用哪些结构呢。是吧?比如说静态方法内是否可以调用静态的属性和静态的其他方法,是否可以调用非静态的属性和非静态的方法?啊,那么结论呢,大家呢,其实应该也能猜测出来了是吧,通过这个生命周期呢,其实我们应该猜的八九不离十了啊,那结论呢,就是说静态范围内可以调用静态的。
37:11
哎,这个属性或静态的方法,然后明确呢,就是不可以。对,调用非静态的结构了,我就直接啊。啊,那这个当然了,就是比如说呃,这个属性和方法是吧。等等啊好,那这块呢,回过来啊,咱们看一看啊,比如呢,在这个Chinese这里边,咱们写一个普通的方法,那我就写到这了啊。哎,Public avoid,哎,比如来一个这个,哎,Eat是吧,哎吃的东西呢,不一样,四针形的food。啊,因为每个人吃的东西可能都不一样啊,所以这种方法呢,就不是静态的了啊,所以呢,诶,我喜欢吃啊。哎,加上我们这个叫负的了。好没问题啊好,这呢是一个普通的方法,哎,这呢是我们所谓的这个实例变量,那我们看看在这个输方法里边,首先我们看看这个调用。
38:05
哎,调用那个,哎静态的结构。静态结构呢,这里边儿,比如说我们这个静态的这个叫nation啊好,我在这儿呢,就直接呢,去比如打印一下说nation。你看这块我们直接调了,你看是没有问题的啊,来这呢,调静态的属性没问题,那调其他的静态方法,比如这块我们再可以再写一个啊。我这叫一个method吧。哎,这个我们输出一下啊。这就说哎,我是静态的这个测试方法啊好,那么这个方法的话呢,我们在这呢去调一下啊METHOD1没问题。哎,那就说明呢,我们可以呢,调用静态的结构好接着。哎,这个我们去调用非静态的这个结构。哎,非静态结构,那就对应呢,我们一个是想调一下这个name。
39:03
诶,加上我们这个所谓的name啊,这块你看我一写啊,相对应的这块呢,就报错了啊哎就不行啊,诶其际上其实这块呢,大家去理解的话呢,这个name呢,通常我们说呢,前面呢,相当于可以说省略这个Z点是吧。啊,那这块我们要把这个点补上的话呢,其实也这样的也不行,这次呢表示叫当前对象啊。那你想一想,我们通过类去调的这个方法,是不是可能还没有对象呢?哎,所以自然而然的就不能够去调这样的这个属性了啊好这个就不行了,好,那对应的我们去调方法,刚才有一个一方法嘛。啊,这个呢,喜欢吃。比如说这个饺子啊。北方的一般喜欢吃饺子是吧,诶你看这时候我们调呢也不行啊,其实它前面相当也是有一个Z点一样,同样的道理啊,这块呢我们可能还没有对象的,所以呢无从谈起这个Z次的问题了,所以这儿呢也不行。哎,这就说清楚了啊好,那这对应的就是我们说的这样的结论,那么反过来讲啊,咱们顺带呢说一下这个,呃,静态非静态方法一个调换问题,那其实对应的就是也是这样的一个表格了,哎,我把这个呢原封不动的拿过来,其实这块呢,大家发现呢,都差不多哈。
40:10
类也好,对象也好,这呢我们叫哎类方法是吧。啊,或者这块你叫静态方法也行,这个呢,咱就叫做也起个名字叫实例方法嘛,就是非静态的方法了,啊,那你会发现呢,是不是这块呢,都是这样一个表格的。啊,通过类呢,咱们可以调这个叫类方法,不能调这种实例方法,对象的话呢,哎,可以调这个类方法,类象呢也能调这种实例方法。啊,这是跟我们上边这个类似的这样一个表格,这样一个情况啊。呃,那回过来的话呢,就相当于是啊,在我们的这个位置哈,我们是通过对类呢调的这个静态的方法,那我们也可以通过对象呢去调这个静态方法,比如说这个C一点,我们刚才有一个叫受是吧。哎,这不也照样能掉吗?这个方法这不就是静态的吗。啊是没问题的啊好这个呢是他当然呢,大家你也别说,说你现在是拿这个对象去调的,那这个对象呢,叫C1,这不就是C1吗。
41:07
啊,这个倒是拿对象调没问题,但问题是我们也可能是拿类来调的,那类里边呢,就不存在这个这次之说了啊。啊,这要注意一下,好,那么反过来讲啊,我们现在呢,有一个普通的哎,非静态的方法啊,我就写一个叫VO,我叫做METHOD2了。好让我们说一下啊,说呢,哎,我是。啊,我是非静态的,呃,这个测试方法了啊,那么这个方法里边呢,我们如果调用非静态的这个结构可以吧。哎,对这块呢,你发现呢,是没有问题的啊,啊以前我们都这样调啊这块前面这个这呢,不就是你这个方法的调用者。哎,这个调用者一定是一个对象了啊,所以呢,写这次没问题啊好,接着的话呢,我们看一看能不能调用静态的结构。是不是也可以了?啊,因为咱们刚才说了啊,对象的话呢,是不是你可以呢,去调这个类方法是吧,既然你能调类方法,前面也说过呢,你也能调这个类变量了,那我们在这儿呢,哎,这个所谓的Z呢,其实就是我们这个方法,如果回头要调它的话呢,是个对象,对象呢,这不就相当于是调了它,调了它。
42:17
对象能调属类类变量,能调静态方法,所以呢,我们这儿呢,就能写在非静态方法里边了。啊,这就这样的场景啊,行,这个呢,相当于是咱们,呃上面内容呢,算是一个呃补充的一个点啊,诶我写到后边一点。哎,补充点呢,就是在呃类的非静态方法中啊,可以调用当前类中的呃静态。呃,结构。哎或啊,非静态结构。啊,那这个所谓的这个结构的话呢,主要就是指的我们这个叫诶属性和方法了啊,那就是你静态的属性,静态的方法。啊,以前的话呢,都是非静态的,现在呢,就多了一个可以调静态。
43:02
那就可以了啊。好,这呢是我们说的这个事儿,然后包括呢,刚才呢,我们其实也看到了一个场景,什么场景呢,就是这个static啊,它呢修饰的这个方法内呢,不能使用Z词啊。对吧,诶你看这个方法呢,这不是我们写的这个啊,哎,上面这个吧,在这里边的话呢,我们用这次的话,它就报错了,因为呢,它叫静态的啊,其实呢,我们就是用类来去调它。但你这块呢,有这次呢,这次表示这个实例变量了啊,所以叫对象了,可能我们还没对象,所以呢就不能够用这次。那这把不能用这次,但你看这个nation前面你看我啥也没写啊。这是谁掉的?对累掉的是吧,你说我这块就写个C点。哎,首先呢,你说拿对象去调这个静态变量呢,倒是能调没问题,但问题是呢,在我们这个里边啊,它省略的不是Z4。还是那个问题,因为我这个内调的时候可能就没对象是吧。
44:03
诶,所以这块呢,省略的是谁呀。对,咱们看作呢,就是省略了当前类啊,说白了就是这个Chinese给省略了。啊,省的是他包括这个呢也是一样,前面省略的都是这个Chinese。啊,这个注意啊,所以呢,在我们这静态方法里边呢,你就没有this之说了啊,就不能够使用this,不能使用this,也不能使用super。啊,注意这个super的话呢,其实也是基于你当前这个对象,然后再去调副类中的结构,还是那个概念,根本都没有对象,只说了,所以修呢也不行啊注意。啊,这块大家要小心一点啊,所以呢,由这个触发呢,我们在静态方法内调静态这个属性或静态方法时候呢,相当于这个前缀呢,省略的是。啊,当前类是吧。哎,这个我在这儿稍微写上啊。这个属性和方法的前缀啊。使用的是当前类。
45:04
啊,这是它,所以呢可以省略是吧。啊,因为呢,你这个调用者的话呢,这不也是当前类吗。所以呢,我们就给省略了啊。好,那么关于方法这块调用呢,其实就说完了啊。哎,就这些内容就行。嗯,不是特别难理解啊。好,那么由这个出发呢,诶咱们这块呢,问两个问题,这个呢在我们实际开发当中,其实呢是有意义的,比如第一个问题。呃,静态方法,静态变量都讲完了,那我们在实际开发当中,以前呢,从来没有考虑过用在这个去修饰,呃,变量修饰这个方法的事儿,现在既然讲了,那以后你就得考虑了,那么问题就是什么时候我们需要将这个属性生命成静态的呢?怎么着?就是啊类呢,它可能有多个对象,多个对象的这个值是一样的是吧。嗯。都一样,那就都都要给他静态吗。
46:02
通用通用的就是说,呃,通用是啥意思。都一样的啊,通用,其实换个词呢,叫共用是吧。呃,共用的话呢,在对应一个词儿,你可以理解成就是大家可以共享是吧。对啊,就像刚才我们说的这个房子一样哈,对吧,那这一个房间这个房间这个房间这三个房间里边这个床呀,桌子呀,衣柜呀,是吧,都是你各自的。啊,各自有一份的啊,这个你把你的这个床呢。给睡塌了是吧,呃,人家这个呢,其实也没啥事儿是吧,诶那共享的概念呢,就是说呢,咱们就共用这一份儿。比如说你旁边的这个住着一个美女是吧,然后呢,你自己下班比较早,在厨房里边一顿收拾啊,整的老干净了,做了一一桌菜是吧,然后你就回去了,那他一回来一看,哇,哪个男生这么好是吧。他也能看得见啊,因为他也能够访问。啊,因为呢,就是大家共享的是这样的一个数据了是吧。
47:00
OK哈,行,哎,那么这里边呢,哎,我们就要考虑说什么时候需要去生命成静态的呢。哎,你要考虑的就是哎这个属性呢,是否被类的多个对象呢所共享。是吧,就是我们就设成一份呢,你看合不合适。而且你设置成一份的这个还有一个特点呢,就是大家呢,对应的这个值呢,其实也是一样的是吧。哎,那么这时候呢,我们就考虑呢,可以这样来做啊OK,这呢,其实也就是我们的其中一个点啊说呢,你什么时候呢,需要这样事儿呢,我们说判断,哎当前类的多个实例。啊,是否啊能共享。哎,共享此,哎这个成员变量。啊,并且呢,诶,此乘员变量的这个值呢,还得是相同的是吧。值啊,是相同的啊,你像我们说的,每一个中国人的名字啊,和年龄都不一样,那显然呢,这样的属性呢,是没有办法做共享的。
48:01
啊,这是我们说的这样一个点啊好这呢是它了,然后另外一个的话呢,我们在实际开发当中哈,大家你会发现呢,我们常常呢,将一些呃常量呢,就设置成是静态的了。在最后写上啊,说开发中啊,我们常将啊一些常量啊,生命成是静态的。比如说像咱们这个麦斯这个类是吧。哎,中的这个叫派。哎派呢,咱们知道就是3.1415926等等等等是吧,这就是个常量啊,也不能去改,那既然呢这是个常量呢,大家就共用一个得了,哎,所以我们就声明成是四代顶。OK啊行这块呢,我们关注一下这个点,哎,这个呢就完了,然后呢,对应的话,你看一看说这个,诶什么样的这个方法声明成是静态的呢。好像没什么概念是吧,我提示大家一下啊,你说呢,我们这个类里边呢,有一个静态的变量,这个变量呢,假设我给私有化了。
49:03
那我们是不是也得盖塞是吧?那你说此时针对于这个属性,如果要是提供盖塞的方法的话,你说我们是写成静态的呀,还是非静态的。首先说我要设成非静态的概率方法行不行呢?语法上。其实行,因为你非静态的方法可以叫静态的呀。是吧,我要盖塞方法呢,是非静态的里边叫静态的,这个它语法上可以是吧。哎,但是呢,我们一般都呃设置成静态了,你看哈,我这块让它自动生成。Out,加insert,然后写get set,我就光光考虑这个nation啊,你看我这块来一个OK,哎,你会发现的,你看。它都自动给我加上。啊,为啥呢,首先说呢,我们去掉的话呢,语法上来讲是没问题的是吧。啊,语法上没问题哈,但是呢,建议呢,我们都也惊叹,说白了就是让他们的生命周期呢都一样。
50:00
既然呢,你把这个属性呢给静态化了,那就说明就这一份了。啊,你又私有化了,不想让我掉,你想让我盖三方掉,好,那你这块呢,自然而然的就应该让我用类去掉呀。哎,所以说大家呢,生命周期就一样啊哎,那也就是说什么时候这个方法生命成静态的方法呢?那就是如果我们这个方法内操作的这个变量呢,都是静态变量,那么此方法呢,自然而然的就也声明成静态方法。这就是诶方法内操作的这个变量啊,如果都是静态变量。啊,也就意味着而非实例变量是吧。啊的话则此方法啊建议。哎,就声明为啊叫静态方法。哎,这是一个它了啊,然后另外的话呢,在呃,实际这个开发中我们会发现啊,我们常常呢,将工具类当中的方法呢,都声明成静态方法啊。
51:00
哎,工具类中的这个方法。啊,声明为静态方法,比如说。哎,咱们前面讲的这个AR是吧。在这个工具类。哎,包括呢,你看咱们说这个math,呃,一定程度上来讲呢,它也算是一个数学的工具类了,那么这里边儿的方法呢,通常都是静态的。啊,看一下啊。比如这块我们写一下,这个叫A。再点开。回过来啊,你看这里边儿呢,我们这些方法呢,你看都加了static。所以呢,之前啊,没有同学问啊,其实你问的话呢,这个我也不太好跟你去说是吧,你会发现呢,前面我们在讲这些方法的时候呢,比如说做这个ES呀,啊调这个so的方法呀。哎,当初呢,咱们调的时候呢,是不是我们就拿的这叫ara点来调。哎,对,就直接拿这个类点来进行调用的,就是意味呢,它是静态方法,所以可以直接调啊,换句话说的话呢,你说诶你是静态的,那我要是不静态的话呢,那就拿对象调,那就意味着你得拗一个A的一个对象。
52:03
你会发现呢,我拗的这个对象,我叫A1。跟我我换了一个,我叫A,我我在你个对象,我叫A2。你会发现呢,这个不同的对象去调这个方法。好像也没什么区别。因为主要的区别呢,是不是在于这个行参了。对,所以说呢,既然如此,工具类的这个啊,你拿哪个对象调都没有什么区别,那不妨呢,我们就静态化了,用类来调。那么数学类呢也一样,咱们当初呢,不就是哎,M要那个随机数的方法。Random是吧,调这个开方的方法,这不都是拿类来调的吗?行,那由于呢,咱们现在讲了这个静态了,哎,大家再回忆一下,咱们最初讲面向对象的时候呢,当初哎说过一个这么个事儿啊。最后这。哎,你看这儿是吧,诶当然我们还说这个很重要啊,说呢创建类到对象,通过对象调用其内部声明的属性和方法。
53:01
对,也就是以前呢,咱们都是对象点属性,对象点方法,这个呢我们一直如此,那么在我们今天讲了静态之后呢,你会发现呢,其实还有一类方法呢,不用对象去调了。哎,可以用类来调,那就是静态的。啊,就是这样的特点啊,那基于此啊基于此,大家你再回来看一眼啊,这呢是测试类,这是个may方法是吧。啊,其实呢,还可以这么着,比如我在当前这个Chinese test这里边儿呢,我们整一个。Public。哎,我static word,我就叫一个test吧。哎,说呢。哎,这个是吧,哎,我是一个静态的啊static。哎,它的一个,诶测试方法啊,好,你看这个我写完之后呢,这个方法如果我想在may方法里边调哈。以前的时候呢,咱们这个方法都不是。
54:02
静态的嘛,非静态的嘛,是吧,所以我们要调的话,是不是得先创建你这个测试类的对象。那通过对象呢,是不是在吊塔?这是以前哈,因为呢,你直接要在这去调这个test的话呢,它不就报错了吗。不行是吧,现在的话呢,如果你要是给它生命成静态的话呢。哎,静态里边就可以直接调静态了,你就不用再去造对象了,说白了前面省略了Chinese test了。啊,这样。哎,注意这样一个小细节就可以了啊好这呢,就我们说的静态的一个关于修饰属性,修饰方法啊,这样的一个场景啊。
我来说两句