00:01
好了同学,咱们接下来继续啊,看咱们这个课程的一个内容啊,咱们课程这个内容啊,再往下呢,哎,还是这个static啊这块的东西,那么这块的内容啊,咱们其实在上节课的时候呢,写了两个例子吧,算是啊第一个,呃,第一个例子呢,最主要告诉大家,Static修饰的叫做静态啊,不是static修饰的我们叫做什么呀,叫做叫做实例是不是,哎,静态相关的实例相关的啊,那么第二个例子最主要告诉大家,就是说我们以后啊,这个要知道这个静态的东西啊,它什么时候这个变量生命成静态的。对吧?哎,什么时候变量生命的静态呢?它有一个前提条件是说我们这个属性啊,它的数据啊,是我们这个类相关的整个族人的一个特征,那么这个时候呢,我们建议啊,生明是静态的来节省我们内存空间,因为静态的变量啊,它在这个类加载的时候初始化啊,类加载的时候初始化啊。好了,那么在这呢,第三个例子最主要告诉大家,就是我们空指针异常这个事儿啊,空指针异常啊,它的发生是因为什么呢?是因为说白了说到底啊,就是因为访问的这个东西是对象相关的结果,你引用是空的,但如果说你采用引用去访问静态的,对吧,采用引用去访问静态的。
01:18
那么能不能访问代码可以这样写啊,代码可以这样写,但是呢,哎,但是呢,他这个实际上啊不太建议,因为这样呢,会给程序员一种困惑,会觉得诶你用CE去访问,那难道CE下边这个countr是一个实例变量喽,但实际上它并不是实例变量,和对象并没有关系,等于空引用之后,这里仍然不会出现空指针异常,但是你要知道它用空的引用去访问静态的东西,实际上它运行的时候还是采用类名的方式去访问的,只不过你是看不见的啊,看不见的。对,给别的程序员一种困惑是吧,你别的程序员一看这个,诶哦,实力变量啊,实力变量,那实际上并不是实例变量啊,五中你你好像又复活了是吧?嗯,可以啊,可以这种状态持续下去就可以啊,持续下去坚持一下好吧,坚持坚持啊,其实有很多东西呢,都是这样,有些东西在当下呢,可能没有学会,但是学着学着后面的东西,你就会感觉前面的有些东西就可以解释了啊,就豁然开朗了,有这种感觉啊,好了,我们看tetic关键字继续看啊。
02:22
我再总结总结吧,第一个带个修饰的统一都是静态的,都是类相关的,不需要new对象啊,不需要new对象直接采用名点访问啊,直接采用类名点访问啊。当时,呃,当一个变量啊,当一个属性吧,啊是类级别的属性,所有对象的这个属性的值是一样的,建议定义为静态变量啊,静态变量这是第二个点。
03:06
那么咱们这两个点啊,说了之后呢,咱们再继续再往下看。Static test04我们现在啊。来看一看我们这个方法到底应该怎么调用啊,Public class,我们叫static test04,那么public static void啊,主方法加上去,那么现在呢,呃,在我的这个位置上有一个方法,各位啊。这个方法呢,是静态的方法啊,静态方法do some system out print打印就是什么呢?我们叫做静态方法do some,执行了啊执行了,那这个呢,应该很简单,那我再来一个方法,Public world do other。
04:03
啊,Do other,那么接下来我们这个是一个什么呀?这是个实例方法吧,System out,打印输出,就说实例方法do other执行了。是这样,这个方法我们叫静态方法啊,这个方法呢,我们叫什么呀,叫实例方法啊。实例方法,实例相关的都用什么呀?引用来访问都需要new对象使用引用点来访问。啊,引用点来访问啊,静态方法是什么呢?就是说静态方法不需要new对象啊,不需要逆对象直接使用什么呀,类名点来访问啊,类名点来访问,但是啊也可以使用什么呀,哎,引用点来访问。
05:06
不建议用。啊,因为因为其他程序员会感到困惑,看到你这个程序之后啊,你比如说我现在我要访问这个方法,我怎么访问啊,访问静态的带静态的我怎么访问。我是不是通过这个类名点是不是哎,Do some吧。对不对啊,那么如果说我现在把这个static test我就new出来对象,ST等于new一个test test,我new出来这个对象,这是对象创建出来,我用引用可以访问吗对象,然后用引用。用这个引用点访问行不行呢?ST点什么呀,叫杜萨。哎,这也可以对吧,这是这是比较正规的方式啊,静态方法采用类名点,静态方法采用类名点啊,就是类名点的一个方式啊,来我们来看一看,用完这个对象之后呢,通过引用去访问它行不行。
06:13
好吧,来Java c呢?我们去编译static test04.java然后Java去运行static test04走。啊,你看都执行了,没有任何问题,这个可以,这个也可以都行啊,就算ST现在等于等于等于空空引用对吧?空引用现在我干什么呢?YST再去调do some会不会出现空值异常啊,哎,这里不会什么呀,哎,出现空指针异常,为什么?就算你是引用是空的,我引用去空的调你do some,因为你do some是啥呀,是个静态方法吗?静态方的执行,实际上啊,实际上这个代码在最终执行的时候还是会转变为这个代码。
07:01
啊,它还是会转变为这个代码,他会去判断do some,一看do some是个静态的,于是乎呢,他把前面ST啊就变成了这个类名。啊,实际上你ST呢,它等于空没关系,没关系,不会出现控制,你看编译一下运行,你看没有任何问题,这三个都执行了是不是,哎,都执行了,但是你要注意一个问题,实例方法就不行了,实例方法do other这一块,那你想一想,它是一个对象级别的方法,对象级别的方法是不是,哎,对象级别方先定先定对象,你先干什么呀,你有对象啊,通过引用访问,通过引用点来访问啊,所以这个时候呢,我们呢在这儿啊,哎,这个。另一个啊,或者说我们采用类名去访问吧,类名啊,这个类名类名什么呀,点什么呀,我们要do other来试试,你看它会不会编译通过,首先你编译器就报错了,你看实例方法不带static,能不能用类名去访问呢?你看走你看。
08:04
不行,第19行报错了。是不是第19行说的是谁说的是他他是不允许的,这个是不允许的,这就是错误啊,这就错误,你这个他认为什么呀?Static test04啊,它是个类名,类名去点的时候,编译器会认为它是个记它是它,它会猜测你后边肯定是个静态的东西。明白吗?那因为你用类名点的方式去防,他可猜测后边肯定是个静态东西,但一检查do other,它是不带static,这个时候呢,它是实例的东西,所以它就会编译报错,那么像这种情况下,那我们就必须得new对象了,是吧?哎,我们把这个对象怎么着啊?哎,给它拗出来,那当我们把它拗出来之后呢,我们通过这个引用去访问谁呀?哎,我们的读other方法就没问题了,我们来看看是不是这样的。Java c编译一下,然后Java c编译一下,Java运行好,大家看最后是不是实例方法do other执行了,那么接下来如果说ST现在等于nu,那么引用是空引用了,各位,那如果再去调用这个实例方法会不会出问题啊,这是一个空引用对不对?然后接下来我们空引用,空引用调用实例方法会出现什么问题呢?啊,就是空指针异常啊,因为你这个方法是个实例方法,你需要对象参加你才能调这个方法。
09:30
啊,你没有对象你是调不了的,所以这个时候你没有对象是吧,就不行Java c去编译,Java去运行,你看最后在第28行的时候会出现空指针异常,也就第28行的时候出现空指针在这儿。啊,这个代码是不行的啊,控制异常了,控异常了啊,这也不行,所以这块呢,其实怎么说呢,大家把它捋出来啊,在你笔记上干什么呀,记下来带着static,其实我讲了这么多,各位你只要记住一个什么结论就行,记住带static都统一用啥访问。
10:02
用啥?各位代词用啥。其实我觉得我讲了这么多,这个没有多少内容。没有多少内容。各位。啊,你好好捋捋啊,你好好捋一下。你现在有一个类对吧?类里边有啥呀?有实例变量对不对,还有啥呀?有静态变量对不对,你还有啥呀?实例方法对不对,还有啥呀,静态方法对不对?哎,那你这个静态变量和静态方法这俩是不是可以放一块儿,就是我们从第一天讲hello word到现在为止,是不是一共一个类里边就写过这些东西。大家好好想想啊,就是从从第一天开始讲解,Hello word。到目前为止,一个类当中一共啊就写过这些东西,哪些东西啊,类等于类里边什么呀?实例变量对吧?实例方法静态变量静态方法是不是,哎,但凡是实例相关的都是什么呀?哎,实例相关的都是需要什么呀,你有对象的通过什么呀?哎叫通过引用点访问啊,通过引用点访问啊。
11:16
那这个呢,哎,静态相关的都是需要使用,都是采用什么呀,都是采用类名。类名点访问啊,类名点访问啊,也可以使用什么呀,叫什么呀,引用点,只不过不建议啊,不建议啊知道这个。嗯,变量方法,变量方法实例的实例的静态的静态的是不是,哎,就这些东西啊,就这些东西好好捋一下啊,其实你看说的多,但是说到根上其实没有多少啊,没有多少。
我来说两句