00:00
那接着的话呢,我们讲完这个静态变量以后呢,来提一下这个叫静态来修饰这个方法,静态来修饰方法,那很自然而然的这个方法呢,就称作叫静态方法,那静态方法和我们以前叫非静态方法有什么区别,其实大家呢,有了这个静态变量或者叫类变量这样的一个想法以后,这个呢,其实也很好去理解了。啊,静态方法就是使用sta这个修饰的方法叫做静态方法,那么我们其实在这儿可以直接呢来写一些关于它的一个特点啊,比如说第一个直接这样写个E静态方法,它是静态的,是不是就也意味着是随着类的加载而加载啊。那既然你是随着类的加载而加载,我们就可以通过是不是直接用类的这样方式去调用了。的方式进行调用,这个能理解吧。
01:03
原来的时候呢,我们非静态的这个方法,像我们这个C1和C2,我们当创建了这个对象以后,我们在这个类中,比如说我定义public叫eat吃是吧,这个中国人吃中餐。这呢我写了一个方法,这个方法的话呢,是通过我们对象来进行调用的,那也就是说呢,我们通过这个c1.it我是可以调的。这是原来的时候都是这样整的,那现在的话呢,如果我们有一个方法呢,是叫做静态方法。Static word,比如我们叫一个瘦方法,说我是一个中国人。行,这呢是一个静态方法了,那么这两个方法呢就不一样了,这个方法的话呢,是随着类的加载而加载,其实包括咱们后边讲的这个静态的代码块也好,内部类也好,凡是静态的都是随着类的加载而加载的,既然你是随着类的加载而加载的,当我们有类的时候呢,就有它了,其实咱们就可以直接通过类呢来进行一个调用,第二你看我这时候直接呢可以去调这个收方法,我们执行的话呢,也是可以执行成功的,没有问题。
02:26
主要呢,就是由于它随着类的加载而加载这样的一个情况。行,这呢,就是我们说的这个静态方法这样个问题啊,那么我们要是通过这个对象去调这个静态方法可以调吗。是不是有了上面的经验以后也可以啊,那其实呢,这个清楚以后呢,咱们下边也可以画一个类似这样的一个结构。这样此时的话呢,我这叫一个静态方法,这个类方法也行,类方法呢,就是叫的稍微少一点啊,你叫静态方法吧,这个呢叫实例方法,实例方法其实用的也说的也少一些,就非静态方法吧,好,那这个图你看有没有需要改的这个八呢。
03:19
类来调静态方法没问题,对象呢来调呢也是没有问题的。这枚举例其实肯定可以的,然后呢,我们用对象呢,以前都是调非静态的,主要呢,归结就是类呢,能不能调非静态的不能。哎,类不能掉这个飞行泰坦,就是说我们通过这个Chinese。我们去调这个it是调不了的。这调不了的,跟我们上边这个呢,是同样的一个原因,不能呢使用类去调这个非静态的方法。或者再换句话说呢,你看我这样写个这个方法public void,我写一个叫info方法,这个info方法里边我去输出一下叫name。
04:08
我再接着逗号输入一下这个A。通过这个呢,可能更容易说明这个问题,这呢是一个非静态的,如果说我们使用Chinese来调一下这个in方法,假设可以的话。假设可以的话呢,那你就得是调用输出一下name和age,那这时候就得问我这时候用Chinese这个类来调的,那你输出谁啊,输出马龙啊,姚明啊。是不是都不太合适啊,那因为这时候你也没说是哪个对象,因为咱们这个属性呢,是归具体某一个对象所有的影龙类去掉呢,那也不知道掉的是哪一个,本身呢,也不可以,这就错误了。行,这呢我们就能说清楚了这样一个问题,跟咱们上面说的这个属性这块呢,是同样的一个事情。
05:00
行,这个说完以后,我们再说一个,像属性这块呢,不同的点,那就涉及到方法里边呢,是可以调方法或者是调属性的,那这里边儿我们比较关心的就是在静态的方法中,我们能不能调。这个非静态的一些方法,或者能不能叫静态方法,能不能叫静态的属性,或者是非静态属性这样的问题了,那这个结论的话呢,其实大家呢,可以推演出来了,就从这个生命周期的角度去推演,那么就是静态方法中只能调用对只能调用静态的方法或属性吧,因为他们的生命周期呢是一致的。那接着对于非静态方法中。我们说既可以调用非静态的,也可以调用静态的,非静态方法中既可以调用非静态的这个方法或属性。
06:08
也可以调用静态的这个方法或属性,这个呢都源自于他们的生命周期,咱们先测试一下这里边,我们这儿是一个非静态的,这是一个静态的,这也是一个非静态的,当我们试图在这个受方法当中,比如说我想调一下it。是错误的。那这时候这就报错了,说在一个cannot make static不能在一个静态应用当中,我们调一下这个叫,那就是非静态的一个方法,这呢说的就是这样一个问题。就这个问题,实际上呢,它这个Z,呃,这这个it前面咱们省略这个Z,其实沿呢,相当于我们在这个static当中呢,咱们不可以写这个Z关键字,这个Z呢,因为叫当前对象了,你这个方法呢,明确属于当前这个对象的,那我现在静态的结构是不是还没有对象。
07:03
啊,其实额外的咱们相当于说了另外的一个点啊,就是第五个点了,相当于sta在使用中的一些细节。注意点就是在静态的这个结构中。静态的结构中,那属性呢,咱们不能说调一些结构了,主要呢,还是方法在静态这个方法内呢,我们说不能够使用这个这关键字,那这关键字不能使,其实另外一个super呢,也不能使。Super也不能用了,就是这个super呢,也是先得基于你有当前对象了,然后我们当前对象它的负类,那你这个对象都没有,所以super呢也是不可以用的,这个大家注意一下就可以了,嗯,只要你你知道呢,你写到这个static方法的时候呢,里边用super用this它就报错,那就知道不能写啊,那还回过来,我们这个叫非静态的方法不能用了,那非静态的属性name呢,也自然而然的不可以去使用,想复制为一个Tom,这也是不行的。
08:08
都是因为他们的生命周期呢不够,我这时候有的时候呢,他们都还没有加载呢,那对于这个静态的属性,比如说我这块呢,去输出一下这个nation,这是可以的,哎,你看我这个nation前面好像也没写谁掉那谁掉的,对对于这个静态的属性来讲,它前面省略的可不是这次点了,而是我们这个泪点省略的是这个泪点。你可以不写,写上的话呢,也应该写它,可不能写,这次你看我要写个这次又挂了,这次呢,这时候还没有。这是这个静态的属性,那静态的方法呢,我们这没有,我这就补一个,只是从这个形式上来看一下,我写个static,来一个word,来一个walk走路,具体的这个方法体我就暂时先不写了,我们在这里边呢,调一下这个work。
09:10
这是没有问题的。这就相当于我们这儿呢,指明就是不能调用非静态的结构。这呢是可以调用。静态的这个结构,哎,主要原因就归结于他们的生命周期,那我们要画一个图的话呢,就这呢,如果看成是一个出生,然后一直往下到这儿呢,可以看成是一个死亡的话,那么刚一出生这时候我们指的是这个类的加载。诶类的一个加载,在类的加载的时候呢,咱们这些静态的结构呢,也就跟着加载了静态的属性,静态的方法都会加载到咱们的内存当中,好类了加载完成以后,我们接下来你可能会创建一个对象。
10:00
我用这个框呢,这个位置呢,表示对象的一个创建,就是对象呢,现在才刚开始有。我要对象出生。这个对象一出生里边这些是不是非静态的这些结构呢,就都加载了对吧,然后这个位置呢,理解成是我们这个对象的一个消亡,那这个对象消亡以后,紧接着的这些静态非静态的这些结构呢,也就消失了,不能掉了。那么在接下来你会有第二个对象,它的一个创建和它的一个消亡的过程,这呢是其他的等等等等,这呢每一个框呢,都理解成是一个对象了。那对象呢,回头完事以后,整个当我们这个内存中你不会再去使用这个类的时候,如果内存这个都够的情况下呢,那就当你这个gbm的话呢,停下来的时候,那我们就会把这个类的加载呢,就从内存中也给你销毁了,就是我们一开始这个类的加载呢,它是放在这个缓存区的,它不会说马上就给你销毁掉,然后你再用,再去加载,不会的,它呢加载的这个时间呢比较长,当整个你把这个GM关掉以后呢,我们GVM加载这个内存中的结构呢,也就销毁了,这个时候呢,是我们这个类的一个销毁。
11:15
消亡这个时候呢,类消亡的时候呢,你这个静态的这些结构呢,也就跟着消亡了,所以它是完全跟这个类的生命周期是同步的,就是我们这个静态的结构,而非静态结构呢,是跟这个对象是同步的,所以我们就是说你对于这种晚出生的呢,可以调这个早出生的。可以调这种早出生的,早出生的呢,不能调晚出生的,因为可能还没有呢,就这样就是让大家就好比是你可以跟你爸去借钱,但是你不能跟你孩子去借,因为孩子可能还没出生,还没生呢,是吧,就不能透支这回事儿啊,这样行,这呢是咱们说的这个调静态里边调这个静态的这个情况,然后反过来的话呢,我们这有个it方法,这呢是一个非静态的了,那非静态里边呢,我们调这个非静态的,原来都老这样,老这样写的,我这有个音符。
12:12
我it里边掉一个in for,这个in for呢,相当于前面省略这个Z次点,我掉了in for,哎,谁调it谁就是这个Z,我呢里边呢,就把谁的name和A呢输出这个谁指的就是对象的意思。这都是一脉相承的了,包括呢,在这里边我们想去调一下这个属性,这这这肯定可以了。内幕。这都OK的,这是我们调的叫非静态的接口。然后呢,我们调这个静态结构,那静态结构的话呢,就比如说我们去调一下下边这个调这个吧,调这个work这是没问题的,然后我们呢,也在这输出一下我们的nation。
13:05
诶看这呢都可以,这个nation前面也没有东西,你说这时候省略的是谁。哎,这时候你要说写上这点是不是也不报错是吧,这就相当于你是拿对象去调的这个静态结构了,但是这时候省略的它不是这次还是咱们这个类,对,还是这个类,就是凡是你看到这个静态结构前面你没有明确声明的都是省略的,这个叫类。嗯,就是这样的一个情况,或者就删了吧,比如说那这呢,我们就能看到非静态里边可以调非静态的,也可以调静态的,这个事呢,大家不要去死记硬背,就是我们说的上面这些知识点呢,大家都是基于咱们从这个生命周期的角度呢去考虑啊,这呢,我们写一个,这算是一个5.1啊。这样一个5.2就是关于静态这个属性和静态方法的使用,哎,大家呢,都从这个生命周期的角度。
14:14
嗯,角度去理解,嗯,这个生命周期呢,就涉及到类的生命周期,或者是对象的一个生命周期。那这样就可以了,好这块呢,是咱们关于这个static来修饰方法的一个说明。
我来说两句