00:00
来,那紧接着咱们再往下看一看,这个反射机制这块还有什么内容啊,那接近尾声了是不是啊,接近尾声了,来反射机制这块咱们,呃,接着往下干嘛呢。先把这个打开吧。在这儿我们还接着去学习我们的反射啊,哦对了,上节课在最后是不是还给大家聊了一下类加载器是吧。这个就不再回顾了啊,这不是重点类加载器啊,什么启动类加载器啊,应用类加载器啊,扩展类加载器,什么双亲委派机制啊,提了一下啊,提了一下了解一下啊了解一下行,那咱们就接着往下了啊,接着往下,那么这块的话,咱们去新建一个class,这个class呢,我们就叫做reflect,我看几了啊零五了。好,那么这块我们干什么呢?诶,这么慢呢。来,我们来反射一下什么呢?注意听啊,我们来一下。呃,这个。
01:01
属性。反射一下属性各位啊。就是这块的东西。啊,Java看见没。下边呢?这个包下呢,有一个有一个叫属性field。对吧,你看见没有这么一个东西,我们来反射一下属性,各位啊,反射一下属性,那反射属性的话,我在这里呢,我准备一个class吧,这个class我就叫做student。学生啊,那。写上啊叫反射属性field。Field的翻译过来是什么意思啊?Field的翻译为字段吧。对吧,哎,翻译为字段啊,翻译为字段其实就是属性啊,其实就是属性或者叫成员。啊,那么这块呢,我给这么几个东西啊,我给上学生的一个编号,我给上学生的一个名字,我给上学生的一个年龄,我给上学生的一个性别行吧,然后呢,修饰服务,我分别给上不同的啊,我给public修饰公开的,Private修饰私有的,然后protect受保护的,然后默认的。
02:15
The。T啊,好,大家看我这四个四个field是不是分别用了四个不同的访问权限进行修饰啊?对吧,一个是公开,一个是私有的,一个受保护的,一个是默认吗。是不是,哎,我故意的,各位啊,我故意的,这是四个field啊,四个field。四个field分别采用了不同的。访问控制权限修饰符。啊了解一下,现在我要通过反射机制干什么呢?我去访问一下这个类当中的这个这个这个还有这个,我去访问一下这些东西,明白我说的意思吧,啊来,那么这边呢,我们把这个刚才这个程序我们打开啊叫反射什么呢?叫反射,反射student类当中所有的什么啊,所有的field。
03:15
来反射一下啊,咱们先拿一下各位啊,能不能把我们这个类当中的这些field都拿到呢?来我们尝试一下,首先我们要拿到这个四个属性,我们必须得把这个类先拿到。所以第一步呢,是把这个类拿到,拿这个类怎么拿,第一步我们先获取什么,获取整个类。啊,有同学,老师我还不太理解,你拿它干啥?同学,现在你先不用管,我肯定会讲。我们现在呢,就是一本正经的,干啥把这个东西拿到。你不用管他,我们拿它干啥,一会儿拿到之后我再说呗,是不是,你不要心急,你先听杜老师说,我如果是有了这个类,这个类我是可以拿到了,对吧,我想拿到这个类里边这个field,我想反射这个field我怎么拿。
04:00
是不是,哎,那么获取整个类怎么获取啊,首先第一个获取整个类你会了呀。是不是,哎,Student class对不对?哎,Class for什么,哎,Name。那么这个时候呢,我们就可以怎么着啊,哎,把前面这个student的这个类的一个类名,我们直接点右右键对吧,Copy一下。Copy之后呢,粘贴过来一定要是类的全名啊,类的全名来这边的异常呢,我就先不管了,各位啊,先不管了。不管了啊,异常处理一致,咱们已经学过了,那么接下来我们要干什么?获取整个呃,获取类中所有的field。我现在已经拿到了这个类,我想拿到这个field,我怎么拿呢。拿这个拿这个拿这个拿这个,我想怎么怎么拿呢,哎,你得调方法了。你得调放,你猜那个方法叫什么,我觉得你这整个这个章节啊,我说是比较容易的,最主要是翻文档。对吧?你想获取到所有的field,你怎么拿?我们得通过student class去获取,对吧?所以你查帮助文档的时候,你应该从哪查呀?
05:05
先找谁啊,先找Java浪吧,找谁呀,Java浪下谁呀,有一个class是不是,哎,我们找找是不是有个class你看。对吧,哎,Class这块呢,咱们有了一个方法叫for name咱们用过了。对不对,哎,Class这个方法用过了,我们来看看这里边方法哪个是来获取这个field属性呢。应该跟get有关系,对吧。是跟get有关系吧,往下走,哎,你看有个叫get constructor啊,构造方法是不是,哎,我们再往下看啊,你看有get什么。Declared field。是不是还有get declare的菲斯?费斯,你看,返回一个F的数组。对不对?哎,你往下走,你看有没有别的啊,对吧,你看这还有个get field是不是?哎,根据名字来获取什么?哎,我们的这个field,这个呢,是获取一个field的数组是不是?哎,叫get fields,诶你看这个方法有意思啊,有意思,那我们把这个方法调一下吧,这叫get fields是不是?那咱们就在这调就行了,student.class class点什么点叫get。
06:15
是啊。这个方法很有意思,你看它返回啥?第2GET非有丝啊,返回的是一个数组。是不是,哎,那么这个数组这一块。拿到了这个导进来。导进来啊,别导错了。那么这个时候我想看看这个数组的长度,它是几个属性呢?点认识来点右键我们执行一下。或者点它执行啊。我们来看一看这个这个field。数组。哎,一个。不对呀。
07:00
这里面有四个呀。有意思。他为啥只有一个呢?我对这一个呀很感兴趣。这个数组里边是不是只有一个元素,那就好说了,这个数组下标为零是不是就是。就是集中这个这个元素。是不是其中一个呀。是不是,哎,这个大家能看懂吗。我们发现测试了只有数组中只有一个元素啊,测试数组中只有一个元素。取出元素,取出这个费的取出费之后,我们尝试去调用一下。这个我说过,它代表什么,代表的是。这个或者是这个,或者是这个或是这个,那我问大家每一个属性有没有名字。每一个属性是不是都有名字?
08:02
对吧,取出这个field。那能不能取出的name呢?Feel的名字呢?我们取出。这个field,它它的名字。你大概猜一下这个方法叫什么,各位。叫什么呀?哎呀,第一个就出来了,你看叫啥。Get name吧?是不是,哎,点get name这个方法返回一个string。我们叫。来,我们执行一下。有意思。嗯。只有这个是吧。难道是顺序的原因?你可以多测呀,是不是哎在执行。
09:01
发现数组里边还是什么。还是一个。对不对,并且这个属性的名字叫什么。那吧。是。哦,你应该猜个差不多gets。这个方法获取所有的属性,获取的应该是所有公开的属性,所以你这样就测出来获取类中所有的什么public的。Public修饰的field,这是经过你的测试啊,对吧?哎,你通过这个类呢,Get fields这个方法,然后可以拿到一个field的数组,拿到field数组之后,发现数组里边只有一个元素,然后呢,你取出这个元素之后呢,调它的get name这个方法来获取名字,你拿到这个属性的名字叫number啊。对吧,通过这你可得出来这种方式只能拿公共的,那如果说把上面这几个全部拿到,你怎么办呢?哎,你看刚才我们好像发现啊,还有一个方法叫get declared fields。
10:07
看见没?Get declared fields。那么我们尝试一下,调一下这个,看怎么样行不行,来,我们来获取所有的field。啊,那么获取所有的费怎么拿field的数组?FS,我们叫FSFS得了,能看懂吧,这个S是复数啊,叫FS来,那么这块呢,我们叫student class,这个get declared fields。拿的是一个什么呀数组,我们看看这个数组的length,这次是不是长度为四呢?有意思,长度拿到了,它是四的,那么这个时候我能不能对它进行电力呢?很简单,For循环field fields好了,那这个位置我们给它叫做。
11:06
的吧。行吧,那么这个呢,就是那个数组喽,这个就是数组里边每一个元素喽,来我们想拿这个属性的名字。点get什么对吧,我们这边呢,打一条分割线出来啊,打一条分割线出来,我们看看能不能拿到啊走一个。这四个属性的名字都拿到了,你只要拿到这个属性failed,那么调用它的get name方法就可以拿到它的名字,你看。这四个属性的名字都拿到了,你看这个这个还有这个,还有这个是不是都拿到了。对吧,哎,这样的话,我主要是在这里给大家说一下啊,怎么去获取这四个属性。啊,一个两个三个四个。那么我们除了获取属性之外。
12:02
能不能去获取我们属性。它的类型呢?就这个属性,它的类型能不能获取到呢。我们可以尝试获取一下属性的类型。这个是获取什么呀,属性的名字,那我们要获取属性的类型怎么办?我在讲这个内容之前,我先在这儿给大家补充一个东西,这个student class,它是个class。那student class有没有get这个方法呢?他有没有get name这个方法呢?我们尝试一下,拿一下行吧,Class name。这是一个类,各位啊,这是一个类,这个类代表的就是这个类喽,那么调get name这个方法能不能拿到类名呢?我们看看能不能拿到类名。
13:01
先拐个弯啊,先拐个弯来,我们看看最上面有没有拿到这个类名,各位是不是拿到了。对吧,所以说get name这个方法,Student class也有这个方法。有说老师这个get name怎么在这儿也有,在这儿也有,那这是帮助文档里面规定的,我就没再给你翻帮助文档啊,你知道这个事儿就行了,因为很简单,因为我们name都知道是名字嘛,来获取名字上面这个呢,哎,Class它也有get name。另外告诉大家,他还有你看啊student class,它还有个方法get name。这个是。这个是一个完整类名啊,完整类名,然后这个呢,是个简类名。减类名啊,来,我们走一个走一个。嗯。
14:00
好,大家看这个完整类名是这样,带包名减类名是不是只带这么一个。一个一个简单的类名啊。对吧,哎,我拐个弯,各位啊,我在这里稍微拐个弯,为什么拐个弯呢?来我们来获取一个类型,各位现在在这是不是可以获取到每个属性它的名字,你看名字名字名字名字,你这个属性的名字名字名字名字都拿到这个属性它的类型是什么。对,你这有类型啊,注意啊,同学们,整个从这个位置开始,到整个这个位置结束,它是一个什么对象,是一个feel的对象。明白吧,明白什么意思吗?从这个位置开始,到我们的这个位置结束,这整个是一个什么feel的对象,它是一个feel的对象,通过这个feel的对象,我们可以拿到它。通过这个feel的对象,我们可以拿到它,通过这个的对象我们可以拿到它,我们都可以拿到它,它,它我们都可以拿到,明白什么意思吧?来,我们现在拿到它了,拿到它了,拿到它了,拿到它了,我们想拿它,拿它,拿它,拿它,拿它的类型怎么拿?
15:10
那你猜应该猜个差不多,每循环一次拿出其中一个field,这个field可以get name拿名字,那什么叫get类型,应该是获取类型吧,是不是get类型啊?那么大家思考一下,猜测一下,猜测一下,来猜测一下。这个方法名叫啥?为什么这一张好学?来猜测一下。叫get,类型是什么?哪个哪个方法名,各位猜一下。来。Get小鹏猜了是吧?那么只有小鹏猜了吗?啊,陈哥也猜了,Get tap好,我们来尝试一下,看看有没有。所以说开发就靠感觉明白吗?你没有用过就靠你感觉来猜测。
16:09
明白什么意思吧,哎,就你你以后也是这样的啊,Get类型你看有太好了,但是这个get type返回类型是个class,你看没。他是返回个class。你现在知道我为什么讲这个class它的get name方法和get simple name了吧?是不是啊,Get是个神奇的东西啊,确实是你想拿什么get就就完事了啊,来get type,大家看这个方法的返回值,你看get type返回的是个class,诶,有意思,你看返回个class好了,那么返回这个class之后,那么这个class其实就是谁呀,就是field type。你看起名也很重要,整个这个东西叫field get type,这个叫field type,那field type有没有名字呢?我们可以get什么呀?哎,Name。你看,那么这个时候返回的是不是就feel the name啊?
17:01
是不是,哎呀,这个变量名已经有了field name name吧?好,那么这个时候我们输出这个F内,你看。Get,拿到一个。他拿到的是class有同老师,他为什么返回class,我也不知道他这个方法规定的,你看是不是这个方法规定的呀,哎,规定的,哎返回class class有了之后,我们是不是可以调name。因为上面讲过了呀,Class它有一个get name方法呀。是不是啊,那么这边是不是就可以get name field type get name拿到一个name是吧?来来执行一下,我们看看能不能拿到这个类型。好,大家看啊,这个这个这个这个。拿到了没?Name是一个死准类型吧?是不是strong类型啊,Age是不是int呀?Sex是个布尔,Number是个int,我们来看看是不是。
18:01
Age是不是int类型?是不?对吧,是什么,是不是,哎,太完美了,那老师我现在想获取一个简单的名字,能不能获取,那当可以。对吧,哎,这个方法名叫simple name,好,那这样的话获取的大家看是不是就是这个德行了,来看一下你看。是不是string name in age,不类型,类型,Number。对不对,哎,你看是不是就拿到了,拿到了对吧?哎,拿到了各位啊,拿到了,那么到现在为止,你把这个拿到了,你把这个也拿到了,那前面修饰符能拿到吗。哎,有意思,我们来获取什么呀,属性的修饰符列表。那么这个时候大家猜一下这个field应该再去调哪个方法,猜一下get什么修饰符来。
19:06
猜一下还能再猜出来吗?叫修饰符是哪个单词啊?修饰符是哪个单词?叫mod吧?呀哎呀哎呀,经牛了,来咱们来来一下啊,叫get Mo s。这个是个什么东西?不是吗?怎么还个四?因为大家都知道这个前面修饰符有没有可能有多个。有没有可能?有没有可能啊,有没有可能有多个。来,来一个啊,Public static final。Int a double math拍。等于3.1415926。
20:04
数学当中的。这是个常量。是不是,哎,那么这块的话我先注释掉,我看看能不能拿到各位啊,能不能拿到来走一个。诶,拿到了double类型数学当中的拍是不是,那现在我要拿前面的修饰符,我们讲这个这个还有这个,还有这个,这个修饰符有可能有三个,也有可能怎么着啊,有一个你看。是不是,所以这块的话,咱们应该是多个修饰符,所以它返回的是个什么,哎,你看。方法名叫菲尔斯,菲尔斯啊,Get Mo菲尔斯啊,好,那这个方法很诡异啊,他反过的东西是int,有意思啊。In各位,这个in它是个什么东西?这怎么还反过去int呢?来输出一下。
21:00
啊。返回int,你看啊。说你name这个是二。Private是二,你对应的代号是二呗,等于,然后对应的是几四吧。然后前面什么也没有默认的话,就是零是不是零嘛,对不对,啪啪这个修饰的是几啊是一你看。这个number类型那不一吗。Number in,你看IN1呀。是不是呢?这个性别是零,你看默认。那这该怎么办呀?那我怎么能把这个转成字符串呢?我怎么能把这个修饰符这个数字转成一个字符串呢?对吧?返回修饰符是个数字,返回的修饰符是一个数字,每一每个数字是修饰符的代号。
22:02
每一个这个数字是个修饰符的代号,你比如说你比如说四二是谁,四是谁。零是谁?对吧,那一是谁,你看都有代号。那我能不能把这个数字转成字符串呢?可以将这个代号数字转换成。字符串吗?当然是可以的,我们来看一看反射机制当中有一个类型啊,它下面呢,有一个叫做的东西,你看往下你看Mo fair。整个这个类就叫修饰符类,修饰符这个类里边有一个静态方法,大家看静态方法,你看静态的图中各位啊。参数可以跟一个int你看,转成string你看。返回描述指定修饰符中的访问修饰符标志的字符串,你传过来一个int类型,我可以给你转成字符串。
23:07
它是个静态方法。所以很有意思,你看这个位置,我们有了这个int类型,我们就可以怎么说叫Mo fair这个类,点to string这个方法,把上面I作为参数传进进去,然后返回一个什么呀,叫mod。啊,Mod string叫以字符串形式的修饰符,那现在我们把这修饰符输出,你看来输出一下走一个。嗯。好,大家看第一个是不是就是private。Name,第二个protect age,第三个是不类型sex。对吧,第四个是public,然后性public final,大家看是不是在这里都可以完成换呀。是吧,哎,都可以完成转换。是不是很简单,很简单,就是方法名可能稍微多一些,但是你可以猜啊,可以猜这个方法名叫什么。
24:05
就我觉得这这这章啊,这一章大家也可以不查文档,就是猜,就大家可以猜测方法名。啊,可以猜的方面,慢慢养成这个习惯啊,慢慢养成这个习惯。以后开发中一旦遇到什么呀,新的技术。新的技术啊,新的技术。可以猜测先。啊,猜不到再查阅什么文档。对吧,哎,再查阅文档,这样开发效率高一些。明白吗?你可以先猜猜啊猜一下。那这样的话,大家看是不是就把这个类的这个这个这个这个相关的这个student的这个类当中的这些属性啊,这个这个还有这个都拿到了吗?哎。
我来说两句