00:00
好了同学们,那咱们咱们就开始上课啊,我们这个上节课是学到哪呢?就是学到这个。反射机制这一块是不是,哎,咱们反射机制这块呢,咱们这个。其实也没写几个例子。在这个路径这块折腾了很长时间。是不是IO流去读取这个属性文件这块咱们折腾的时间挺长的。那我们这样,我们把这个反射机制这块再回顾一下行吗。回顾一下啊。来。第35个工作日了是吧。对,35啊。课堂笔记。那么这块呢,首先呢,我们是回顾啊,回顾这个反射机制。啊,首先第一个问题就是什么是反射机制啊,我就当然这个笔记我就不再写了,各位啊,因为之前我们这个已经写过了。
01:07
对吧,啊,那这块的话,我就是把这个杠列出来,然后呢。大家去思考去想好吧,啊,去思考去想,首先第一个什么是反射机制,反射机制有什么用啊。反射机制的话,这块你就这么去答,什么是反射机制,就是通过反射机制对吧,我们可以完成我们自解码的一个访问。啊,或者是操作自解码。这就是反射机制啊,它可以去操作自解码文件。那么他操作自证码干什么?他有什么用?我们举了一个例子,还记不记得?什么例子呢?就是我们通过反射机制去创建对象。然后当时我们把这个类名写到一个配置文件里边,还记不记得通过这个IO流去读取这个配置文件,拿到这个配置文件当中的类名,通过类名再通过反射机制,是不是就可以实例化对象啊?
02:05
然后我们紧接着把这个配置文件当中这个类名改成别的类名,这样的话是不是就可以创建出别的对象啊。而我们的加法程序不需要做任何改动,是不是?所以反射机制有什么用啊,可以让成活更可以让这个叫程序更什么灵活是不是,哎,这就是反射机制它的一个呃作用啊。那这个呢,我就不再去写了,各位啊,写了啊,这块再提一下吧,什么是反射机制,就是你要知道通过这个反射机制可以操作这个字节码文件就行了。啊,然后反射机制有没有可以让同学更灵活啊,写上吧,反射机制可以操作啊,自解码文件。有什么用?可以让程序怎么着更加灵活,更加灵活。那么第二个是反射机制。在反射机制相关的类。在哪个包下。
03:01
那么在这个保险。嗯。大部分在这个包厢。那么反射机制相关的。相关的啊,主要的类。是哪些呢?Class是不是reflect下载这个method对不对,哎,Reflect下载这个or。对不对,哎,还有下面的这个叫做field。啊。这个是反射机制相关的一些类。然后紧接着呢,我们学了一个什么呀。学的就是说在什么呀,在Java中获取class的。Class。三种方式是不是,哎第一种是怎么做呀,Class。
04:02
For name是不是,哎,这个位置是完整类名,然后第二种方式是什么呢?是对象是不是,哎对象点什么呀,有个方法叫get class方法对吧?哎第三种是什么?是任何类型它都有什么呀?点class属性是不是基本数据类型也行啊,Int也有。那么还有class c啊,String点什么class对不对?哎,这三种方式我们大家要掌握。啊,那你这这就就靠基本功了,对吧?啊,靠你这个这个家务的基本功这一块的东西了啊,就是你吃苦不吃苦。对吧,你敲不敲,你愿意不愿,愿意不愿意去使劲敲这个东西,是不是啊,因为你内心当中啊,应该有一个想法,什么想法呢?就是我把基础语法积攒好之后,后期我就可以爆发了。
05:06
就可以做大项目了,你心里如果一直惦记着这个事儿,你就会有动力啊,如果你不惦记这个事儿,你就会发现什么呀,其学这玩意没啥意思啊。是不是,哎,还没有到那一天啊,到那一天之后呢,我们可以都用上啊,可以都用上,当你在用上的时候,你会发现你能用得上,那就证明你掌握了,你没用上,那我觉得。或者你不会用。对吧,那可能就没掌握。啊,反射机制可以操作资金码,可以让成果更程序更加灵活。在这个包下,主要类class method constructor field3种方式获取class。都得掌握啊,那么再往下的话,就是获取了class之后。可以。调用什么呀?无参数构造方法来实例化对象,我觉得这个代码也得记得。
06:02
比如说我们现在呢,拿到这个class了是吧,哎class.four name这个位置跟上一个,哎,比如说java.u date是不是C点你就什么呀,Instance这个方法返回一个什么,哎,对象。返回一个对象对不对,那么这个一定要注意的是new instance这个方法,它底层调用的是啊,底层调用的是。该类型的无参数构造方法啊,该类型的无参数构造方法。如果没有这个无参构造会出现实例化异常啊,如果没有这个无参数构造方法会出现什么呀?哎,异常。大家还记不记得new instance?这个C呢,代表就是date这种类型。
07:02
明白吗?C代表的就是date类型啊,来这写上C代表的就是。日期date类型,然后这个位置实际上是实例化一个什么呀?哎,实例化一个date日期类型的什么对象。实例化一个日期类型的对象出来啊。Class for name返回class,然后new instance这个方法来实例化一个对象出来啊,一定要注意的是,如果就是这如果是构造方法无仓要是不存在的话,这个方法就就出现实例化异常,就会出现实例化异常啊,如果这个无仓构造方法。没有的话就会出现什么呀。叫做实例化异常啊。那么我们这个到反射机制这一块,其实我们也就讲了这些对吧。
08:02
是吧,不过我们也还提了一个class name,这个方法的一个作用就是,如果你只想让一个类的静态代码块执行的话,你怎么做呀?如果你只想让。你只想什么呀,让无参数,哎,不是让无让这个静态代码框。静态代码块执行的话。你可以怎么做?就是如果你只想让一个类的静态代码块执行的话,你可以怎么做?可以这样做啊,class.for name后面跟上这个该类的类名啊,该类的类名。这样。类就加载了。对吧,哎,这样类就加载了,类加载的时候只有什么呀?哎,就是类加载的时候静态代码框。执行啊,如果说将来有一天你有这样一个需求,说,哎,一个类里边有静态代码块啊,我只想让这个静态代码块执行,那你可以怎么做呢?诶你拉这种方式它就执行了。
09:07
啊,这个地方有点印象各位啊,有点印象后期我们要用要用啊,你看这个方法,我们现在它是有这个返回值,但是我们对这个返回值不是特别关心,对吧?哎,我们要的是这个累加起的动作啊,注意在这里啊。对该方法的什么返回值不感兴趣啊,主要是为了什么呀,使用什么叫类加载这个动作啊,类加载这个动作。那么再往下我们反射机制这块,我们还说了什么呢?其实跟再往下的内容跟反射就没关系了。再往下呢,我们在这这个学的这个东西跟反射好像就没关系了,我们是是关于径问题吧,关于路径问题啊。是不是,哎,关于路径问题啊,那么这块我们讲了这么几个啊。呃。就是怎么去获取一个路径啊,大家还记不记得这个代码,你背没背,你看我你看我我我背没背啊,我我是背了啊thread点什么current什么thread。
10:09
点get什么contact class什么类加载器吧。点什么get吧。是不是,哎,这个位置写个路径,然后点盖什么pass,你看我这是了的啊,我是背了各位啊,那么这个呢,可以获取一个文件的绝对路径啊,我不知道还记不记得这种方式可以获取文件的绝对路径。就是这种方式是为了获取一个文件的什么绝对路径?啊绝对论,但是该文件要求,但是该文件要求放在什么类路径下。换句话说,也就是放在S2C下啊。换句话说,也就是放到什么呀,S2C下面。
11:03
啊。嗯。到工人异常。那你这个文件肯定写的不对,你文件路径可能写错了,Thread current thread get contact class lower get stores get pass这个方法返回一个pass,这是个绝对路径。这种方式是为了获取一个文件的绝对路径啊,但该文件要求放在类路径下,或者也就是放在S2C下SC。下是类的根路径,S2C下是类的什么根路径?啊。那肯定的呀,你没在SCSRC下,你找不着啊,找不着它,它就控制异常了。啊,就get result拿到这个资源,整个这个返回的就是那那去调get pass这个方法肯定报控制异常啊。啊,那没得说啊,你这个位置你要注意这个,你得确保它在src下面。啊,这个地方写什么,写相对路径。
12:03
啊,但是这个相对路径从哪儿啊,从S下S2C下出发。开始找。比如说我们在这里啊,又重复了一遍,各位啊。比如说呢,你这边啊,有一个什么呀,有一个文件。叫ABC,那么你必须保证什么呀?哎,必须保证src下有有什么有ABC文件。明白啊,来,再来一个,不知道大家理解不理解啊。那如果你这个位置写了一个什么呀,写了一个A-B-C杠什么呀,哎,AA杠吧,A杠啊DB。那你必须保证src下有什么有A文A目录?
13:01
啊,A目录下。有什么呀,有DB文件。明白吗?哎,你要知道这个套路啊,你要知道这个套路是是个什么套路。来,假如说现在呢,你这边是come BG power node是吧,这不是点啊,是斜杠BG power node杠对吧,这边呢是test.properties。那么这个时候你就必须保证什么呀,S2C下有一个什么。目录。Com目录下有什么呀?BJ power node目录。啊,BJ power node目录下有什么呀?有test.properties文件。啊,你得保证这个。才可以。啊,就必须保证SC下有com com下有BD的目录,BD目录下有test.properties目录,你这个写错了,会出现控制异常啊,控制异常这种方式是可以获取我们文件绝对路径的,并且这种方式是通用的。
14:13
啊,通用方式。通用方式不会受到什么呀,环境的移植的影响啊,不会受到环境移植的影响。啊,通用的,就不管在Linux下还是说你在Windows下,这种方式都是可以的,但前提有一个要求,就是说你这个文件放的位置没有在src下的话就不行了,你得放在什么类的类的路径当中。你得放到类路径下,各位啊,我再三强调,我强调N多遍,我就不知道你能不能掌握,我就不知道你有没有注意听啊,Input stream,因为以后我们要用这种方式的,以后我们都要用这种方式的。啊,这种方式是通用的input stream,大家注意看,我们这边还可以流的形式,反回还记得吗?thad.thread点什么?
15:07
Current什么thread.get。Contact class什么,然后点get。Resource asre这个位置写个路径。对吧,这种方式可以直接以流的形式返回。这边呢,你可能要写上,比如说come-BG node.a test.properties。对吧?哎,这是直接以流的形式返回啊,叫直接以什么呀,流的形式返回啊,那大家想一想,如果你从来到咱们动力机到现在为止,你一直用的ID的plus,没有用idea,假如说你你没有用idea,大家想一想你你这些方法是不是都会记住。你好好思考一下,假如说没有使用idea的话,到现在为止,你说这些东西都记住了。
16:00
你将是一个非常非常牛牛牛牛的人,对吧?非常牛的人对你的开发效率会非常高啊,非常高,后来我们为什么用劲,因为大家顶不住了。因为我能感觉到大家顶不住了啊,所以呢,我们使用了idea,其实对于我讲课来说,这些东西我告诉大家,我不用idea,什么都我什么都能出来。啊,这就是我练到家的对吧,那有有同学说老师你怎么就怎么就都知道,第一我用的多,第二我我平时下工夫我背啊。我准备呀。各位啊,这个东西我真是下工夫,如果你的基本功特别好,那你将来的开发速度就会特别高。就特别高啊。包括每个方法的方法名,方法上的参数是什么类型,对吧?哎,我都给背下来啊,都给背下来了,所以这种东西的话,你看你这个呃嗯,这个这个这个有没有这个时间啊,如果说你有这个时间,那你可以考虑尝试这样去做啊,尝试这样去做,但是呢,你要注意这种方式呢,可能会拉低刚开始啊,会拉低你的这个开发效率。
17:02
开发效率可能写代码比较慢啊,但是呢,呃,这个等真正说你将来用工具的话,那你就要比之前用工具的人快很多了。啊,快很多,跟飞一样啊,跟飞一样。好了,这是关于这个路径的一个一个问题是吧?哎,关于路径的问题,那么再往下呢,我们讲解了一种什么呀,IO加上什么呀,Properties。啊,怎么快速绑定属性资源文件,我们在这里写了一行代码,叫resource,什么bundle是不是,哎,Bundle叫resource bundle.get bundle吧,是不是?哎,然后这块的话,我们就直接跟上一个路径就行了,啊,比如come BG power node BG node,然后后边加个什么呀,比如说这个叫test properties,哎,你得把test拿过来。
18:03
这样做就行了,bund.get string括号里边跟一个K,返回一个什么呀,哎,Value是这样的吧,哎,这样的来看啊,就大家要注意一个什么问题呢?要求要求第一这个文件必须在类路径下。啊类路径下啊,然后第二这个文件必须是什么呀,必须是以什么结尾呀,以点properties结尾。啊,你才能使用这种方式。对吧,哎才能使用这怎么快速绑定资源文件,这样绑定你们resource bundle get bundle这个方法,然后传这样一个属性配置文件,哎就可以了啊,通过key来获取value啊。行吧,那这个的话我就说到这儿吧,各位到这儿为止,大家想一想,这是不是我们就是反射机制,到目前为止,就是我们在这儿所讲的所有的东西啊。
19:03
哎,你看你你你你讲完这一天,或者你学完这一天,你你回头去看,你还能不能想起来今天讲的是什么啊。获取Java文件要加后缀吗?获取Java文件这种方式不行?获取Java文件,你就是你你就按照以前的方式呗,就这种方式呗,就拿绝对路径,拿到绝对路径之后呢,得到零。是不是这个是给资源属性文件准备的一种方式啊,给属性文件准备的方式大家注意啊。获取加文件当然加后缀了,但你你你不要用这种方式啊,你要加完别的文件的话,你得使用上面这种方式。获先获取绝对路径啊,获取绝对路径,然后的话,我们这个呃,再去new什么properties啊,对吧,哎load,嗯。获取不到。
20:05
获取Java文件获取不到,获取Java文件为啥获取不到啊?哦,对,Java文件没在类路径下。Java没有,有同学老师Java文件不是在SC下边吗?我在讲课的时候啊,我在讲课的时候,我给大家说的是src是类路径是吧。实际上,大家对这句话有没有疑问?Src真的是类路径吗?SC,其实严格意义来说,它并不是类的路径。但是只不过说我在讲课的时候,我为了方便,我也为了方便大家去接受,我在这里就跟大家说了,等同于src等同一类的类路径。等同一类路径,因为下面放的是come come下都是泪啊。对吧,但是大家知道程序在执行的时候跟Java文件是没有关系的,程序执行是它的class文件。
21:01
对不对,哎,你得知道它类路径啊,实际上类路径我我我今天给大家揭晓一下真相吧,类路径是谁,我给大家揭晓一下啊。来,你看好了啊,既然伟斌问了问了啊。那我就给大家说一说行吧,哎,说一说啊类路径在这儿,大家注意看啊,在哪儿啊在这个。在这个。Idea project加看见了吗?这个下边不是不是有src吗?我刚才不是说这是类路径吗?哎,这个其实并不是类路径啊,真正的类路径是out production。然后chapter。比如说25。你看,这才是类路径。明白吧?这是累的根路径啊。明白什么意思吗?从。com这作为起点。这是。这地方你看有有src吗?你打开看看这里面是不是都是点class文件。对吧?哎,为什么伟斌说Java文件不行,但是别的文件可以,你看DB property在它是不是自动就给你输出,你看给你输出了吧。
22:05
什么意思啊?Out什么意思啊,就是你上面所有东西编译之后生成的class文件,Out输出到这儿嘛,你最后生成的product,这是产品吗?是吧?这是你的最终开发的产品吗?是不是,你看这才是类的根性,各位,其实这个对应的就是src。就是什么Java SE out production,然后CHAPTER25对应的其实就是你这个src,你src下边整个这坨东西全部就输出了,他将来一输出就输出到哪,输出到这个目录下了。这这是类的录型,但是你看这个里边有没有Java文件,各位这里边没有,你看它没有JA文件,它只有点class文件,你看见没有,所以说韦斌说了Java文件不行,但是别的文件可以,这就是原因。这就是原因啊,这就是原因各位。这就是原因啊,理解了吗?伟斌。
23:16
理解,理解了吗?就是我们平时可以说src是类的根路径,其实严格意义上来说。啊,我那天获取到了,我那天获取到,那那是采用别的方式。我那天获取到不是采用这种方式啊。不是采用这种方式,嗯。采用的是别的方式啊,别混了好吧。行,那咱们就继续再往下吧,啊,继续再往下,那嗯,就回顾到这儿吧,各位就回顾到这儿啊。
我来说两句