00:00
行,那提供完这个结构以后,接下来呢,我们就可以,哎这个讲我们刚才说的这个事儿了啊,获取运营室类内部丰富的这些结构,那我们这儿呢,不妨再去新建一个包,在这个包里边我们去做说明,哎,这个我就叫JAVA2这样,诶在这里边我们去新建啊一个class,哎,这个class的话呢,我们先来说一下谁呢,关于我们这个类当中的,比如说属性的一些获取啊。哎,属性的一个test,那先来说一下这个问题,好,这呢我们就要获取当前运营师类的所有属性啊。啊,运行师类的这个属性结构吧,就这样来写,首先我们写一个测试。那要想获取运营实力的这些属性结构,首先我们还是得有这个大的class的实例,嗯,还得是这个class class,那咱们当前我就这个稍微省事一点,就通过这个点属性的方式呢去获取了,那plus呢,因为在当这个多个包当中都有,这呢我们需要显示的指明一下是我们这个Java伊里的行,那接下来我们可以考虑叫获取这个属性结构,此时呢,我们还不想是具体获取某一个啊,比如叫name的属性,还不想这样我们想获取呢,当前类里边这些丰富的属性都能拿到,我们通过这个方法来做class呢,有个方法叫get fields。
01:34
Field呢,就是属性的意思,加个S就是所有的属性,返回的呢,也是一个field类型的数组,存放的就是我们多个属性,好,那我们拿这个field呢去做一个,哎,这个数组去做一个接收,接收完以后呢,很自然而然的,我们就想便利一下当前数组。看一下这里边儿属性到底都有哪些,不妨我就用增强for循环了。
02:02
S out一下F。来,大家猜测一下。啊,因为这里边儿我们是不是自己定过负类里边也有啊,啊,你得想想负类里边包不包含是吧,包含啊看一下啊,这个其实咱只能猜一下,这个确实也想不出来是吧?哎,执行。包含吗?总结一下,你看这里边出来这个,我们怎么去说这个事儿,自己里边有,其实复类里边也有,但是呢。是不是有这个权限的问题,你看咱们在这个person类里边。Personally里边呢,咱们写过这样的权限,这样的权限,这样的权限,然后呢,他出来的时候,你看只出public了,其他的都没出,那你说我要写个protection呢。那就写一个试试呗,是吧,嗯,试完以后呢,其实告诉你结果就是也也出不来啊,那那IG呢,就是它只能出来public的了。
03:08
哎,不管他自己的父类里边呢,如果你要是有这个public了,是不是也可以啊。啊,那要是它还有负类呢,哎,也可以啊也可以,所以说我们这呢,这样去总结。哎,这呢,咱们调的这个方法啊,叫做get FS,哎,这个方法我们说它呢,能够获取当前运行十类。哎,运行之类让集齐啊,叫所有副类当中声明为public权限的属性,哎集其副类中声明为哎,Public。哎,访问权限的这个属性,那这块我们确实能拿到了啊,那这个呢,是我们调的是get fields这样一个方法,那还有另外一个方法,这个我们关注一下。
04:06
哎,我现在呢,重新再去写啊,Class点还有一个方法呢,叫做get declared fields在这呢。Get declare的fields declare呢叫声明,就获取你声明过的属性还是一个数组,好,Out enter,那这个我们就叫declare field,那我还是用一个增强for循环去便利。哎,便利它这两个之间呢,我们来一个换行,好就这样啊再测试。OK,这个呢,显然呢就要丰富一些了,那我们总结一下,看看它获取的是什么。是不是都是他自己的呀,哎,那这呢,我们获取到了,就是说获取到我们当前运行时内自己定义的属性,同时的话呢,它是没有考虑权限的啊,也就是说呢,任何权限的这个属性都可以拿到,哎,那我们就这样的去总结这个方法,这个叫get declare的fields啊,其实我们接下来呢,会涉及到很多的方法,但是这个方法的话呢,其实大家这个调用的时候呢,嗯,也有技巧,就是你看这个方法名,基本上你就知道他到底要干什么啊get declare的fields就是获取当前运营师类当中声明的所有属性。
05:34
哎,当中,诶声明的所有属性,这个所有呢,就指明了跟权限没有关系啊,明确一下说,不包含父类中声明的属性,哎,这样就OK了。好,那这样的话呢,咱们就把这个,呃,关于person里边属性这块呢,就基本上就说清楚了啊,那先说清楚以后呢,咱们再想再细节一点呢,去说另外一个问题,属性的话呢,它此时其实只是给我们做了一个输出,我说呀,如果你要是有兴趣把这个属性里边具体的某一个结构拿到也是OK的啊,我写一个TEST2什么叫具体某个结构呢?属性咱们说都会有,上面的话呢,会有这样几个部分啊,有权限修饰符吧。
06:23
权限修饰符,嗯这个,嗯,这个数据类型还有变量名,也就是说还有这个变量值呢,那这个变量值的话呢,那就得看你是一个静态还是非静态了,你要是非静态的话。咱们刚才讲了类的加载过程里边呢,提没提这个非静态的一个复制啊,刚才我们讲这个类的加载过程。有非静态的事不在这里边是不是三点啊,我们提到这个属性是不是都是静态结构,哎,非静态的话呢,是不是得有对象才行啊,哎,这时候呢,我们这些你要非静态的话都没有对象啊,没静态没对象的话呢,这个你这个变量值其实也是拿不到的,所以暂时呢,咱们就先不考虑去造对象的事儿,我们只是呢获取这样几个结构啊,值的话呢,就看你是不是静态了,那下边我们想说的问题就是我呢,通过这样的一个方式呢,能够拿到每一个属性,那么每一个属性,它具体的每一个部分其实也是可以通过反射拿到的。
07:32
诶,比如说我们还是通过这样方式获取一个大的class实例,接下来的话呢,还通过这个get declare的FS这个方法拿到所有的当前这个类里啊,所有的属性构成的一个数组啊,那么接下来接下来还可以使用这样一个增强for循环啊,具体的每一个呢,都是一个这个F了,哎,我们呢,分别去获取它的啊第一个部分叫权限修饰符。这个能拿到啊,也可以呢,专门的拿到每一个变量的数据类型啊,乃至于说他们的变量名。
08:10
哎,像这呢,都是一些方法,这些方法呢,其实大家写的话呢,并没有什么压力啊,因为呢,这个都很有规律啊,你想拿什么,你就调这个相应的叫这个名的那个英文其实就可以了。比如说第一个啊,咱们这个F呢,是你当前的某一个属性,这个属性想获取它的权限修饰符,这呢它有一个方法,哎,当然首先是get了啊,哎叫get moce。哎,就是获取它的修饰符,哎指的呢,就是我们的叫权限修饰符了,那拿到以后需要注意的就是权限修饰符public呀private呀,是不是,好歹你也得给我整个字符串啊。但你会发现给我返回了一个int。嗯,发了个123这样的数啊,这就很奇怪了,那这个数它到底是什么?那这个我们去掉这个S吧,它啊CTRLC。
09:05
先跑一下看看。那真出来个数哈啊,那这里边儿你就想这个这个二它到底是谁零是谁一是谁。哎,这呢,就是因为他把我们说的这几种权限呢,每个人,那每个呢,分配了一个数,那二要是谁呢,那你得去找一下是吧,那就得说去哪找了。常量,嗯,是常量去哪个哪个类的常量找。是一个问题是吧,哎,Get Mo fears,哎,有一个类呢,就叫做Mo fair。啊,CL c c shift t啊,你看Mo fair还是反射下的啊,就是在这个类里边,它就专门定义了我们这些权限,呃,这些修饰符啊,你打开以后,打开以后的话呢,这样找有点累啊,你ctrl o一下。找我们这个常量,比如说你就写个public吧。
10:06
看这。哎,就是有一个常量叫public,你看它是1PRIVATE呢,是二,嗯,没写没写这个default default3呢。他错过了是吧,还是没没看到三咱们这,哎不是三了零是吧。米二零,那通过这个结果来看的话,它应该是个默认情况。嗯,咱不是呢,在这里边也定义过一个属性,是不是有个默认的,就说它呢,啊行,那我们现在呢,想给大家翻译回来。翻译回来啊,就是我不想显示012这样的数,那你就可以这样做这个mode fair啊,它有一个方法叫to string,哎里边呢,你把这个int型的值呢放进来,那也就我们这个model fair,那放进来以后,那我就能够给你翻译成对应的是一个什么权限。
11:03
啊,就这样权限啊,这个呢,就是我们说的那个默认权限的啊,就是啥也没有啊,也是一种权限,哎,这就搞定了啊,这叫第一个事儿,那么再往下叫数据类型。叫数据类型,数据类型,那我们想看一下你当前变量它是哪个类的啊,这个声明的通过这个f.get一个类型类型type呗,哎,就它那这块类型,比如说你是一个class类型的,那class怎么去描述呢?也得用呃是string类型的啊,那也得用一个class呢,去做一个描述,诶不妨我们就叫做tap,哎,就它。打印一下诶tap啊,那这边打印呢,咱们这样处理在这个位置,后边呢,我们就不要加换行了,这呢是你的这个叫全限修饰符啊杠T一下,这呢等于它的这个类型。
12:00
哎,再加上我们这个叫哎杠T一下,然后最后的话呢,打印完你当前这一个变量以后,你换上行啊。行,这呢,我们就看到这样情况,你是一个private的,哎,这块呢,就是你的类型叫string,那前面加了一个class,这个就不理想了,那我们怎么办呢,你在这儿呢,就要get它的一个name啊,光获取当前这个class,它的一个名。那这个前面那个class就没有了,是private词缀类型的。那下边是默认权限int型,他这个权限int型诶这样的注意这块呢,人家会保留这个,诶Java点浪啊,诶因为呢,像string咱们自己也可以定一个类呢,叫做string,你得跟我们这个浪包下这个得区分开,所以呢,它会以这种全类名的方式呢显示,这是呢数据类型下边呢叫变量名。这就比较简单了啊,直接呢,我们f.get一下name,这就是你的名,哎,对,就叫变量名啊,或者我们叫做这个属性名,哎,Field的一个name,哎,我这样写sit out一下滑行标了。
13:09
啊,这是末尾一个了啊,就这样好执行。哎,这嗯。行啊,换行了啊,这个位置不要。哎,这就出来了,哎,你叫name,哎你是H,你是ID啊行,我们就说到这样一个情况啊,嗯,也就是说呢,咱们关于这个反射哈,我能够获取当前类中的所有的属性,没问题,那不管能够获取到这个属性,你里边具体某一个结构,如果你要有需要的话,我也可以单独的把这里边的某一个部分呢,也能够拿到,哎,这就是我们这个反射的强大之处。当然了,实际在开发当中,咱们不会去做这个事儿,嗯,因为实在太无聊了是吧,没事的话呢,我们不会说去拿它的一个修饰符看一看啥的啊,这个用的比较少,但是大家呢,了解一下,知道能做这个事儿。
我来说两句