00:00
那么接下来咱们继续再往下,各位啊,我想干什么呢?我想反编译。你明白什么意思吧,你给我一个class文件,我想把这个类给它反编译出来,这个类的属性给它反编译出来。反编译,各位。来,大家注意听啊,我在这再写一个例子,我叫做class,叫reflect test什么呀,哎,TEST06。反编译啊。通过反射机制反编译一个类的什么属性废物的。反编一下啊,大家看。怎么反变,其实这个成绩跟上面还是一样的,跟这个还是一样啊。跟这个代码里边方法还是一样的,各位我不会讲什么新的方法了啊来大家注意听啊,注意听,来这块的话,首先我们第一步还是拿class student class是不是叫做class什么。点for name,然后接下来这个地方有类名,这个类名的话,我们就直接把这个student的类名拿过来就行了,来copy一下,Copy一下之后呢,放到这个位置上,这样的话我们可以拿到一个class。
01:08
拿到这个class之后呢,接下来我们在这儿调用student class get declared fields这个方法返回一个field数组。是不是哎,Field的数组,那返回这个F的数组之后呢,接下来我们就可以继续再往下对它进行循环。是不是,但是循环的时候我建议啊,毕竟是反编译嘛,创建个string builder进行字符块拼接行不行?哎,String builder好,大家还记得吧。对吧?哎,创建这个是为了什么呀?拼接字符串啊,拼字符串我们拼一下来拼一下啊,那么首先第一个呢,在这儿我们拿到这个类之后,我们s.ipad追加什么呀?哎,我们追加字符串啊,追加谁你肯定追加这个类啊对吧?你把这个这个拿过来复制一下是不是放到这儿,你肯定追加这个东西是不是,哎,然后在你最最最后结束之后,应该再去追加一个什么呀,叫这个类的结束啊对吧,你前面追加这个,你最后不得追加这个吗?你拿过来放到这儿。
02:07
行吧,然后呢,我们把这个S输出。来走一个,大家看最后输出的结果什么样的,哎哟。最后输出结果是不是public class student,你看是不是这样一个德行啊,哎,我们反编译啊来各位这个类类名怎么拿,能动态吗?嗯。类名怎么获取各位没问题吧,这是不是那个类?这个类有没有方法的get simple name可以,可不可以拿这个类名再执行一下?可以吧?可以拿类别前面的修饰符怎么拿?
03:00
拿这个类的修饰符怎么拿?各位刚讲过吗?这个student class他能不能修饰?点get Mo fears吧,这是不是修饰符,但是它这个数字吧,怎么把这个修饰符转成,转成字符串叫Mo fair这个类,点to什么string是不是拿过来。对吧,好了,大家看这样是不是。好,大家看拿到了没有,再走一个啊运行一下。是不是拿到了,拿到了啊,拿到之后呢,接下来我们在这里对它进行循环遍历。这属性啊,你可以属性进行循环啊,对属性进行循环,来for循环field field fields,然后。我们每循环一次,取出其中的一个field,对这个field干什么呀?哎,进行操作,来s.ipad追加,追加一个什么?首先第一个大家看我们上来第一件事,这边是不是有个缩进。
04:05
这边是不是有个缩进,这个缩进怎么办?是不是一个制表符杠T。杠T是不是个制表符,好,接下来杠T后边是不是加一个我们的修饰,修这个修饰符啊,修饰符怎么怎么做点ipad追加谁啊?追加个修饰符Mo fair.to string,然后我们叫fill.get Mo fears。好,大家看这个是不是就是那个model fair,就是修饰符,修饰符往后是不是一个空格。所以这块的话,我们要加一个空格s.ipad追加一个空格出来,那空格往后是不是就是这个类型,类型好说应该是追加类型,类型是这个field,它的一个get type.get simple name。对吧,哎,大家看这个是不是就是类型它的简单名字啊。对吧?哎,那么类型名往后又一个空格,所以这块呢,再来一个空格,空格完事之后,后边呢,这是一个name,这个name的话很简单,怎么取啊,哎就直接拿过来放到这儿之后呢,我们这里就field get name就行了,那么get name之后呢,最后这个位置有一个什么呀,有一个分号,还有一个什么呀,叫做换行。
05:23
是不是换行换到下一行了,所以这块的话应该是有一定的s.a的追加,追加谁呢?哎,一个分号,然后再加个杠N。换行,那么这个时候大家来看一看这个结果是不是就是我们想要的啊,反编译你只要拿到一个类的名字。哟,这还得加个加个换行来。加换行加到哪儿,加到这个位置上。杠N啊,换行来,我们再执行一下。好,大家看这样的话,你只要是有一个类,你只要是有类名,我是不是就可以在这里给你反编译成这个类的信息。
06:03
我们尝试一下,我们把这个拿过来,我们这个类名换成顿sun公司的那个顿类java.language顿我们来尝试一下,看顿这个类里边有没有属性,来执行一下走。这是不是public final class这个类当中的属性是不是都拿出来了,你看。是不是这个类当中属性啊,你看。是不是,哎,他有什么属性都可以给他拿出来。看见了吧?哎,这就是反编译,你给我一个class文件,我可以给你拿到Java源码。你看这不加源码吗,你看。这是不是加va源代码呀?怎么拿出来的呀?哎,通过反射机制拿的很强大啊,反射机制是很强大的,你随便再换一个,比如说Java language in。这里边儿有什么属性啊,我记得里里边有两个常量,最大值最小值什么之类的好像。
07:01
来看看哦,多了,你看有个最小值,有个最大值,你看是不是你看。对吧,哎,你看这些属性是不是都能拿到,这些属性都可以拿到。啊,你想拿这个,比如说Java u下的date。日期你拿一下。日期这个date里面,你看是不是都可以到啊,都可以到啊,线程线程Java线程。来县城这块能能不能拿到呢?可以吧,县城里边属性是不是也很多。有很多属性吧,啊,你看最低的优先级,最高普通优先级,最高优先级有多少,我怎么拿,这个里边的值,就是这个属性,它的值我怎么拿。这个咱们还没讲。还没讲啊,这个只是通过反射机制,你怎么怎么反编一个类的属性,你怎么给它反射出来。
08:00
啊,这是从早晨到现在讲的唯一的一个新的知识点,各位啊,这个新的知识点作为了解不掌握啊,不是重点来讲,讲了半天就是就是让大家看一下反射机制的威力啊。反射机制的威力。这个不需要掌握啊,掌握不需要掌握,因为我们以后。不是开发反编译器的啊,不是开发反编译器的。只是呢,给大家诶这样一个案例,让大家呢感受到哦,反射机真是功能太强大了,只要有这个字解码class文件对吧?诶我就可以拿到这个类当中的一些属性啊,拿到属性你看同时也锻炼一下大家这个拼创,你看是不是可以拼创啊。怎么拼串啊,Ad方法调用方法来拼串,拼接字符串。啊,拼音字符串。重点还没讲到各位啊,重点不是这个啊。重点不是五个六。啊,重点是我们通过反射机制怎么访问一个对象的属性,这才是重点。
09:04
还没讲到重点啊,就是说我怎么通过反射机制去去去访问这个对象的这个属性,我们通常访问这个属性,它是不是它里面是有值的,对吧?我们要访问这个值,或者说我们把这个值,假如说我们获取到原先的叫张三,我们把它获取到,或者我们把它改成李四,对吧,我们这个通过反制机制该怎么去做,这个才是我们。哎,至关重要的一个东西啊。
我来说两句