00:00
好了,那么接下来呢,咱们看一看啊,这个原理啊,我是给大家讲清楚了,在这里呢,我给大家提醒的下代修饰的就是静态的啊,都是类级别的是吧?啊都是类级别的,不是static,都是对象级别,都是实例相关的啊,那么接下来我在这里啊,再加一个再来看一个啊空指针异常。大家注意看啊,注意看。Public class static test,零三。我还是呢,在这定一个Chinese Chinese这块呢,我定一个什么呢,定一个这个ID card。然后我再定一个string name,然后再定一个static,叫呃,String类型country,这个是一个静态变量。是不是哎,静态变量,那么这个呢,是一个什么呀,叫做实例变量吧,啊实例变量啊,那么接下来我定义一个构造方法啊,构造方法public Chinese,我定义成这个。
01:08
别int类型了,还是string得了,我再写一下啊,来string类型的X和string类型的Y,接下来这边呢,是ID card呢附了一个X,然后呢,Name附了一个Y,那么接下来这个程序啊,我就写到这儿啊,写到这儿,然后在这块呢,我给它写上一个值啊叫中国好了,这个妥了啊,这个程序写完了,写完之后呢,我这儿呢,还是老规矩啊,Publics static voman主方法加上去。加上去之后呢,接下来大家看啊,我们在这儿啊,通过这个Chinese来访问这个country是不是。那这块呢,访问应个system.out.line打印输下叫Chinese点什么,哎,Country,那么接下来呢,我们来编译并运行这个程序没问题是吧?我们刚才已经测试过了Java c呢,编译一下static test03.java然后Java去运行tic test03走。啊,没问题吧,哎,可以啊,我现在并没有调无参数过的方法,所以我可以先不写是不是,哎,这是访问什么,通过类名是不是,哎,类名点的方式啊,访问什么呀?哎,静态变量啊,访问静态变量,那么接下来我创建对象,各位创建对象,我对象怎么创建呀,Chinese c1new一个Chinese啊new Chinese的时候呢,这块呢,我写上去啊,比如说身份证号呢,1111111是吧,然后名字啊叫张三,然后我就给他传过去了,调到这个构造方法,ID card和name附上值了,那么接下来我想问的是我用C能不能去访问这个country呢?
02:43
就静态的,我用C去访问行不行。就是静态的东西。我用C引用去访问,我就不用这个类名。我去访问行不行,你比如说现在呢。
03:04
我访问C谁啊,叫做ID卡的吧。是不是,哎,然后呢,我CE再去访问谁啊,哎,访问name吧。那这个可以吗?这个ID card可以确定是多少啊,他这个名字可以确定是谁啊,就是张三下边这个能不能访问,来我们编译一下啊,Java c呢,去编译Java运行好结果惊奇了各位啊,最后呢,这个地方啊,我们是可以访问中国的。没有任何问题,这个位置也可以访问,这个位置也可以访问。那后也就是说我们通过这里也可以得出什么结论啊,得出什么结论实例呢,一定需要使用什么。引用点来访问,你总结总结,那静态的呢,静态的是建议使用什么呀,哎,类名点来访问啊,但使用引用点也行。
04:11
啊,使用引用点,你看c.country你看也行啊,C的类型Chinese啊,Chinese里面访问这个这个country,你看c.country可以啊,没问题啊,哎,但是我说一下啊,不建议这样,不建议使用引用啊,不建议使用引用点。啊,使用营点会让别的程序员产生产生什么呀。产生困惑啊,静态的如果使用引用点来访问啊,引用点来访问会让程序员产生困惑。啊,程序员以为什么呀,以为是实例的呢。啊,就是程序员以为是实例的,你懂吗?这我一看哦,Country是一个实例变量,实际上country是一个是一个静态变量啊,你看但是这种方式可以,你看能访问对不对,哎,能访问好了,那么接下来大家注意看啊,现在我让C1等于等于那啊C1等于那那么C。
05:20
是空引用对不对,那么接下来我在这儿让它空引用访问这个country有没有问题,会不会出现空指针异常,给大家分析啊,分析这里会不会出现空指针异常。会不会啊?会不会出现空值异常?Country是静态的。静态的东西是不需要对象的。还记得吗?静态的东西不需要对象。静态的东西,直接用类名去访问。
06:01
接应态的东西,直接用类名去访问,还记得吧?那如果用引用去访问,引用现在是空,会不会出现空值异常呢?这个不会啊,不会出现空指针异常。因为静态变量不需要对象的存在,注意啊,实际上以下的代码在运行的时候还是。这样的各位表面看着是C1,实际上他还会把这个C变成Chinese。你表面看的是它,实际上它在运行的时候还是把C看成什么呀,因为他知道country是一个静态变量。你明白吧,所以这个程序呢,就很诡异,你看Java c编译,Java运行,你看没事儿,你看下边没出现空指针异常。但如果说你在这里访问的是C1的name,那你肯定会出现空指异常,C一点内,那这个会出现空指针异常,因为内幕是什么?是实例变量啊,实例变量必须有对象的存在,现在C1等于空对象已经没了,那这个就没事儿对吧?你下面这个有事的编译你看运行你看就出问题了,第28行空指针异常,28行说的就是这个空值一行,这个不行。
07:24
好,那么这里大家得出又得出一个什么结论?结论啊,空指针异常只有在什么情况下才会发生呢?各位有在只有在啊空引用哎,这是前提,访问什么叫什么实例相关的啊,都会出现什么空指针异常啊,再强调一下各位啊,静态的东西,你要硬要用C去访问它也没问题,能够访问程序编译和运行都没问题,但是我强调一下,如果你是静态的,它运行的时候和对象无关,你表面用CA去访问,实际上运行的时候还是用类名去访问的。
08:17
啊,还是用类别去访,所以你C1即使等于空,对不起,这里不会出现空值异常,因为的访问不需要对象的存在,因为country是静态的,那么下边这个c1.name就不行了,因为你name前面没有这个staic,这就说明你是个实例变量,实例变量你想访问就必须得先就对象才能访问,你现在对象已经等于空了,哎,对象已经没有了,你在这访问,那肯定会出现空指异常,所以我在这里总结一个结论,这个结论是只要空引用这是前提。二访问实例相关,实例相关都会出现空指针异常,啊,都会出现空指针异常。好了,这个咱们就说到这儿,咱们休息15分钟啊。
我来说两句