00:00
好,咱们继续来上课,这节课呢,咱们再来看一下咱们的这个静态变量啊,那咱们来看静态变量是什么东西呢?比如说我做一个这个函数啊,然后呢,我就想知道这个函数被调用了多少次。那就是说我要做这么样的一个功能,对吧?比如说这里边f funcst TC-f fun nc,好了,那这里边咱们说我们干嘛呢?要定义一个函数,然后要求是什么呢?要求可以统计到该函数被调用的示数。被调用次数啊,这种功能在后期我们会经常经常见到啊,你比如说我们后期会用到一些接口,对吧,比如说像做这个,呃,小程序的接口啊,或者做这个公众号的接口啊,对吧?那公众号接口有一些有一些接口它是干嘛的,它是有限制的,就是说你你比如说你一天只能调用多少次,对吧,那他怎么知道我们调用了多少次呢?对不对,那这里面就需要什么,需要一些手段来帮我们,那比如说现在我做了这么一个函数叫做什么,叫做DEMO,我就想知道这个函数被调用了多少次,那怎么办?是不是我可以在这里边去声明一个变量,比如说来一个SSPR,等于一个一对吧,然后呢,进来,比如我输出这个SSPR,输出完以后我让str加价,是不是这样的,那这个时当你调用了DEMODEMO调一次以后,调一次以后你看默认进来S加就是一,那输出的时候是不是就是一一输出完是不是就加加对不对,那现在我们来看在这里边。
01:21
我们来刷新。输输出一个一啊,那我再调用一次呢,再DEMO一次,又调用一次,这个时候你看再来输出是不是还是一个一,哎,为什么这样,因为我这个变量是在函数内部生明的,它是一个什么,它是一个局部变量。局部变量对不对,那么局部变量是不是函数,函数什么呀函数。执行完毕后。就会被回收啊。对不对,哎,因为它只在这个函数作用内有效,所以函数一旦执行到第八行执行完毕以后,那好这个变量就会被怎么样被释放啊被释放。被失望,那等我再次调用这个函数的时候,是不是又重新生明了这个S加等于一,然后再输出它依然是一,然后它再加价,是不是始终都没用上啊,对不对?哎,那有没有一种方法,就是说比如说只要什么第一我让这个函数结束完以后,这个变量不被回收,我才能保证什么保证?
02:20
让他干嘛呀?让他可以做到什么,做到我们的这个。统计完对不对,那怎么能让它不会回收呢?那这个变量是不是就可以考虑声明一个全局变量对吧,那声明一个全局变量是不是就可以在这样了,比如说在这里边我们来去打印一下。就是先先声明对吧,声明完之后我来格萝卜声明全局吧,来这样吧,我换个函数啊。咱们来看啊,在这块拉一个横线,一个HR好了,然后我们在这里边。来括号咱们说了我这里边干嘛,是不是声明一个全局的变量,对吧,那在这里边我通过格。
03:00
生命一个S价,然后在外面呢,我这个str等于一对不对,哎,让它让这个S价变成什么,变成了全局的了啊,也就是说它属于页面解到页面结束以后,是不是变得才会被释放,对吧?所以这个时候我再来艾口一个str,艾完以后我让str再价是不就可以了,那现在你看我调用DEMO1诶。刷新是不是输出一个一,哎,那当我再调一次CTRLCCTRLV又调一次,这个时候再来。是不是变成二了,看到吗?来这里面每输出完以后,我们干嘛呢?给他一个B换行对吧,那这里边你看我再调一次,再调用两次。现在我这个函数是不是总共调用四次,那你看我这里边是不是就输出了1234,最终是不是调用四次了,但是我这么做确实是实现了什么,实现了一个这个。统计这个函数被调用的次数对不对?哎,这叫什么统计?函数被调用的次数,但是有一个问题啊,各位有个什么问题呢?比如说因为这个SR是个全局变量对吧?那比如说在这里边,我把这个SSPR,它既然是全局的,我是不是S,他可以更改,我更改一个100。
04:05
没毛病吧,哎,更改完100以后,我再调用DEMO1的时候,那这个时候你看他调用了多少次了。多少次?是不是就100次对不对,因为进来输出它嘛,对不对,那我再调用一次D1,你看是不是就101次。是不是101次了,对不对啊,由于这个变量是全局的,所以我在函数外部可以干嘛,可以去更改的,是不是这样的,那有没有一种方法能让什么呢?能让这个变量在函数外部没有办法更改呢?可以啊,第一我们可以使用我们未来要学的B包也可以实现,第二呢,我们可以干嘛呢?可以在这里边通过什么,通过我们的静态变量来实现,也就说我们把这个函数说明什么呢?生明成静态来这里边。再来个HR啊,叫做声明。静态变量啊,那怎么声明呢?F fun nc方式,这个还叫DEMODEMO2了啊,然后这里边一样,我这里边是不是刚开始我是声明了一个SSPR等于一个一啊对不对?哎,那这个时候我在str前面加上一个STTS,也就是说把这个变量变成什么,变成了静态变量,也就相当于它在存到内存里面,不是存到原来的那个占空间,而是存到了一个我们的静态空间,那么在这里面存过来以后,那接下来干嘛呢?我再来艾口,艾口在口S加R,然后同样我str再样来加价,好了,那现在咱们来看,我只是在这个变量前面加了一个stay,对吧,这个变量是不是依然还是在我函数内部生明的,是不是依然是属于局部变量。
05:31
没错吧,叫局部变量。局部演袋啊,那这样我们为了测试一下,比如说我这个比较叫得了A吧,啊不叫str了啊来Dollar了A,然后这个也一样得了A,然后这个也一样到了A对吧?那现在咱们来看啊,我现在外部输出到A可以吗?我有A这个值吗?是不是告我没被定义对吧,那有人说了函数没调用,那我调用一下函数A2,你看当我调用函数了走,你是不是依然没被定义,而且注意函数是不是输出是一啊。
06:02
啊,那好了,那现在我把它注释掉,当我再次掉下函数了来。这里面我们依然给它连上一个什么,连上一个BR啊,连上一个BR好了,那我再调用一次叫做DEMO2的数,那这个数我们再来看。走,你是不是第二第二次调用啊,哎,当我第三次调用再来一次对二的时候,你看这个时候他又是又阻止执行了一次。对不对,哎,这是不是就实现了什么,实现了我统计我函数被调用的次数,而且在外面我能更改的吗?比如说Dollar a等于100对吧,然后我再DEMO2。再去调用的时候,那现在你来看。走,你是不是依然是四,哎,是不并没有去篡改我这个值啊,因为这个值,这个变量是不是相当于我在阴曼级生明的一个普通变量,对不对,而这个变量是不是在我函数内部的一个局部变量,只是我用这个给它分成了什么呀,分明了一个静态变量,那么静态变量什么特点?静态变量值它只会被初始化一次,因为什么?你看啊,当我第一次调用变二的时候,是不是进到这个函数里面声明了一个静态变量等于A,并且给它复了初始值为一,是不是只输始化一次对吧?然后输出这个时候是不是就输出了一个一啊,那输出完以后一加加就变成二了,当我再调用的时候,再调用的时候,这一句是不是就不执行了?
07:16
对不对,因为它只会初始化一次,所以再调进来就输出输什么,是不是输出二,然后二再加二就变成三了,那再来调用的时候进来是不是输出三三再加二变成四了,那再调用的时候是不是进来就输入四四一样他加加就变成五了,所以当我再调用对玛时候,再调用一次,比如在这再调一次,那是不是就是。返回一个五。是返回给我对不对?哎,这就是咱们静态变量的特征啊,首先第一点静态变量干嘛是不是只会被初始化一次,而且静态变量在这个函数,在这个函数运行结束以后,是不是不会被回收啊,对不对,你要回收的话,那就跟我刚才第一个演示是一样的,那我再进来是不是又重新声明,重新输出,重新加加了。对不对?哎,这就是咱们的静态变量,那咱们来看一下啊,那么静态变量特征是什么呢?在静态变量只会变,怎么样初始化一次,而且静态变量在函数运行结束以后不会被回收,对吧?另外静态变量一般用于干嘛呢?计算函数调用的次数啊,一般就是用它计算函数调用次数,那么什么叫静态变量,咱们说了在函数内部使用sta声明的变量就什么就是静态变量啊好了,这是咱们静态变量的内容,那OK,这节课我们到了。
我来说两句