00:00
刚才呢,举的这几个例子,实际上是在我们开发当中比较常见的啊,比较常见的这个咱们后续展开去说,大家呢,目前只需要知道反射它能够干什么哈,就能干这些事儿,大家能干这些事,那自然而然大家可能会有一些疑问,大家现在有什么问题想要问的不?放开问,不知道该该问什么是吧,该问一些什么问题啊,就让大家去面试的时候,面试的时候呢,这个大家聊一聊,有的时候就聊了两个多小时,最后呢,人家补了一句说你有什么问题要问我吗?该问还是不该问的问啊可以问啊,可以问,当然这个呢,也不是说决定性的,说这个问题问的好了啊就就要了,问的不好了就不要了,这个不是决定性的,决定性还在前面那两个半小时的聊天,但是最后这个你要是问的不好了,可能会稍微减点分是吧,或者说呢,这个印象不好,问的好的呢,可能这个还有一些帮助啊,你想面试的时候该问点什么问题啊。
01:08
说你有什么问题要问我的吗?上来问开多少钱是吧,那开跌了我就不来了啊,那就别来了,这问待遇的话呢,其实呃,一般呢,我说的两个多小时呢,都是跟技术去聊的,跟技术呢就不要聊待遇了。一般的技术呢,他决定不了啊,你像你这个,你面试的这个人,他可能是一个老成员了啊,哎,当然有可能二轮面试的时候是你的一个项目经理,或者是一个开发组长啊,面你就是他要带你的,哎,你可以呢,或者人家主动提出来说你原来这个待遇情况是什么样子的,哎,你你就说一说,然后呢,包括诶你有一个什么样的诉求啊,诶或者你希望过来以后呢,这个薪资情况是如何呀,你可以跟他去聊一聊,通常呢,一般你换工作的话呢,薪资大家涨幅应该是在20%左右啊一般呃,再高一点百分之三十,你上家呢1万,现在我要13000,诶大概这样的一个情况,NBA上家1万现在要多少,我要2万,你凭啥要2万啊是吧,应该成一个double了啊,通常呢,薪资呢,不会说一下子就double了,除非你这个行业现在这个人急缺了是吧,啊,你这个技术呢,在上一家呢,这个那时候还不行,然后突然呢,就是技术爆发是吧,哎,然后一下子待遇非常高,这有可能,但是都是个别情况,通常呢,不会一下子这个薪资待遇翻翻一翻这样的情。
02:26
情况的啊,就是面试的时候呢,你跟人聊一般呢,不会说去去去问人家薪资的这个问题啊,那一般问什么呢?啊,应该问的就是说咱们这个公司,比如我要过来的话呢,呃,是需要参与到哪个项目当中是吧,那这个项目的这个架构是什么。啊,主要呢,哪一块是用什么技术来实现的,把这个问一问,他呢也乐意给你去讲,问的好处是什么呢?有个同学不问,不问以后呢,回来以后人家给发offer了,担心,哎呀,这个我去了,我能不能干下去呀,会不会说干俩月被开了呀,他们那个技术我学没学过呀,熟不熟啊,你这个问题你问咱老师,那他哪知道啊,每个公司跟每个公司的项目又不一样,是吧,那不是你在最后人家问让你问的时候,那多好的一个机会去问呀,能不能干什么呢?几如选型架构是什么,人家跟你一说,你不就很清楚到底是什么吗?啊有不熟悉的,或者那咱们也讲过了,你你也学的,一般的下来就复习呗,就这样啊,再一个就是大家没有想象那么难啊,到公司里边呢,不像咱们这个说要求啊,今天这个项目一天行吧,到公司里边这个节奏就拉缓了是吧?嗯,就拉缓了,到后边大家就业的时候呢,我们也会讲一个内容,就是什么成员的一天,你这一天到底在公司都干什么是吧。
03:44
啊,然后呢,成员了一周啊都干什么,一般呢,就先到公司先扯扯蛋是吧,聊一会一聊聊,哎呀十点多啊11点了是吧,啊吃个饭,然后下午开始正式的写代码,正下午正式开始说哎呀,那就几个小时,还有晚上呢是吧?啊对,这个不是上午下午了,是上午下午晚上还是吧?嗯,像那个之前我去百度那会儿,他们上午没有严格要求说什么时候这个来上班,所以很多成员呢,去的都比较晚,十点多就过去了,过去以后呢,这个发发呆到中午了,吃个饭,吃个饭呢,睡睡一觉是吧,然后才正式开始这一天写代码,一写就晚上十点十点多啥的啊这种行,你去你去问这个问题啊,就是问一些有水平的问题,嗯,那回到这这个讲完以后该问点什么问题啊,怎么着。
04:40
哎,对,哎,这出来一个就是高质量的一个问题哈,哎这个问题呢,是说这个,呃,原来呢,我们讲过封装性。哎,讲完封装性呢,说这个私有的结构呢,在这个类的外部呢,就不要掉了,而且呢,大家理解的一开始还不是很好啊,后来呢,中于理解好了,说啊封装原来就是让调的,哎,我们就开全线开放是吧,不让调的就权限就私有了,哎挺好的,现在呢,突然说私有没有用。
05:11
反正呢,照样可以调,而且呢,原来我们还讲过一种设计模式,就叫做单利设计模式,为了呢,不让我们在外边调呃,造对象,我们把这个构造性能私有了,而且呢,我们在里边把对象调好啊,造好,让你在外边用,这叫单立模式了,那现在的话呢,说如果现在有一个类啊,就设计成是个单立的了,你说我能够再去调它的构造器吗?通过反射太可以了,嗯,可以啊,而且呢,你既然能调它构造器了,言外之意就是我可以在外边是不是又可以通过反射再造一个对象了,那你这个还叫单立吗?那确实就不叫了,但人家这个设计呢,是单立的设计。啊,这确实有个矛盾啊,这是一个高水平的一个疑问,什么问题呢?就是说呃,有了反射以后,或者说我们这个反射的这个机制啊,反射这个机制与我们前边面向对象中的封装性是不是矛盾的呀。
06:19
啊,那如何去看待这两个技术呢?怎么解释?是吧,这是一个问题啊,那在这个问题之前呢,其实还有一个疑问,应该就是我把你该问的都都写出来了哈,嗯,还有个疑问什么呢?就是在这个之前,咱们这有个线啊,上面有这个事儿,呃,原来呢,咱们是new对象,然后呢,逆构造器啊,然后呢,去这个调通过对象调属性,调方法,现在说通过反射呢,也可以做同样的事儿,那么到底我们以后呢,是用上边这种方式做还是用这种方式做呀,是吧?哎,对大家说用上边其实是对的啊,哎,就是疑问呢,是呃,通过这个直接呃逆对象。
07:03
哎直接,哎直接这个拗的这个方式。啊,这个货呢,这个反射的方式,哎,都可以调用,哎我们只有公共的一些结构啊,哎,那么开发中呃,到底用哪个。哎,到底用哪个行,这呢也是一个疑问,那我们就分别呢,把这两个疑问呢给大家解决一下啊,先说这个疑问,刚才大家也提到了,说呢建议还是应该用直接扭的这个方式。哎,建议呢,还是用这种方式,或者说这个方式呢,体现呢,还是咱们只是从这个代码量上来看哈,体现的是我们绝大多数的情况,当然也不排除我们会去用反射的方式,那么就提到我们什么时候呢会去用这种方式。啊会使用,哎咱们说的这种方式,哎什么时候会用呢?这个呢,就提到了咱们讲反射的这个主要的一个特征了,哎反射特征我们提到是不是叫动态性,刚才我们讲概述的时候说这个事了,只是说呢,这个所谓的动态性呢,大家可能理解还不太好啊就也就是说什么呢,如果我们一开始在编译的时候啊,就不能够确定下来,我现在要拗谁,你像咱们在这个代码里边啊,我这直接呢,就是拗了一个person,这个呢,你看你要person我写错了,写成PERSON1了,这就报错了,就相当于编译的时候呢,是不是就做检查了。
08:39
哎,对的啊,编译时候就做检查了,也就是说呢,编译的时候呢,我们这个其实就确定下来你要用谁了,那我们就用这种方式,也是我们绝大多数开发中的情况,那不排除有一些情况呢,我们在编译的时候啊,就确定不下来到底呢要造哪个类的对象,不排除咱们还没有讲代码啊,你先去理解这个事儿,诶编译的时候呢,我确定不下来到底要用哪个类的对象,那么如果出现这样的情况,我们呢,就使用反射的方式。
09:13
是用反射的方式,我简单举一个例子啊,咱们回头呢会讲这个后台,然后呢,是不是也涉及到这个前端呀,哎,然后后台这块呢,我们把这个代码呢,其实都写好了,写好以后呢,都给它这个部署到我们服务器上,都跑起来了,服务器呢都已经运行起来了,现在的话呢,我们通过这个浏览器呢,开始去访问这个后台,访问的时候呢,比如我们写大家呢,有可能是登录,有可能是要注册,那不知道你到底要干什么,那现在的话呢,比如我就呃,咱们对应个URL,我就一个杠,后边呢,我就要log给这个呢,表明我是不是要登录啊。这时候要登录,我把这个呢,URL就发送过来了,我们在Java这个层面呢,就获取了你这个URL,我呢去解析你这里边这个哦,原来你是想登录,你原来是想登录我这个程序呢,是不是我都已经跑起来了,服务器是不是开着了,跑起来了哈,哎,我过来以后发现你想登录行在这个时候,这个时候呢,就是我们这个服务器运行的时候,相当于你这个Java代码都已经跑起来了,这个时候呢,我获取一下你这个值一看叫log in,好,那我呢就造你这个log in所对应的某个类的对象。
10:22
实际上是个sol了啊哎,我就照你那个类对象哎去调一些方法,那如果呢,你这块传进来的是一个叫你是不是想注册呀,那我这块呢,发过来以后,我这块呢,程序已经都运行起来了啊哦,我一看哦,你想注册,那我就诶给你去这个提供注册相关的某个类,去造那个类的对象,诶然后让你去执行相关的方法,你想这时候是不是都是动态的呀,我这个服务器先抛起来,咱不是也讲了,服务器得先起来,这个客户端的是不是才能去连了啊,诶服务器跑起来就意味着我们这个代码呢,都已经运行起来了,在这个运行期间,我不知道到底该造哪个类的对象,因为呢,我不知道你到底是想注册还是想做登录,你发过来是什么,我就呢造相关类的对象去调相关的方法,这就叫动态性,这个特性需要用反射来做。
11:15
啊,这呢,就是我们说反射的一种使用情境啊,就是我们用的这种情况啊,通过这个呢,大家去体会一下,这个叫动态的特性啊好,那接下来这是第一个问题了,第二问题说反射呀,这不跟这个封装性矛盾了,怎么去看待这俩系数呢?非常尖锐的一道问题啊,怎么解决啊,怎么解释啊,你能说这两个技术矛盾吗?绝对不能说是吧,他要矛盾的话呢,JDK都已经11了哈,那你早没发现这问题不去解决啊,那不就问问住了嘛,是吧,肯定没有问题啊,先确定不矛盾,那你不矛盾,你不矛盾啊,不矛盾啊。
12:03
那你怎么去看待这俩技术啊?反对,似乎呢,其实是有点矛盾的啊,封装性就是告诉我们说你出出去以后私有的也不要用反射的,相当于是我还可以用,那不白封装了吗?是不是有点这意思啊,怎么说呀?呃,反射是动态的。嗯,对,这个说的也也对哈,就是说这个反射呢,体现要动态性,那要体现动态性的时候,我们就得用,但就得用的时候呢,嗯,这这也是一种情境哈,没问题,但是呢,好像解释的还没有说完全这个透彻哈,嗯,那我们怎么去解解释这个问题呢?就这个封装性哈,封装性呢,咱们前面讲的确实呢,我们以后呢,再看一个类的时候,或者我们在设计一个类的时候,会将这个类的一些属性结构呢,比如像私有啊,Public呀,你该怎么写还得怎么写,该私有还得私有,该公共还得公共。
13:01
还是要体现这个封装性,当然这个封装性给我们的启示是什是什么呢?当你看到一个类,他写了一些私有的方法,也写了一些公共的方法,他其实在告诉我们私有的方法呀,你就不要用了,哎公共的方法呢,你可以用,因为有可能这个私有方法呢,是人家内部使用的一个方法,你在这个公共里边呢,其实已经调过了,调的是这个私有的啊,你看这个公共的意思呢,就是说它其实是说你需要的时候呢,可以拿我们这些结构去用,私有的话呢,正常你用不着,哎他想说的是这个事儿,这呢叫封装性的体现,包括这个单利模式啊,单利模式你看到了,哎,它有一个私有的构造器,其实在提示我们,你呢要想造对象不要用这个私有的,我这呢,已经给你把这个对象造好了,你直接用就行,这是他给我们的提示,那反射的话呢,说我们可以调,是你能调的事。啊,你说我能调这个,这个私有方法,它其实不建议你去调,但你要非要调也可以调啊,有可能呢,我们给你提供一个公共的方法,这个方法呢更好,比这个私有的还好,我这里边还前后加了一些逻辑,建议你去用这个,但你非要用这个,非要用那你就去用。
14:10
啊,那就是相当于反射,你非要去调私有的,那你就调,只是说呢,不如这个更好,那这个单利呢,单利呢,我这把对象已经提供给你了,既然是单利,就意味着没有必要去造其他的对象,直接拿这个对象就可以完成你项目的需求,那你非要去调一下私有的构造期,又非自己造个对象,那你后边做的事儿,其实跟我用线上这个没有任何区别。那你干嘛还非得去调下私有构造器啊,哎,其实是没有必要的,所以封装性呢,表述的是,哎,建议你去调什么公共的去调,私有格就不要调了,哎,C有的一个属性啊,不愿你直接去修改,让你去提,呃,使用这个盖塞的方法去做,这是它给封装性给我们的一个提示啊,但反射呢,相当于解决的是我能不能掉的问题,这个呢,解决的封装性解的是哎到底建议你怎么掉这个问题,所以呢,不矛盾啊,先把这个事呢大家理解一下啊。
15:04
行,那通过这个呢,大家先对反射有个直观的了解,那么接下来我们呢,就从头开始来讲,反射里边到底涉及到哪些东西,哎,我们也会讲到这个内容啊,具体展开来说。
我来说两句