00:00
那么昨天的话呢,咱们是主要呢,关于这个所谓的反射的源头,这个大的class呢,有个理解,这个呢,大家也是啊,理解理解就行了,就什么是大的class得能够去认识它,最后这块我们提到一个说使用这个class loadr呢,我们也可以去加载指定位置上的配置文件啊,这个事儿呢,大家诶关注一下啊,然后把这个代码呢,可以写一写,这块需要注意的呢,就是这个class我们去加载的时候呢,首先我们使用的是这个系统的压器。实现的啊,所以这块呢,我们是调了一个叫系统加载器,然后的话呢,对应那个方法,然后呢对应这个文件,这个文件呢,小心一点,它默认呢是在当前module的src下。啊,咱们前面呢,使用的这个方式啊,这不是咱们在这写这个代码的时候,以前写的时候呢,我们是用new的一个file,这个file的话呢,默认的是在咱们当前的Mo下,当然了,前提是这个单元测试方法啊,所以呢,它俩有点区别啊,这个细节呢,大家稍微注意一下,所以呢,哎,就得看你是在src下,这个我们就是在当前model下的啊,这个src下呢,放的是这个。
01:01
那这两个位置不同的话呢,我们使用的这个方式呢,也有所不同。啊,OK。啊,这是我们说的这个事儿,当然呢,也有同学可能会说说,如果我们就使用这个类的加载器的方式,说这块的话呢,我们能不能去加载。这个呢?啊。这个话呢,就是呃,不太行了,当然有同学可能会这样想说我能不能体现这个啊,就是点点,这叫往回退一层。哎,退一层这个路径下呢,我们找这个叫info是吧。这个方式我们看可不可以。啊,这个来来,我们走起一下。你看你看这时候呢,是不是找不到是吧,就这个点点的话呢,可能认为说我这就往前退一层这样一个概念啊,点点的话呢,就是我们一开始讲第一章的时候呢,不是讲命令行的时候有个这个CD点点这个操作是吧,这个点点呢,表示想往前退一层目录啊,退一层目录呢,就到当前这个model下了,你发现了这个没行是吧?然后下边这个呢,你比如说它默认的是在当前的model下哈。说呢,默认的读的是这个,那我能不能去读src下的这个呢。
02:04
是吧,你比如我这块呢,我复制一份啊,上面这个我们把它先除掉,下边这个呢,你不是默认在当前的model下吗?当前model下呢,不有一个src吗?SSC下src下呢,不有一个叫in for1吗。是吧,这个可不可以。那这个你发现呢,它是可以的。嗯,看没问题是吧,这个图的就是我们相应的这个文件里边这个数据信息了。那这块呢,消费的这个小细节呢,大家可以关注一下啊,那当然一般的话呢,我们就根据它所在这个路径呢,直接呢,你就去写这个啊,或者呢去写这个了。后边呢,我们在这个web当中的话呢,呃,一般呢,咱们这个配置文件呢,都不会去写在当前的model下了,诶model下这个呢,在部署以后的这个工程里边,相应的这个文件位置呢,它就缺失了,诶所以一般呢,都是放在比如像类似于src项啊这样的这种结构里边了,所以到时候呢,我们会用这样的这个方式啊,稍微大家留意一下就行啊好,那这个完了以后呢,接下来我们就说一下,咱们讲了这个大的class以后,下边呢,我就可以呢继续的来讲一下,说反射到底都能做什么了。
03:03
啊,你不是反射的源头吗?我们也能够获取大的class实例了,好,下边我们来看看都能做什么啊,首先呢,我们反射的应用一说呢,创建运行实例的对象。运行实类就是我们加载到内存当中,方法区里边的那个类,诶可以呢,创建它这个类的一个对象,那如何去实现呢?哎,这块咱们直接呢,在这个位置呢,开始写这个代码,那针对的类是谁呢?我这呢把相关的咱们应用的用的这个数据啊,我就提前都写好了。这个类的话呢,咱们先来看一看,呃,相应的这里边儿的内容呢,比较丰富一些啊好,那主体的话呢,就是我们这个person这个类了,这个类呢,我继承了一个副类,然后呢实现了两个接口,那一个呢是comparable接口,一个呢是我这里边儿自定义了一个接口叫my interface啊里边呢就写了一个方法。好,那回过来啊,然后呢,这里边儿继承这个父类呢,还是有泛型的啊,然后这里边儿呢,这个接口这块也有一个泛型,上面这块呢,我还写了一个注解,咱们前面也讲过这个注解了,然后下边有属性方法和构造器,然后属性方法构造器这块呢,我设计的时候呢,就权限呢就各自不一样了。
04:08
啊,像这个属性呢,有的大有的小,构造器这块呢,啊,也是有的大有的小。那方法这块呢,也是那有的大有的小,OK就基本上就这样个情况啊。那么现在的话呢,我们这个应用呢,主要呢,就针对这个person这个类呢,我们来说事啊,比如说第一个事儿,我们相当于就想创建person类的对象来我们这块呢,在APPLY1里边呢,去写这个对应的代码,哎,这个呢,我就写成叫。New。Instance是吧,它的一个测试。好,这呢就相当于我们叫反射的应用一。哎,叫创建叫运行实类的对象。哎,那么这个在我们这个题目当中,运行式类呢,指的就是person类了,诶当我们把person这个类加载到内存中的时候,就当我们使用这个叫Java点啊EE这个指令,这个时候呢,我们就诶开始走这个类的先是loading,然后linking initialization啊这样的一系列的环节,这时候呢,他在我们的方法区呢,就会有一个大的class的一个实例了,这个呢,我们就把它称为呢叫运行实类,OK,首先呢就创建它的对象。
05:13
啊,这呢,我就使用这个单元测试方法了啊,第一个好,那创建它的对象的话呢。这块呢,首先我们现在有大的class这个实例了,我得先获取它的这个实例啊,诶我叫class吧,然后右边这块呢,我们有好几种不同的方式了,这个呢,假设我就使一个比如说简单一点的是吧,哎,直接这个方式的,那person的话呢,需要指明一下奥加上我们这个回车啊,注意是咱们这个零三里边这个data里的啊。选一下那上面呢,就有这样一个import了,行,那这块有了以后,那下边呢,我们说呢叫创建。嗯,叫person类的这个实例啊,实例就是对象的意思了,怎么创建呢,直接呢,我通过这个class点,还有一个方法叫new instance。诶,就是这个方法啊好,那这个方法呢,调用的时候呢,它会抛异常,我们把这异常呢给它抛出去,你发现呢,它这块有两种异常,一会儿我们分析一下什么时候会出现这两种异常,这块呢,自然而然的就会得到一个具体的对象了,那因为这块呢,我其实没有用这个泛型了,所以呢,下边这个new instance呢,它默认反馈的就是object了。
06:18
哎,但是其实咱们知道呢,就是一个person,所以呢,我就哎这样呢,做一个强转了就啊alt加回车,诶没问题啊好,那我们直接呢,打印一下我们这个对象。行,来,我们做一个执行。嗯,好就出来了啊,这呢是咱们打印的这个啊,P2这个对象调的这个图存令的方法啊,然后呢,在前边这块,你看有一个输入语句,这个语句的话呢,你去找,诶是因为我们在person的这个构造器里边。这块啊,咱们写了这样的一句话。哎,那说明的话呢,我们刚才呢,调的这个new instance这个方法呢,实际上呢,还是调了咱们personally里边这个空餐的这个构造器了。哎,进而的话呢,我们把这句话呢,就给打印出来了。啊,这块大家注意一下啊好,那既然呢,它掉了这个结构了,呃,说明呢,我们这个方法呢,确实执行的是空山构造器,那如果说我们这个类里边呢,没有空船构造器了。
07:10
掉了是吧,那么这时候呢,我们要再次再次去执行的话呢,会怎么样呢。那应该是不是就抛异常了。哎,抛异常的话呢,其实就是我们这里边儿的第一个异常。啊,这个第一个异常,这个像嗯,Ion是吧,那就稍微难念一点啊,这就相当于实例化的时候的一个具体的异常了,来走起。嗯,干这时候呢,就出了我们这样一个问题是吧,因为我们当前这个类里边呢,根本就没有提供一个空餐的构造器了。那这个细节呢,大家注意一下啊好,那比如说我现在启用那个空调构造器了,还有一个问题,有构造器你不一定能用。这呢就涉及到这个权限的问题了,目前呢,咱们这个权限比较大啊,我们是写在了这个包下了,然后我们在这个包下去用我们这个person了,那如果说我们把这个person这个扩大器的权限啊,咱们改成比如说最小的。
08:07
叫private,按照咱们以前的那个经验来讲呢,换到其他的包下,比如说换到其他包下了,你换到其他的这个,诶肋下其实都不能用是吧,那么这时候我们就想说此时还能不能用。来走起一下啊,刚才我们报的是这个异常。好,现在呢,你发现呢,又报异常了,这个异常呢,变了,他不是说没有你这个构造器了,而是说呢,你是非法的访问的这样的异常了,那就是因为呢,咱们当前这个构造器里边这个权限啊不够。那是一个。那这个问题说说我们是说不够,还是说呢,必须得是一个public呢。诶对这块呢,其实说呢,不一定要求我们这个构造器的权限一定是public,只要权限够就行。什么叫权限购呢?你比如说这块呢,我们是这样写的,这就属于默认权限了,默认权限的话呢,其实在我们当前这个包下,实际上呢,是不是就能够别的类里边就能访问啊。
09:01
对啊,我稍微的体验一下啊,比如说呢,这个时候啊,我这用的是一个默认权限的,咱们在APPLY1里边呢,我现在运行是不是还是会报异常。啊,因为呢,你出了这包了,你还是找不着是吧,但是呢,你要是把这个文件呢,你看我CTRL一下啊,我复制到这个data里边。那我复制到这儿了,这时候呢,跟这个person呢,在同一个包下了,上面这个port看也没有了是吧?哎,在同一个包下的时候呢,我们再去做一个run。你看是不是就可以了,那说明呢,就是这时候呢,只要权限够就行,那我们想说的是这个问题,那我这呢把它还就删掉了啊,咱们体验一下就行,好回过来这块呢,我们稍微的做一个总结了,发现呢,我们这个new这个方式呢,挺简洁的,但是实际上呢,有很多的要求啊,回过来我们就写到这儿了,首先呢,就涉及到我们如何去获取运营实力的对象呢,这个操作呢,非常简单啊,就通过大的class的这个实例呢。哎,我们去调用一下叫new。啊,Instance这个方法即可。
10:01
哎,没问题啊,那这里边呢,我们说要想调离方法呢,能够返回一个运行实例的对象,说呢,需要满足什么样的条件,这个我们说呢,条件一。那要求我们运行时类中必须。提供一个。是不是空餐的过道期啊?这是第一个啊,然后这个条件二呢。啊,要求我们提供的,诶这个空餐的构造器的这个权限啊,要足够,所以我这块呢,就不说了,一定得是public了,你得够,就像我们刚才说的,你在A大线呢,如果去测试的话呢,诶默认权限呢,按说也行,不一定非得说要public啊。哎,这就可以了。啊,这个条件呢,还是比较苛刻的。OK啊,那正因为它这个条件比较苛刻,所以呢,诶大家你看昨天呢,咱们测试这个类的加载器的时候呢,这块我把这个当前的module,它对应的这个。啊,JDK的版本咱们调成是1.8了,因为这个加载器呢,在八以后呢,跟八之前呢就不太一样了,咱们这块呢,就不去讲八以后的了,因为现在基本上大家谈的都是谈的这个八当中的这个类的加载器哈,诶,但是这块呢,我们关于这个NEW4这个方法的说明,咱们稍微看一下在这个17当中。
11:18
哎,我换成那个17了,这块呢,我们也调一下啊,17的这样的一个语言的一个版本啊,好过来以后的话呢,你会发现呢,在。这个时候呢,加了一个线,说明呢,它已经被depre了。啊,这明确已经说了哈,在这儿从JK9这个版本开始呢,我们当年这个方法呢,就不推荐去使用了,那你得建议我用哪个吧。这块提到了是吧,那在这块呢,建议你使用这个constructor呢,有这样的一个方法,也叫new,用它呢去使用。啊,这个呢确实如此啊,原因呢,就在于这个方法呢,要想调用成功的要求是比较高的。啊,那我们后边的话呢,是不是在讲反射的应用的里边的这个第三个的时候,咱们会去讲调用指定的构造器,诶到那个时候呢,我们其实呢,就可以说在一个类当中啊,你可能没有空单构造器,那我就调别的构造器了。
12:07
啊,然后呢,以及说呢,你要有空单构造器权限不够怎么办呢?权限不够呢,我们也可以呢,去设置呢,是可以访问的,所以就比较灵活一些啊咱们就诶不需要呢,再去借助于这个方法。稍微的差点意思。啊,这个大家呢,了解一下就行啊好,这个呢,我们再回过来这呢就提到了,至少目前呢,我们先熟悉一下这个方法啊。知道它里边怎么做的,然后这块呢,我们有一个回忆哈,说呢,Java病当中要求给当前类提供一个公共的空参的构造器。这是咱们当初讲面案对象的时候呢,提到过这个扎病的一个要求哈。回忆一下,我们这时候有什么要求啊?第一个。当前累。是公共的是吧,哎,第二个。诶,提供一个当年类的一个公共的空餐的构造器啊,第三个。有属性啊,属性呢,是不是提供相应的概率方法。
13:01
对,这是最基本的啊,哎,除了这个之外呢,呃,有的时候呢,你看一些地方写的时候可能还会说说你也得这个加个to论是吧,你得再整一个equals和code,诶这个呢,其实为了防止比如说我们要把这个对象放在集合中呀,这不就涉及到ES code了嘛,是吧?To string的话呢,是为了说我们在平时打印这个对象变量的时候呢,你别打个地址了,你打印一下你里边属性的值。是吧,方便我们去看,哎,这就一些补充的一些信息了,当然前面这三个呢,是通常都具备的。那前面这三个都具备呢,其中有一点说一定要提供一个空单构造期了,那大家想想,你说为什么他有这个要求啊。有啥用呢?啊,就是说变音反射掉了是吧?哎,那除了反射这块,前边我们在什么场景当中说也会用到呢。哎,你看场景一,当然咱们讲过叫子类对象实例化的全过程是吧。哎,子类对象啊,在实例化时。
14:01
啊,我们说呢,此类的这个构造器的首行默认调用是不是父类空餐的构造器啊。哎,因为它有个虚破空嘛。诶,所以这块呢,呃,如果呢,你要不想显示的去调傅类指定构造器的话呢,那就是修本空,那你最好傅类呢给一个空参的,要不的话呢,他就报错了嘛。你还得显示写一个super谁是吧,OK啊,这是我们说的第一个场景,当然这个场景呢,其实啊,算是比较弱的一种需求,因为呢,我完全可以呢,就大不了我就写一个序,指定某一个也能解决这问题啊,主要的这个问题呢,其实在于我们这个场景二。就是咱们现在讲的。啊,怎么着呢,就是我们在反射当中。啊,这个经常用于创建。啊,或者叫经常用来是吧,创建叫运营实力的对象。啊,那么既然经常来创建运营实力的对象,那么这个时候的话呢,我们就想写一个通用的一个代码了。
15:03
通用的代码,你想想这个运营式类今天是这个,明天是那个都不一定啊啊,你这个类里边有个in型的一个参数,你这个类呢,有一个string性的参数,你这呢有个data型的参数,如果你要想写个通用的话呢,它呢是int,它是string,它是date,参数类型都不一样,那我没办法整。那大家呢,公用这个能写个公共的呢,那其实就写一个公共的空餐的构造器嘛。所以呢,就好比我们刚才这样写法啊,我这样写它随着这个位置的变化,我们这个代码不用动。啊,不管你这个类是谁,大家呢,都提供一个空舱的构造器,那我通过这个位置呢,不掉的都是空餐的。你要整代餐的,你这个是int,那个是string,那我没办法写公用的了。哎,所以基于这个原因啊,所以呢,经常用来创建运营实力的对象,哎,那么呢,我们要求是吧。哎,我们要求呢,就是各个运行室类是吧。哎,都提供一个红伞的这个构造器。
16:01
哎,然后便于。便于。哎,我们呢,就是诶编写这个,诶通用的这个创建对象的一个代码啊。运行时类对象的这个代码。也就是说呢,我们在G8当中呢,咱们就用这个方法了,那到GDK9级以后呢,咱们就推荐呢,使用构造器来调了,大家就都调这个空的构造器来造,对。你想想咱们前面的写代码的时候,基本上都是先内造对象,通过对象调方法,那反射的话呢,其实也是一个套路,你也得先造对象,然后呢去调方法,所以这个对象的创建这个操作呢,咱们用的很多,只不过呢方法呢是从这个呢换成其他的而已了,那下边就说换成什么了是吧,咱们呢就相当于是要求是吧,就是调用。或者叫通过啊。通过呢,咱们这个叫constructor。诶,这个是一个类哈,然后呢,去调用它的一个叫new instance这样一个方法,但是这个方法的话呢,呃,因为构造器呢,你要是调空餐呢,就用这个了,你要调代餐的呢,它会有相应的这个参数信息了。
17:07
啊,这呢,又是一个可变形参的一个情况了。你要调空餐单这块就不要填就行。好,这个呢,咱们讲到这个位置的时候呢,咱们再说它啊。好,那么关于我们这个new instance它的一个使用啊,来创建运行实的对象的事儿呢,就说清楚了,好,那刚才呢,咱们说的是反射的应用一了啊,接下来咱们看这个反射的这个应用二啊,要获取运行类的内部结构啊,这儿呢,我写了两个点,首先来看第一个点叫获取运行实类的内部结构一,所有的属性,所有的方法,所有的构造期。注意这块我写了所有了,那肯定呢,跟这个权限呢就没有关系了。那说明呢,我们反射呢,确实能够做这个事儿啊,哎,我们这块呢,直接呢,就看一看这里边儿这个a apply2了,所以这块的话呢,咱们在实际开发当中,基本上用反射啊,不会去做这个事儿的,所以这块呢,大家了解一下,你知道反射能做这事儿就行,这个代码呢,我就提前写好了就啊。
18:01
咱们感受一下就行,比如说还是针对于咱们刚才提到这个data里边的这个person这个类啊,那我是通过这个方式,咱们先获取一个大的class实例了,现在就指向这个原实例了,好,这里边儿呢,我们有个方法叫get FS。你先不用看它这个意思哈,直接我们看测试通过这个class呢,我们就get FS,这呢我们就得到一个数组啊,这个S呢就是复数的意思了,这呢就是我们当前这个类当中的属性构成的一个数组,然后我们把它呢遍历了一下。比较简单,行,来我们这块做一个run啊看一看。好,这个时候呢,说这样有一个错误信息啊,在我们的当前的string啊这块又说这个事儿了,这个咱们干脆就把它删了得了,这是咱们昨天演示这个类加载时的这个事儿是吧,这个我也把它就删了吧。没啥用啊好,这是我们再重新再去做一个测试。嗯,出来了啊好,出来以后的话呢,大家你看一下,这里边儿呈现了一个信息,首先的话呢,我们关注一下。我把它这块盯一下啊,咱们在这个person当中打开,我呢声明了一个两个,实际上呢,我这块有三个属性。
19:06
然后但是他这块呢,是不是只给我们呈现出来一个是吧。这一个的话呢,就是这个H是我们这个权限比较大的。其他的没出来。然后呢,这个呃,副类当中create里边呢,我又声明了两个,这两个里边呢,你看这个权限呢,相对来说呢,是底默认权限的啊这个呢,是一个public权限,诶这个出来了。所以呢,通过刚才这个测试啊,其实我们发现呢,就是通过这个方法的调用,它只能够获取到运行实力本身,那就是我们这个person类里边了哈,及其所有的当中public权限的属性。你看你看都是public的。非public的出不来。啊,这个大家哎了解一下就行好了,这个呢是它的叫get fields这样的一个方法,那下边呢,我们再换成这个啊叫get declared fields。这加了一个叫迪克莱尔的。是吧,声明过的这个属性,来我们再去做一个测试。
20:03
嗯,出来了啊,这时候大家你会发现呢,他得到的呢,都是我们这个person里边声明的了,父类里边呢,没有。啊,他自己这个类里边声明的呢,跟权限没有关系。我们刚才呢,看到person里边就仨,他这时候呢,把这仨呢,你看就都显示出来了。所以说呢,我们当前的这个方法的作用呢,就是获取你当前运行实例当中声明的所有的属性。跟权限没关系。哎,所以这块呢,大家了解一下就行,OK啊,这是我们说的这个,然后的话,下边这块我又写个代码,刚才呢,大家你也发现了啊,就是我们在调这个方法的时候呢,返回的这个多个属性构成的数组里边的每一个属性哈,其实呢,把他们细节信息呢,都展示出来了。比如说你是个private了。啊,你是个static的,你是个string类型的是吧,你是这个类里边的这样的一个名的这样一个属性,其实都展示出来了,但我们反射这块呢,其实也有具体的API,呃,是有能力呢,获取具体的每一个位置的信息的。
21:01
啊,是有这个能力的啊,这个大家平时也用不着,咱们就看一眼就行,那我们这个运营类呢,是不是就那那class呢指向它了,这是我们就调上面说的这样一个方法了,这就得到每一个field了,每一个field拿着它来首先。这个F呢,有个方法叫get MOS。这就获取这个叫修饰符的意思了,但是呢,这哥们得到是一个in性的值哈。哎,Int型的值,那我们也看不出来你是public啊private啊是吧,哎,然后呢,这里边有个类,这个类呢,就叫Mo fair。这个类呢,有个叫突出方法,你把呢,你这个数呢,往里边一扔。那我们就能看出来你到底是一个public呀还是一个了。哎,是怎么做的呢?因为我们这个数啊。哎,在我们这个Mo fair这个类里边呢,它其实内部呢,有这样的一个对应关系。比如说啊,这个Mo呢,如果打印出来的是一,那我就认为呢,你就是public了,你要打印二呢,我就认为你是private了。啊,以此类推,还有其他的一些权限修饰。
22:00
所以呢,你看我们把这个呢,先暂时呢,咱们注释一下啊,光看这个权限修饰的话。来,我们跑一下。哎,你看这时候呢,不就看到了嘛,是吧,这个呃,里边我们涉及到三个属性啊,一个呢,这个是二,二呢,你对应的就是private呗。一一就是public嘛,哎,这个是十是吧,十的话呢,是这两个组合。诶,有没有同学会发现说,诶怎么这块它不叫123456啊。二进制的,那二进制呢,123456不也能表示吗。哎,这个设计呢,其实还是有要求的,为啥呢?你看啊,如果呢,Public你要是12345,假设你要这样去设计好,我现在呢,获取fair尔,注意这就只有一个值啊,它这可不是个数组,要数组的话呢,你像我们这个你是。叫谁你是二是吧,写在这个的话,你看这个假设我们是四也好,八也好,你这是个数,说构成个数组那好说了,但问题是这块你获取它的这个修饰符的话,就只有一个值啊,所以呢,如果要是按照咱们说的话,你12345去设计,那万一这个结果你说要是四呢。
23:09
四的话,你说是一加三啊,还是说它就是四呢。是吧,那就这个问题了啊,那人家这样设计的话呢,就不会出现问题,你看它对应的这个二进制是长这样了,那你要是出现是这个,比如说是幺幺了,那你肯定啊幺幺不太可能了,他俩不能拼了,是吧,你要是这个,比如说是这个private跟static吧,那这个是幺零,然后这个呢,是也是幺零。是不是这样一批你就知道了,诶就是他俩的一个组合是吧。OK啊,所以这块你看还是一个。啊,这个需要动脑筋想一想的事儿的啊。这个呢是我们说的叫Mo修饰符的意思了,然后呢,我们再通过这样一个方法叫get tap,诶你这个field呢,Get就是获取你的类型,类型这块我们打印一下,这个呢,我们跑一跑,这不也就出来了吗。哪类型啊,你是一个string,你是个int的是吧,你是个string,注意这块呢,是一类的时候呢,我们一定会写明它所属的这个权利名了啊,因为呢不同包下呢,万一要有重名怎么办呢。
24:07
好,下边这个呢,获取你的名,这就是叫盖内啊,咱们就拿到具体这个名了,来走起。好,这个名呢,你叫name,你叫age,你叫infer,那就行,好,这个大家了解就行,就相当于反射呢,我们实际上有能力呢,获取具体的这些信息的。这呢就我们获取这个属性的情况了,然后看下这个方法,哎方法呢也类似啊。好,首先的话呢,我们这儿去调这个叫get methods,类似于刚才get FS了。那这块我们来先跑一下。嗯,出来了啊,这时候你会发现呢,这里边儿方法呢,似乎很多了,因为呢,除了我们这个person本身之外呢,诶它的这个负类呢,叫做creature里边有方法,而且呢,它还有负类呢,是不是object。诶,当然呢,它这里边儿呢,特点就是只有公共权限的这样的一些方法了。所以跟我们刚才get field这个属性类似,它能获取到运营实例本身及其所有的附类当中声明为public这个权限的方法。
25:03
OK啊行,这个呢大家了解一下,然后接下来的话呢,类似于我们刚才讲的属性,我们在这个里边呢,加了一个叫declared。啊,那这时候呢,猜一下呢。就是你当前这个类中是吧,声明的是不是跟权限没关系了,所有的方法了。属性呢,刚才不是也是这样吗。我们走一下,这时候呢,你会发现呢,跟权限没关系。啊,然后呢,哎,都是当前这个类当中有的。那这样的情况。哎,没问题。好正常,就我们说的这样一个场景啊。好了,那这个呢,就是获取当前类当中生命的所有的这样的一个方法,了解一下就行,然后接着我们看下边,下边这块呢,也是稍微的演示了一下啊,就是方法这块呢,我们只是泛泛的把它都打印出来了,其实呢,每一个细节的信息啊,也都有所说明。包括呢,我们这个参数啊都有啊,我们下边就想说一下,能不能去获取具体的每个位置的信息啊,其实呢也可以。
26:00
啊,这个呢,大家就简单看一下,比如说我们诶还是这个运势类get declared method,得到这个method了,然我们去验一下啊,找到具体每一个方法里边的各个信息。那我们在这个person里边呢,我使用了这个。哎,注解了,在这个位置使的。这个注解的话呢,稍微注意一下啊,咱们前面讲注解的时候呢,首先这呢是我们一个自定义的注解。这没问题了。自定义注解的时候呢,当时提过这个事儿哈,说要想在反射当中能够获取这个注解的信息。必须要求它的生命周期要长一些是吧,对我们当时提到提到过呢,叫runtime,哎,稍微的再看一下这个枚举类啊S的话呢,就是在编译的时候呢,就没有了。也就是说直接把文件中没留是吧,然后class的话呢,Class嘛,就直接把文件里边呢保留了。但是呢,在这个运行的时候。是吧,哎,他就不保留了。这不,Not to return。啊,运行时候不保留,那么runtime呢,就是运行的时候保留,既然运行时候保留了,你就在内存中了,既然在内存中了,我们就可以通过反射呢来获取。
27:05
来去读取是吧。就没问题,所以说这块呢,要想能够去解读出来我们当前的这个。哎,注解的信息必须要求他的这个生命周期呢,是runtime啊。好了,这个方法上面就有,那所以呢,我们在测试的时候。呃,这块呢,我们先试图呢,获取你当前这个方法上面声明的这些注解了。诶,看这是个负数啊。为啥是负数啊?啊,因为呢,一个方法上面呢,可以有多个注解对吧。啊,可以写多个主节的,没说只能写一个啊,所以这一块呢,我们获取到这不就是个复数了吗?OK啊,行诶,下边这块呢,叫权限修饰符,这个跟咱们刚才说的那个属性的类似啊,这个呢,直接叫get Mo fairs,得到这个int型的值呢,拿着Mo fair呢,图往里边一放,这就出来了。嗯,这个OK吧。咱们一点点来啊,我先把这个呢,就咱们先注释一下。
28:03
OK啊,入掉以后呢,咱们针对当前的这几个信息,咱们先跑一下。那这就出来了啊,然后呢,这块呢,咱们获取的是他们各自的圈限修饰符出来的是吧?然后呢,这个前边这块的话呢,我们获取的是这个注解,这不是有一个方法上面这不有注解吗。哎,这样的情况啊,好,然后再往下。这个呢叫获取返回值类型。哎,反应这类型就是我们方法的反应类型啊,你虽然说这个方法比较多,但是大家你会发现这个方法名呢,还都。挺有意义的是吧。Get return type,这不就返回值的类型嘛,哎,再获取一下你的名啊,就拿到了啊,然后下边这块呢,这个关于方法名呢,呃,也比较简单,直接盖内就行了,然后后边这个形态列表呢,我们得给它配一下了。啊,这呢是开始的一个小括括号,结束的一个小括括号,中间呢,就有这个形态列表了,形态列表的话呢,可能是一个数组啊。所以呢,叫get parameter types。
29:00
那形态列表,这不就是一个数组吗?啊,数组这里边呢,哎,其实呢,又想这样的啊,哎,获取一个类型一个名逗号一下,一个类型一个名逗号一下,然后最后这块呢,就没有这个逗号了,所以还得配一下这个事儿啊。哎,看我这写逗号了没啊,写了是吧,OK好,然后呢,这块呢,我们得到这个数组了,这个数组化呢,首先遍历一下嘛。辩论一下呢,说如果呢,你要是这个,嗯,末尾的这个了。这不就数组的最后一个吗?这块呢,我们就只打给你就行,不用加逗号了,那你要不是末尾这个呢,我们就来写完之后呢加个逗号。所以这个呃,我们形态列表的话呢,主要呢,是获取它的类型。啊,咱们也知道调方法的时候呢,跟这个变量名是谁没有关系了,所以这块的名呢,我就配了一个这个变量名啊,主要呢,获取它的类型。好这块呢,我们再收一下来,先把这个呢跑一下。你看像这个这是方案名,这呢就是这个得到的,呃,这是吧。然后呢,后边呢,我们配了个括号突词呢,因为里边没有参数列表,所以我们这块呢,在判断这个时候呢,根本就没进去嘛。
30:05
啊,那像这个方法compare to啊,它呢有这个参数。那参数呢,这是我们这样类型,这就相当于里边呢,数组的长度就是一了啊呃,只获取到了一个嘛,这是我们配了一个它的名。啊,然后下边这块啊,这有两个的,看这是一个,这是一个。哎,这个数字长度就是二。那就这个意思啊,这个了解一下就行啊。好,然后呢,我们说呢,对于一个方法来讲的话呢,它其实还可能会抛出异常啊。所以我们再去获取下异常的类型是吧,异常呢可能又有好几个,诶在这块呢,我们去循环一下,这个细节呢,就不用多去看了哈,总之的话呢,就是你这个方法里边这个细节的每一个部分啊,咱们通过反射呢,都有能力呢去获取。诶,这个大家了解一下就行。啊,了解一下好,那这个完了以后。哎,回过来啊,刚才呢,我说的这个呢,大家你看一看就行了,接着看这个事儿。所以呢,我们除了能够获取你内部声明的所有的属性方案构造器,构造器我们演示了。
31:02
没必要了啊,然后呢,还可以呢,去获取,比如说你的父类。啊,你的接口门。因为可以实现多个接口嘛。啊,你所属的包是吧,你带泛型的父类啊,你父类的泛型。等。哎,这些呢,也是可以的。来这个呢,咱们放到这里边儿来测试吧。诶,这块的话呢,大家稍微的可以写一些啊,以后呢,我们在这个代码当中多少呢,可能会稍微的写一些反射的代码啊,比如说以后在框架当中我们会用到这个动态代理了啊,到时候你要是去处理的时候呢,我们需要呢写一下,这个时候的话呢,我们可能会去写这样的一些逻辑了。啊,当然这个呢比较简单啊,来咱们举个例子。比如说呢,这块我们获取运行实例的负类,就我们想获取percent的负类怎么做?哎,首先你得有大的class的实力。啊,这个咱们换一种方式吧,老用这个点class了啊,咱们还有一个呢,是不是叫for name。
32:01
这个呢,实际上是我们用反射比较多的这种情况啊。嗯,先得指明他的一个权利名。选中右键。这有一个他是吧,哎,点击一下好,然后回过来啊,粘过来,哎,就这样啊,这是一个权利名。哎,这呢,有异常,我们先抛一下。放这儿了啊好,得到一个大的class这样的一个实例了。哎,得到以后呢,首先哎,我们拿着它干什么呢?获取你的负类。那就是get你的嘛。那非常的直接是吧,Super class的话呢,是不是也是一个class。哎,我就叫做super。Class。哎,我就这样写了,好这块我们直接就打印一下这个super class就可以了,来走起。嗯,这不就出来了吗?哎,他的这个super class呢,是一个。啊,没问题啊,这这块稍微注意一下啊,我们那个person呢,继承的时候呢,其实这块在泛型了啊,但是这个打印的结果里边是没有泛型的。啊,这个没有泛型,然后呢,回过来下边这块呢,咱们就提这个事儿。
33:04
呃,说呢,你获取运营室类的带泛型的一个福类了。哎,就相当于我希望呢,这个结果里边带上泛型。哎,其实那咱们就先说这个吧,这个呢,其实跟这块呢,没那么大的区别啊,我CTRLC一下。粘过来。你不是要获取带泛型的弗雷吗?那就是get generic的一个。哎,这不就是带泛型的一个类吗。是吧,哎,就这样一个场景,好这块的话呢,它是带泛行了,所以这块呢,它返回的这块呢,它默认的是一个tab类型的。那我就暂时呢启用它了。来CTRLC一下这样。好这块呢,我们把它呢做一个run。你这时候呢,我们得到这个C呢,他就带上泛型了。啊,这呢,就我们说的这样一个情况了,好这块呢,我们先放到这回过来再说这个事儿,获取运营实类呢,实现的接口。哎,运行室内呢,我们还是得有这个大的class的这种,我们也给他也抛一下啊嗯,有了它之后呢,获取它实现的接口。
34:08
那就是class,点获取。接口interface,注意你看这块呢,得到的是不是一个数组啊。因为呢,我们说一个类呢,可以实现多个接口对吧?哎,所以就是个数组了,行便利一下啊。这个是怎么写?增加循环。先写类型是吧,大的class吧。哎,然后呢,来一个比如就叫个C吧,Interface是吧。你打印一下这个C就行,那当天呢,咱们这个person类呢,我这不让他实现了两个接口吗。那相对应呢,回过来我们去run一下是吧。哎,这不有两个吗。哎,没问题是吧。好,这个呢,是我们说的它啊,然后下边一个获取运营实例呢,所在的包。那大家基本上应该能猜出来这个方法名了吧?
35:02
对,你就class.get一些super class play get interfacece接口,哎,包不叫package。那就它啊,这个package,因为是个关键字了,所以这块它,哎这样的可以去命名,或者你换一个叫,哎,就叫它也行。这样是吧,哎,你不能写成这个package了,这个是关键字了是吧。嗯,注意一下啊,好来凑齐。哎,这不就出来了吗?哎,当天呢,你这个类呢,所在的包啊,不就是这个吗。哎,就他。嗯,没问题啊,好。然后下边这个获获取它呢,带泛型的负类啊,刚才咱们这块也得到了啊。嗯,下边这块呢,你看还有一个需求,这个需求呢,我写了个难。嗯,我们在一些特殊的场景的时候呢,呃,可能要做这样的这个事儿了,什么事呢?获取运行室类的负类的泛型。啊,上面呢,获取运营室类的带泛型的副类,其实上就只到副类这块了,我们刚才呢,打印出来这个效果呢,是长这样子的。
36:06
像这样啊,你说这个需求呢,我们希望他打印出来是什么呀。父类的泛型,希望打印出来谁?是不是就我们这里边儿这个死论呢。对,我只希我只希望呢,你打印出来的它啊,前面这块呢,不要啊。不要这个东西。啊,注意。这块怎么弄呢?啊,有的同学可能会说呢,诶,我得到这个字符串,我这个字符串呢,我就取这个说index of它。是吧,啊inex的它,哎,找到这个位置呢,把这个字符串我取个subst string截出来,这里边儿的这个泛型。是吧,哎说这里边我就拿到了这呢,倒也是一个思路啊,但是这块我要有多个反应参数的话呢,你截完之后呢,是不是有一个挺长的字串,中间还有逗号了是吧。就是我们这个泛型参数是不是可能会有多个呀。你一个两个三个,你这样要广集这块呢,这里边儿渠道的,这不还不是一个吗。
37:04
是吧,而且这个其实也挺费劲,你还得再去Li一下,然后把它再拆成好几个,然后呢,再获取每一个,你还不如我们这块有一个方式简单的。OK啊,行,我想拿到这个东西啊。OK,嗯,这块呢,我们在什么时候会需要呢?其实以前我们讲到一道题的时候啊,讲泛型的时候,咱们当然呢写过一个。哎,叫apply啊。然后我这个印象很深,不知道大家还记不记得。咱们在写这个play的时候呢,当然我说咱们自定义泛型类有什么用呢?诶我们以后呢,说有个场景说写个DAO,这个DA呢,就是通用的这个自然改查操作。啊,但是呢,我们操作具体是哪个表啊,不确定,对应的我们回到Java层面这个类啊,就不确定了,所以这呢,我们就写了个T。不确定嘛,然后呢,具体来说呢,我们是对应的,比如说某个表叫客户表,回来呢,我们对应的是客户类,然后呢,我们就这也提供了一个customer Du,这里边呢,我就写上叫了。
38:00
然后呢,对应的你要是这个order列表过来呢,我们一个叫order类,然后我们呢order to啊继承1DO这块我写order,那我们发现呢,这个继承过来这个方法里边,凡是呢,出现这个气的位置。不就都替换为我们刚才提到的customer或者是order了吗?是吧,这是我们前面讲的这个反刑的时候的内容啊,那我们就有可能需要。啊,为啥我说有可能啊,就是你不这样做也行啊,只不过这样做呢会更好一些,怎么着呢,我在当前的这个类当中啊,继承过来的方法呢,我们这块呢,有一些呢是需要重写的,有一些呢需要具体化一些,调用副类中继成过来的方法,在这里边呢,我们需要什么呀,获取你这个类。你继承的父类?的反型。啊,这不就有这样一个场景吗?比如我们这块我想诶获取某一个对象了,这个时候呢,我们这个参数部分啊,注意诶哪个类的对象啊,就不用用户再去传一个这个大的class了,我们通过这个参数就知道呢,你想返回的对象啊就是customer。
39:01
就不用让用户再去传,或者就不让咱去传这个class了,因为传的话呢,我传customer,万一我要传不是customer,那完事了。既然你这块已经写上卡了,我将我呢就在代码里边获取你啊,这个继承的类里边的泛型,这是谁我就造谁的对象。好,那就是我们现在这个类似的需求。啊,这里边儿呢,我们只不过换成person了啊,获取person的类的反型。我希望你打印出来润。怎么弄啊,刚才呢,我们提到一个说获取它的带泛型的福类,先得到这儿啊。这个我们先抛一下了。就像我们刚才这个运行以后先得能拿到,哎,带泛型的这个类了。然后呢,我们再想办法基于这个结构呢,把这个东西取出来。怎么取啊?哎,怎么取这样说。这个放这儿了啊呃,这个呢,我们是带泛型的副类了,那也有可能这个类呢,它的父类呢,根本就没泛型。没泛型这块呢,其实就不会出现了,如果你要是真的带泛型了,其实上这个type的话呢,还可以再做一个强转。
40:07
啊,这个我们写成叫super class了是吧,还可以呢,对它进行一个强转,强转是谁呢?叫带参数的一个type。这个我们同,那叫para raise,挺长的啊。哎,我叫type吧。哎,这呢,我们alt加回车做个强转。我先写,写完之后我给大家解释啊,然后得到这个以后呢,这个往这个变量呢,它有个叫get actual arguments。Actual type arguments方法挺长的哈,这个呢,返回的其实是一个数组。哎,Arguments啊,这样的一个数组。啊,这个数组呢,是谁呀,就是我们的泛型参数构成的这个数组,因为咱们也不确定你这里边有几个泛型参数嘛,所以它是个数组类型,那对于咱们这个问题呢,咱知道了,其实就一个嘛,也就我们这个,诶数组里边的其实角标零就是我们想要的这个。
41:00
啊,四吨了。来我们这块走一下。这时候不就拿到这个词了吗?但这时候你看到其实是个class哈,那你说我们这个class不想要它,那你就获取那个class的名就行了,但是这时候你注意啊,我们去调这个get name的时候,你看调不了啊,是因为呢,目前我们看到的还是一个tap。哎,这个呢,其实是我们class呢,它所实现的一个接口。啊,但是我们知道它就是一个class,那不妨我们就强转一下呗。旋转成一个大的class,但是那块你注意你得包一下啊,包起来以后呢,这就是class了,你再去盖这个name就行。来,我们再去转一下。哎,这是我们这个string呢,这不就取出来了吗。哎,其实还算是比较方便,OK啊行,那你要有多个参数的话呢,这个你就循环一下,是不是有几个它自动的就循环几个了,每一个呢,不就都取出来了吗。哎,就这样的思路啊,这个大家呢,可能觉得这段代码不太好理解,稍微的我写一下这个注释信息啊,然后这个位置呢,我们现在叫获取带泛型的负类啊。
42:03
哎,直播呢,这个类型呢,是一个tab类型。那这块稍微的写一下啊,这个type呢,是一个接口,然后呢,这个大的class呢,这个实现了。S接口。这个你看一下大class里边就知道了啊好再回过来,然后我们这块呢,针对这个time呢,做了一个强转,这个之所以能够强转成,那就是说如果这个负类呢。是带泛型的。啊则可以。哎,强转为。那强转为呢,我们这个类型。嗯,这个注意啊,这个呢,你看就是带参数的嘛,呃,就是意思你带泛型的意思啊好,那既然呢,我们这块得到了这样的一个带参数的这样一个type以后呢,我们就专门呢调这个方法来获取你这个反型的参数。比如说诶调用这个方法。来获取泛型的这个参数,然后呢,结果是一个数组啊,因为呢,可能有。
43:07
诶,多个泛型参数。好,那么在咱这道问题当中,因为就一个嘛,所以我就没有写负循环了,我就直接呢,取出来的第一个位置上的这个类型了啊。哎,这个呢,就是获取这个。呃,泛型参数的这个名称是吧。你看这就可以了啊,行这个操作呢,注意大家不用去刻意的来写了。因为这个功能呢,非常的固定。啊,甚至说大家呢,你把这个呢,就看成是一个特定的一个方法就行,你只需要呢,需要这个时候呢,你就传过来一个类的权利名啊,你比如说我们刚才提到这个场景,那你传谁呀。我传过来谁,然后呢,就得到你想要的了。是不是传那个叫customer do啊。诶,我把这c Du呢,传递到咱们刚才的这个位置,这呢就获取到你这个类的父类的泛型了啊,你的副类的泛型customer不就出来了。
44:03
哎,就可以了啊,行,所以这块呢,是一个固定的操作。啊,这个大家下来的话呢,你愿意写就写,不写呢也没关系啊,当然呢,你要把这个代码你保存起来呢,有意义,以后万一要用着了,直接一粘就用就行了,是吧。啊,在这块呢,我稍微的这个写一个这个注释信息哈,也就是说呢,对于咱们这个程序员来讲哈,平时呢,咱们写的这个代码。哎,咱平时写的代码呢,注意不是所有的代码,所有的这些方法呀,这个过程啊,大家都需要死记硬背,都得记到脑子里边,那你的脑容量。那得挺浪费的是吧,得用的挺多了哈,诶,所以这个平时我们写的代码的话,其实咱们可以归结成两种类型的哈,这个类型一呢就是业务逻辑代码。啊说呢,我们现在要完成个需求是吧,然后呢,我得先怎么着再怎么着,再最后怎么着,中间的需要哪些位置要判断,咱们写这个逻辑是吧,就大块的这个业务这块呢,大家要多去关注。啊,像咱们这个,诶大家在商务呢学六个月,其实呢,关于框架这块呢,学的呢,其实东西也不少了,诶这个很多呢,这个框架甚至我们都会讲好几套啊,然后毕业之后的话,你到公司里边可能用的只是我们讲课中的一部分。
45:13
啊,当然呢,也会有其他的一些小的一些公司,特定的一些具体业务场景的一些小的框架呢,再参与进来,这是有可能的哈,呃,那么呃,怎么凸显呢,说以后慢慢的你这个价值会越来越高呢,就是你会深入到这个公司的业务当中啊,跟这个业务呢深度去耦合。啊,你比如说你是专门呢去处理这个,比如说保险相关的这种业务的,或者银行证券的相关的业务的,你在这里边做了好几年,那么相应的这块业务呢,你会非常熟悉,那如果有一些新的项目的话呢,诶,除了你有技术,你跟刚毕业的比呢,他可能这个技术站可能比你还新,是吧,但是这块呢,你对这块业务呢,是极熟悉的,前前后头怎么去构建业务,怎么去搭建啊,你的价值呢,其实应该是通过这个去体现。OK啊,就是业务能力了啊,那至于说呢,这个框架呢,这个学习咱们可以通过半年,甚至说都不到半年的时间,你可以很快的去上手一个框架,但是呢,你这个业务这块呢,你需要一些时间的沉淀啊,但是至于这个业务代码逻辑呢,大家平时要多去关注啊。
46:12
诶多关注是吧,然后呢,这个A类型二呢,我们可以理解成了,比如叫算法逻辑代码啊。哎,逻辑代码啊,那这块的话呢,其实大家呢,你就多积累。嗯,这个多积累啥意思呢?就是你要是诶赶上一个呢,愿意写写的你就写写,就当是一个小的算法题或者一个小的数学题一样了,是吧?呃,另外这个多积累的意思呢,就是你多,比如说你整一个呃,像这个呃,比如说有道云笔记啊,或者这个印象笔记啊,或者其他的这种啊。我来啊是吧,这样的笔记,你遇到一些具体的特定的一些算法的时候呢,你多收集着点。啊,然后呢,你把它留着,等以后呢,要用的时候呢,你直接呢,去粘这个代码,直接会用就行了。啊,所以这个呢,就是比较好的方面啊,为什么说一些老的程序员写代码比较快呢?啊因为呢,不是说他这个每一行代码都是自己亲自去写了,有好多呢,是以前他写过的一些逻辑了,他直接呢,可能粘过来,他就能够用稍微的调一调就可以了。
47:08
是吧,那这个呢,就是大家多去收集多积累,这个积累呢,不一定是非得要记是吧,很多呢,攒着啊就可以了啊。好,一说到这个话呢,是不是提到这个,前段时间好像说有有咱同学跟我说的啊,就那个是是叫gpt叫啥是吧。啊啊叫什么。CH。At啊,太太gpt啊。啊这个啊,就是这块的话呢,就有一些所谓的这个像人工智能的这个啊这个体验了体验还行是吧,就是这块呢,你大家如果有兴趣的这个是不是得翻墙。啊,翻墙以后的话呢,这个你可以呢,这个访问一个他哈,诶之后呢,你就可以呢,有什么需求,举个例子啊,你说我这块呢,需要一个快排算法,哎,他呢自动的就给你把这个快盘呢给你写好了,包括呢,就是咱们做的一些课后的练习题,你把这个题目呢往这一放,他也能给你写这一个差不多。啊,这就是现在这个AI的一个发展是吧。
48:02
啊,这个呢,为啥我也没特别关注呢,因为呃,时不时的会出来一个这样的一个新闻啊,像今年这个上半年的时候呢,诶,当时也出现了一个是叫什么名我都忘了啊这个名呢,可能回头呢。也会还有其他的哈,就是这个呢,以后呢,大家能看到这个,随着人工智能的这种发展,包括呢,有大量的这种数据呢,可以去做训练,是以后呢,可以做出来更智能的一些工具的。OK啊,那对于我们程序员来讲的话呢,大家可能说,哎呀,我受到冲击了是吧,我会不会以后失业呢。我觉得还好。但是你说他会对你冲击在哪呢?咱先说呢,它对你有什么帮助哈,诶可能这个呢,以后大家会用,也可能不是它,也可能是别的是吧,那就是以后呢,我们在写相应的这种,呃,算法逻辑代码的时候,你说我没积累,我没有写到这个,呃对应的一个文档当中,怎么办呢?你可以使用刚才我说的这样类似的这样的这种工具,你去搜一下,一搜它里边有。你直接拿过来可以参考一下,甚至呢,有一些业务的代码,只要你描述的得当呢,他可能也会给你提供一些模板式的一些代码,这个代码呢,注意他可能不一定能直接拿过来用哈,但是你在他这个基础上你改一改是可以用的。
49:07
啊,那就相当于呢,你用类似于这样的工具的话呢,是不是可以提升你开发的一个效率了。对吧,啊,你原来呢,可能需要一个月写的代码,你可能现在呢,需要20天就能搞定了。就是能够提升你的速度,因为有些代码呢,你直接可以从这通过这儿呢,去获取类似于这样的工具啊。啊,你要说对你有什么冲击呢?那可能公司里边做这个项目要求三个月呢,比如说就要上线的啊,那现在的话呢,三个月假设需要这个十个人需要去做,现在你要有类似这样的工具呢,以后参与进来了,你发现呢,八个人可能就可以啊,七个人可能也行,那就多出来了两个到三个人是吧。这个人呢,可能会受到影响,他就失业了是吧?OK啊,诶或者换句话呢,就是这种比较低级的这种业务逻辑,以前的时候在公司里边开发的主力呢,是中高级这个程序员,初级这块呢,参与的会少一点,那现在呢,就是有了中高级成员以后呢,这个初级成员写的这个初级代码的话呢,是不是直接用这样类似的工具就可以解决了,是吧,所以初级成员呢,就会比较难受一些。
50:05
所以呢,趁现在他们还没有特别火,大家呢,你赶紧拉升自己的高度,拉升到呢,就是他们呢,处理不了这种业务逻辑,大家去做业务逻辑,非这种业务逻辑代码呢,以后可以参照用,他们去直接拿过来用就行是吧。OK啊行,这个呢,是我们写的这个操作啊,然后这个讲完以后呢,回过来。啊,那么到这儿以后呢,相当于我们这个第二个我们就说完了啊,这块呢,整个呢,对大家要求呢不高。啊,熟悉一下啊就可以了。
我来说两句