00:00
好这个呢,我们就写完了啊,那写完以后的话呢,我们先不着急往下去讲,我们说个什么事呢,咱们在一开始讲到这个反射的时候呢,提到一个说反射呢,是我们Java这个语言呢,叫体现它的动态性的一个关键。啊,这个呢,确实大家学完这个反射以后啊,只要提到这个反射呢,就要呃首先呢,明确它的这样一个特征,他跟我们讲了其他的API呢不一样啊,呃它呢体现了我们这个动态性,动态性呢就是说我们在这个运行的时候。你看在下边这块有描述哈,我们在这个运行的时候呢,可以根据某些条件呢,改变自身结构,比如说呢,我们想创建哪个类的对象,在编译的时候呢,是确定不下来的,只有在运行的时候呢,我们才知道你到底要找哪个类的对象,哎,这个上午我不是也简单举了个例子,说从浏览器你到底是登录还是要注册,是不是在服务器这块呢,体现的一个动态性啊,那咱们下边呢,通过基于那基于咱们已经讲的这个代码,其实我也可以写一个简单的例子了。
01:00
哎,不妨呢,我就写到咱们这个里边啊,诶test或者写个二。通过这个例子,咱们想说明的就是让大家去体会一下,哎,我们叫反射的这种动态性,我写一个这样的方法,Public返回值呢叫object,就叫做get instance。获取一个实例,这个方法呢,有个参数就叫string类型的。嗯,Class的一个pass。那就它,然后在这里边我们呢,做什么呢?首先我叫class,点叫for name,把我们这个class pass呢放进去,得到一个我们对应的大的class的一个实例。诶,这这应该能看懂是吧,这个异常呢,暂时我们提前都给他抛出一下。有了这个class以后,我通过这个class呢,咱们调一下这个叫incen这个方法。那我们就创建了一个你这个路径所对应的那个类的一个实例。
02:01
诶,我们做一个return。哎,这个呢也有异常,干脆我们把这个异常就整个给它抛的稍微大一些。行这呢我就写完了,哎,这个方法的一个作用啊,在我们这描述一下说呢叫嗯,此方法叫创建一个嗯指定录,呃指定这个呃全类名。啊或者指定呃,创建一个指定类吧,啊的对象啊,这个我们的行参啊叫class pass啊,这个class pass呢,就是我们指定类的全类名。行这样子,那下边我们做一个测试,现在我想创建哪个类的对象呀,我这样写,哎,我new一个叫RHYTHM,这也是我们这个API里边一个类,这个类的话呢,我们去next int一下。在这里边的话呢,我写一个三,产生一个随机数,这个随机数的这个边界呢是三,哎,它其实能给我们反回的值呢,就是012,哎这样当中的任何一个int,拿一个number呢去接收,哎,我做一个Switch number。
03:12
根据这个number的值,我去kiss一下,比如0BREAK。可以试一下,一。K2。Break,行,那如果你要是零的话,那咱们在上面呢,我在这个声明一个死追类型的,就叫做class pass,先是这样写的,如果你要是零,我这个class pass。哎,我这呢,比如说就写java.lu包下的string,哎,我们用一个string,你string里边要没有具体的内容的话呢,其实啥也看不到是吧,我们用一个date吧,Date的话就得是YouTube下载。好,这是一个,然后如果呢,你要是一。
04:00
拉帕扎二点。整一个谁呀,Circle下子吧。再来class pass,那咱们写个章,写咱们自定义的这个吧,艾特硅谷点。啊,这个Java下的这个person就是这个大家写的时候呢,呃,你得看清楚了啊,有的时候可能写的容易写错,也可以这样,这呢是我们这个person类,双击选中点右键,它一个呢叫copy reference啊,然后你回过来。那这块的话呢,你把它比如删掉这我直接CTRLV一下啊,就是它的全路径,那以防呢,你这块自己写写错啊,当然了,在我们这个idea当中,其实它挺好的,就是你看我这个点的时候,诶出不来吗?看点啊出不来是吧,高估他了啊,诶在这好像可以吧,你看我们在这的时候,你看我class.for name这样知道吧。
05:01
嗯,Com点你看这有是吧,这呢比我们eclipse要强大一些,Eclips的话呢,你这个字符串里边呢,它点不出来啊,这个class的呢,它知道你现在要加载某一个全类名的一个类了,诶它呢也能给我们做提示啊,它这块还是挺强大的,这块呢主要是他不知道你到底要干什么啊,所以这呢点就出来了。CTRL一下,那就是它,那通过这个Switch的话呢,咱们这个会选择其中一个class pass做一个赋值,赋制完以后,下面我们就调这个get instance。该先生呢,把我们这个class pass呢放进去,我们就找了一个对象。行找好了啊。行这块有异常有异常了,咱们在这快开始一下吧。下边呢,我们就打印一下咱们的OG行这个代码能看懂是吧。那现在的话呢,我们看这个程序啊,现在问咱们现在如果编这个,编译完以后,这个代码就会生成对应的自解码文件了,你要现在光去看这个自解码文件,或者自解码文件大家看不懂了,你就看我们现在这个程序,我还没有跑起来啊,相当于编译完以后啊,你能确定下来我造的是哪个类的对象吗?确定不了,那真正它造的是谁,是不是只有运行以后看看生成的随机数是谁啊对的,跑一下。
06:28
那这呢,是咱们造的自定义的这个类的对象。还是?这就不是了,这就我们这个data,呃,这是这个应该是U下的data。这也是一下的data。那这也是啊,那你也可以写个循环,把这个扔到循环里边,让他跑上这个100次。A,加加一下,整个我们从这啊一直到这儿。
07:04
扔进去。哎,然后呢,整个执行100次。啊,还跑异常了还啊。诶,泡一场,为啥?S加的data呢,没有空间构造器。是吧?没有空单构造器,所以这块我们调的时候,你看咱们这块去new incens,你这是不是相当于调空单构造器了,那不就挂了吗?那压呢,就是像搜一下,对的,你不能这样用啊,那换掉,嗯换它它不行换一个。换谁啊,很多人换一下这个,嗯,那也没有空构造器,那换一个浪包下的object吧。这个OK。你看这就好了,那这呢是咱们造的这个person啊,这是里边咱们加了一个代码,那这呢是咱们这个data object也有。
08:06
哎,就是在运行的时候,我们才知道到底你要造的是哪一个类的对象,哎,你像以前咱们呢,要是造某个类的对象,我们是new的方式造的,你在编译的时候呢,你就看到那个代码,你非常明确它造的是谁,但是现在通过反射的方式呢,就不确定了。啊,所以说呢,大家通过咱们刚才写的这个代码啊,去体会一下叫反射的动态性。这一章最难的其实就是让大家去体会反射的动态性啊,就是这样一个点,那为什么我们后边在框架的时候呢,会大量的使用反射呢?就是想用它这么一个点,大家知道框架的主要目的就是希望咱们写程序时候用不着大家去写了,我们提供框架,大家直接可以去做一些配置,就可以直接用了。啊,那你这个框架呢,得具有一些通用性啊,那这个通用性的体现其实也相当于这个反射就帮他去体现了啊,我把一些模块化的东西都写好啊,就好好比是咱们刚才提到这个后台,你到底想到哪个类的对象呀,这个定不了,定不了怎么办呢?你就不能通过那个new加构造器的方式去写,必须呢,通过反射的方式去写,反射方反射的方式呢,把这一套代码都写好了,是一个通用的,然后呢,呃,你浏览器这块你过来,你想让我造谁的对象,我就让,我就造谁的对象,你只需要告诉我这个是不是class pass就可以了。
09:33
啊,或者class也不用告诉我那么全,你告诉我一个小的标识都行,只要告诉我一个标识,就像这里边哪怕是个012都行哈,我就知道到底要造谁的对象了,那我们在这个框架当中大量的这个使用反射就是基于我们框架呢,要是个通用的结构,哎,我们才要用它啊,其实真正开发的时候呢,大家用反射我们自己会用到一部分,另外一部分的话呢,主体上都是在框架中用的,大家如果希望对框架有更深入的理解,看到看这个源码的时候你更清晰啊,所以也就需要大家去掌握这个反射的技术啊,要不你看源码看不懂啊。
10:09
行通过这个呢,大家体会一下这个问题啊。
我来说两句