00:00
好,咱们看下这个一点瑞诶高级部分反射啊,呃,今天呢,咱们主要讲的是这个javava的这个新特性了啊,那这个新特性呢,其实就是一些新的一些语法层面的一些内容了,其实从整个这个Java这个语言的这个层面呢,其实我们基本上讲完反射以后啊,就算是完整的一些内容了啊后边的新特性呢,就有一些呃,修修补补的一些东西,一方面呢,是在现有的结构中加了一些东西,另外呢,就又新增加了一些API啊这样的一个意思啊成那我们来看下这个反射啊,首先关于反射我们这一章主要的一个内容啊,这个咱们一开始上来就提到说反射呢,相对来讲要难一些啊,像这种越难的东西呢,大家越得是清楚到底我们都讲什么了,到底难在哪了?那这个难的过程当中呢,哪些又是重点的,需要这个这个一开始就给大家掌握的,哎,这个一定要把控住哈,所以这块的话呢,我们一上来呢,比较重点强调的就是我们这一章到底都给大家讲几个事儿。
01:03
那咱们整个这个障基础阶段也基本上就到最后这个收尾阶段了啊,哎希望呢,咱们讲了这么多天以后,哎,大家有一些这个这个学习方方法方面的一些认知哈,就是以后呢,我们还会学很多的新知新知识,而且还很多啊,那么在学每个知识的时候呢,呃,掌握的第一个思维方式呢,就是叫,哎我也之前提过的哈,叫大处着眼,小处着手,哎每天的话呢,可能有很多的新的代码,哎需要你深入进去,一点点去敲,当然别陷进去了,哎时不时的你也要跳出来看一看,哎到底我现在在干什么,前后还有什么,我写的东西到底是重不重要啊,不重要,不重要那就先放放,先应该写重要的东西是吧,这个一定要把控住哈,像这个讲外部阶段,涉及到很多的一小块一小块的知识点,可能一天呢,就讲一一块啊,到底这个东西重要不重要,这个东西的核心是什么是吧?呃,然后呢,知道哪块重点了,你再深入进去去写,千万别一头扎进去了。啊,这样啊,包括后边这个写项目的时候呢,代码呢也很大啊,大家呢,比如说这个写项目的一个技巧啥呢,你可以先晚上的时候呢,诶项目今天老师基本上讲完以后几个大的功能是吧,你自己呢,把一块块的先从老师这个代码里边你粘出来,粘一块没问题啊,再粘一块没问题,再粘一块花比如说一个小时的时间,先把老师的一块块代码先都粘出来,跑通了,这时候呢,相当于你从大的方向上知道我们要做几个事儿,诶然后呢,你再开始第二遍,然后呢,好,我第一次是粘在这个事儿,好,那这个里边呢,我现在去写,诶看看里边这个细节是什么是吧,千万不要说那写项目的时候一开始就陷进去了,一晚上十个点就写的,第一个还没写完,后边九个都都搁那了是吧?哎,所以呢,你一开始可以先快速的花一个小时时间把这个一块块东西都粘出来,从整体上有一个理解啊,然后呢,再深入进去去写啊,行,这是一个思维方式啊,大数着眼,小数着手。
02:58
啊,其实以后这个你工作也好,生活也好是吧,以后其实也应该是这样子啊,呃,工作当中你也别一直陷进去了,然后出不来,不知道别人都在干什么是吧,时不时的你也去跟别人聊一聊,说一说,包括现在大环境怎么样了啊整Java呢,或者说诶还有没有继续Java更好的,你像这个两年前大家如果要比较早的接入大数据,那你要是很快的去转行的话呢,那大数据的待遇其实还是比较高的啊,现在呢,其实大遇也比较高啊,主要呢,现在大数据毕业以后比Java高,呃基于两个原因,第一个原因呢,就是通常现在大数据都得基于Java的后台了,所以他对技术层面的要求稍微高一点,需要你学很多新的东西啊,新的这个框架,这是其一,那其二的话呢,还是因为供不应求。
03:43
啊公应求就现在需求的大数据的人要多,但是市面上呢,具有这位具有这种这个相应技术能力的人又相对少一些,所以造成这个局面呢,就是大数据的薪资会偏高一些,哎但是这种情况呢,会随着供给的人慢慢慢慢增加,哎这个呢,薪资呢也会稍微稍微的往下回调啊这个大家呢,要理性的去看待这个事儿啊,你不能这个有的同学一过来一说哇,大数据一出去,23K24K啊甚至更高,这个咱之前班的同学确实出现这样情况,而且还是大批量的出现了,哎,但是呢,你不会说这个现在你毕业以后是我也一定得二十三二十四啥的,哎这个课的话呢,咱肯定是比那时候讲的更厚了,但是呢,这个大环境就是诶供给的人呢,也在一点点增加是吧?啊你别往上边去去去比哈,你看看下边,你比这个张二的毕业的同学薪资待遇还高好几千呢是吧?啊学障二的呢,更不要气馁是吧?啊你现在学了Java,那不一定非得整大数据,那以后选择的途径也多了去了啊学大数据的话,再往回返是不是就费劲了又是吧。
04:43
你往好里想啊,对,就是你只只要你站住这个Java的这个后台的业务逻辑呢,你就这个能整的很清楚的,以后往哪些方向转,其实都都好说啊好,呃,这个说的第一个事儿啊,就是大处着眼,小处着手这个事儿啊,包括以后你这个谈女朋友也是谈一个不成,谈一个不成,这个时候你得大处着眼一下,是不是自己有什么缺陷啥的是吧,然后弥补弥补啊,然后呢,接着再去谈,嗯,别呢,就是陷进去了,说这个这个我就怎么着啦怎么样啦啥的是吧,哎,把握把握其中的规律到底是什么啊,嗯,好,然后接着呢,我们提到关于反射的一个理解啊,反射一个理解,嗯,反射呢是我们讲的一套这个API啊。
05:31
Java给我们提供一套API,那使用这套API呢?我们可以获取任何类的内部信息,那并且并且能够直接操作任意对象的内部属性和方法。那这呢,我们主要提到反射被视为Java动态语言的关键,那本身Java语言呢,其实是一个静态语言啊。编译时候呢,基本上这个东西就确定下来了啊,当然呢,我们通过反射这样的一套API,能够让它具有这种动态的特性,哎,就是通过反射来体现这个事儿啊。
06:02
行,这呢是对它的一个,诶稍微宏观上的一个解释,哎大家呢,能够清楚就可以了啊,那么这个反射的话呢,主要呢,还是在咱们后边框架里边用的多,这个还是在咱们后边这个框架用的多,大家呢后边呢,看到这个框架的时候,尤其是看底层源码,你会发现大量的使用反射,就是因为它有这种动态的特性,哎我们就想用它这种动态的特性写一些通用的一些结构,通用的一些功能,哎,才使得会是这样的一个特点,那这呢,咱们前面也说过这个事儿了,像这个框架。哎,就呢可以认为是这个反射,哎加上我们说的注解,哎,再加上这个叫设计模式,哎核心的呢,其实就是这个点啊,哎后边呢,大家学到框架的时候呢,你去体会,再接下来说我们去体会反射机制的动态性,那这个呢,也是我们说的难点所在啊,那这个动态性呢,说了过多的语言没有用,主要呢还是得看代码,代码呢大家能够理解了,那一下子动态性的这个点呢就出来了啊这呢,我们是后边写过一个例题,把这个例题呢,我们CTRLC粘过来。
07:14
啊,那么后面的话呢,咱们即使看到这个外部也好,你看到这个框架也好,其实里边的动态性的其中一种方面的体现,就是这里写的这个例子,我们呢,想创建一个类的对象。啊,Java语言呢,咱们说是面向对象的啊,你得通过对象去调一些结构,那首先得有对象,那这个对象怎么造,还说呢,通过反射可以造。哎,首先反射能做这个事儿的,然后说为什么要通过反射灶,就是因为反射能够体现动态性。我也不知道你到底想造哪个类的对象,但是我现在这个服务器都已经跑起来了,把咱们写的这个这个工程呢,都已经部署到我们服务器上,都已经运行了,哎,现在呢,有客户端,有浏览器要访问了。这时候你就属于这种运行期的这种状态,执行着呢啊,那你想造哪类对象不知道,那用户呢,现在说我想登录啊,我想访问啊,我想看哪个页面这儿呢,这种请求在我们Java层面呢,都得需要你对应的这个业务逻辑去帮他做这个事啊,哎帮他做的这个事儿,那不都通常咱们不都得是通过方法去做吗?哎,你通过方法做,你不得有对象调方法吗?这就涉及到对象的创建了。
08:23
那到底造哪个类的对象呀?你不能编译期就确定啊,你也不知道他到底要访问什么呀,是吧,所以这个时候呢,我们就通过反射,诶把这个逻辑呢都写好,那你这块呢,诶想登录这呢,我就动态的给你创建登录对应的这样一个类的对象。啊,比如是log in。这样的一个so。哎,你要是想注册,我就来一个register的一个sol相应的类的对象,我就帮你造好了,这呢都是在运行期做的这个事儿啊,那这呢都是通过反射来实现的,就是体现了它的这种动态性啊,所以这块呢,我们举个例子就是哎,你告诉我哪个字符串,我就帮你造这个字符串对应的类的对象。
09:07
哎,这样啊,上面呢,咱们这个想体现动态性,主要是哎有一个随机数,你在这个看代码的时候,你根本看不出来要造哪个类的对象,只有运行才知道,哎来体现这个动态性啊,这个呢是咱们这章的一个难点啊,什么叫动态性?下边的话呢,说Java反射机制能够给我们提供到底哪些功能,说白了就是能做什么事,哎,咱们PPT里边这些游戏啊,这个我就直接把这块粘过来了。咱们这一张讲的呢,其实也就是在说反射能做什么啊呃,下一个呢,涉及到相关的API,那这个我直接在这写写了啊嗯,其中有一个类对是咱们这个浪包下来,把它呢也看作是反射的一个。是不是源头啊,哎心里有它啊,那基于这个大的class,然后我们有下边的浪包下的一些子包,对的紫包,哎,像这个method呀是吧,哎,Java点,嗯,还有这个属性是吧,哎点点到。
10:19
Or对吧?哎,这样的一些结构等等啊,还有其他的很多这个呢,你去看我们这个reflect这个子包就可以了,那这个子包叫reflect,就是跟反射相关的API啊,那额外问一个小知识点,这个咱们前面讲import的时候呢,说这个浪包下的,其实就不用去import了,那时候我们这个方法属性,这个还需要在我们代码中去引泡的吗?需要要需要,诶需要,哎他不用,但是你这个紫包是不是跟你其实大家看的是两个包,对吧?哎,他也得需要啊,你看我们这个代码里边,上面其实都有写,随便我们找你看上边。诶,你看引泡的时候,嗯,这块是吧,诶都必须呢去倒不倒的话呢,这就报错了,好这呢就过了下一个关,在关于这个大的class类的理解和获取它的实例,诶这个咱们刚才也考这个问题了。
11:12
嗯,关于它的理解啊,这呢,我们写的这样几个点啊,来CC一下。行,这上面呢,这不是咱们讲完这个反射这个应用的时候呢,说了两个这个疑问啊,这个疑问呢,大家自己体会一下就行啊,尤其呢,有同学提到说反射机制跟封装性矛矛盾的这个事儿啊,这个咱们上课也解释过了,这大家能理解就行,一般面试也没人问你啊,就是怕旁边这个不懂技术的这个女同学呢,突然问到你这个时候呢,你得显示一下你确实技术深厚是吧?啊,你得给大家解释解释啊,这个笔试面试没人问这个事儿啊。或者你自己呢,可能呃自己理解不过去是吧,哎,你也得去想这个事儿啊,呃,这呢提到了这个过程,这个过程呢,大家得清楚,咱们刚才考试也考过了。诶,你能够用自己的语言呢,确实是理解了啊,这个不要去死记硬背,这个一般面试也没人去问这个事儿,还是你自己得清楚啊成那下一个的话呢,我们获取大的class实例的几种方式,哎也讲过了,一共呢四种,当然需要大家掌握呢,是前三种。
12:18
那这里面。嗯,这呢,我强调一下吧,前三种需要大家掌握。前三这个咱们测试这个A呢,基本上就发现三右括号有对,这经常没有前括也没有啊。这还挺坑的啊,这个软件颜色不一样了,那那就这样吧,好哎,方式三,哎呀还真是。行,那这呢就不多说了啊,这个需要大家掌握,然后再下一个说创建类的对象的几种方式,这呢是咱们做的一个总结啊,嗯,这个回忆一下方式一,对方式一呢,咱们见的最多了就是直接new,加上是不是构造器啊对咱们讲面向对象的一开始都是这样做的,那除了这种方式还可以怎么办呢?对通过反射,通过反射之前咱们还有过别的形式不?
13:24
对,像咱们讲那个IP里边那个at dress。你也没有用是吧,是不是调方法呀,还有那个calendar日历是不是也是调了一个方法,然后去获取的,对吧,所以说第二种方式呢,是在反射之前也见过很多的啊,我们呢要创建。啊,要创建这个比如叫叉叉叉这个类的对象可以考虑啊,可以考虑什么呢?一方面你看一下API,或者你试图直接写new,后边呢,写这个叉叉叉的时候,发现根本不给你提示啊,这时候你要考虑这个类呢,这个构造器可能就私有了,没有对外暴露,那要想实例化,诶发现呢,我们可以考虑的就是叉叉叉这个类本身。
14:08
对,他提供静态方法了,或者呢,我们以后还会见到叉叉叉S。那咱们那个讲这个NL的时候,没有咱们具体去说嘛,像那个pass讲到它的对象是不是有帕加S这个pass,对就是哎有一个S这种啊好,你也可以看成是一个工具类了,还有呢,会见到叫叉叉的factory,后边呢,大家会见到啊还有什么呢?叫叉叉叉的一个叫builder builder构建者,建造者,哎大家呢,可以考虑去这些类中,哎,查看是否有相应的静态方法的存在。哎,静态方法的这个存在啊,然后可以呢,哎,调用哎其静态方法哎,去创建这个叉叉叉的这个对象,哎其实无外乎呢,就这样一些方式啊,在这个相应的方法里边,它其实本质上来讲还是帮我们通过new加构造器的方式创建的对象,只不过呢,他把这个事儿给你封装起来了,不建议你直接去new,而是呢,通过我们这个精态方法去做,里边呢,肯定涉及到这个封装性的体现啊行,这呢是我们说这个方式二,然后方式三,诶咱们讲到通过反射啊,哎来实现。
15:26
行,这呢,就我们这种方式,反射的话呢,呃,或者或者这样说吧,虽然说反射能做,但是通常情况下大家造个对象,比如说本身你能直接去拗个person,你有必要去通过法式来做嘛,没有,那太大材小用了是吧?哎,明明呢,你现在到这个天安门那块呢,你其实骑个自行车也行,坐个滴滴也可以,你可以自己开一辆火车去是吧?哎,没有必要了,就啊行,这个呢就是反射,反射的话呢,主要就是在所谓的这种动态性方面,你想起一些通用的造对造对象的时候才会用反射啊,除此之外呢,平时造个对象还是拗啊拗不了的,你就考虑二这两个基本上能够满足你的需求啊,都不行了,我们再做这个事儿啊,下一个说大的class实例呢,可以是哪些?呃,实例可以是哪些结构的说明,呃,这个咱们这个上课的时候呢,最后提到一下,它不一定非得对应的是一个类。
16:23
哎,这不是咱们说的是这个题目是吧?哎,不一定是个类的啊,还可以呢,是这个接口啊,数组枚举类注解基本数据类型Y的,哎,这个都OK啊,哎这个呢,大家一说就都清楚啊就可以了,好,这就过了。
我来说两句