00:00
好了,那这个呢,就是我们所说的这个获取class的这个三种方式是不是来,那么现在我就把它关掉了,各位啊,关掉了,那么有同学就说了,老师,那你现在获取这个class之后要干什么呢?对吧?拿到这个class之后我们能干什么呢?我们来举一个例子啊,来举个例子。假如说在这里呢,我们给一个。包啊,Package这个包呢,我们叫BB啊。在这个病包下呢,我们给一个类,这个类呢,我们叫叫做user。给一个普通的Java类。然后呢,接下来我们在这儿啊。去写一个新的例子啊叫啊,然后TEST02。那么在这个程序当中呢,哎,我干什么呢。
01:00
我。通过反射机制。获取什么呢?啊,嗯,通过什么呢?Class来实例化对象。我们看看能不能对吧,就是获取到class我们能干嘛。获取到这个叫class啊,能干什么?好,我们来看一下啊,大家看class。Class,什么呢,点。那这个类的名字呢,我们给他拿过来啊,就在这儿。对吧,我们copy一下啊,Copy一下copy copy references啊,Copy这样的话,这个类名就全部拿过来了,大家看前面这个包名就自动带过来了,怎么复制的,再来演示一遍啊,来点右键copy references。啊,点这个啊,点这个这样的话就拿过来包含这个包的名字啊,那么当我们返回了一个之后。
02:00
哎,这个地方有异常,我们需要处理一下control out加回车,然后加一个try cash好了,那这样呢,咱们呢,把这个呢给它拿过来啊,拿过来之后呢,我们给它放到这个位置上。来,那么大家看一下啊,我们现在返回了class之后啊,我们在这里啊,有一个方法叫c.new instance方法C啊拿到这个class之后,这个class它有一个方法叫new instance。哎,我们直接回车一下啊,回车一下。那么这个new instance这个方法呢?它的返回值是什么呢?哎,我们点过去看一下啊,这个方法它返回一个所谓的泛型是不是,但是从JDK9开始,这个方法就已过时了,是不是?哎方法已过时了,那么他还有别的方法,别的方式可以去创建对象啊,我们往后。往后再看啊,就在我们这个章节里会给大家讲啊,大家先凑合着凑合着用啊C呢,它有一个方法叫new instance,那么这个方法啊,它执行结束之后会有个返回值。
03:03
Object。来,那么这个位置呢,有异常,这个异常我们直接处理一下就行了啊,没什么可说的啊,这个异常和这个异常行了,那这样的话,我们在这里呢,来输出一下这个OBJ,我们来看这个对象能不能创建出来,通过这种方式能不能创建出来,来我们走一个。好,大家看这里是不是创建出对象了。在这个位置输出的是不是一个U对象啊,Com,我点BG power的加va b下面是不是有个user,然后at后面的内存地址对不对?哎,那么这个C呀,它是class for name返回的new instance底层到底执行了什么?哎,我们可以把这个user这个类的无参数的构造方法写出来。好。大家看啊,这个呢,是它的无参数构造方法,来我们执行一下,看这个无参构造执行不执行。嗯。好,大家看无参数构造方法执行了对吧,那这个无参数的构造方法执行了是什么原因呢?这是因为这行代码的作用。
04:07
各位啊,这是因为这行代码的作用,这个C呢,点new instance底层会调用这个类型,它的无参数构造方法。啊,这个new什么呀,Instance这个方法啊,会调用什么呢?会调用这个user。啊,这个类的无参数构造方法。完成对象的什么创建啊,完成对象的创建。那如果说现在假如我们没有提供这个构造方法,那也没问题,为什么?因为我们曾经说过,一个类当中如果没有构造方法,它默认会有一个无参构造,所以这里执行也没有任何问题。大家看。对吧,对象照常给你拗出来,照常在这儿输出呗。是不是啊,照常在这输出,那么如果此时此刻我定义了一个有参数的构造方法,大家看啊,定义了有参数的构造方法。
05:03
无参数构造方法就没了。对吧,所以这个时候呢,你定一个有参数的构造方法,假如说是这样的,那么接下来我们再去执行这个程序,它new instance的时候,它还会去调这个无仓构造,但是无参构造已经没了,大家看是不会出现异常,你看这个异常还是比较著名的啊,叫什么异常啊。执行一下,大家看看。哎,这个异常就发生了,说什么呀,说实例化异常。对不对,哎,说没有这样的方法,没有这个无参构造,说你come.bg Java b user这个类啊,没有这个没有这个类,没有这个构造方法,你看没有无参构造。看见了吧,哎,所以呢,大家注意啊,还是那句话,为了方便我们以后的使用,还是建议大家把这个无构造怎么着给它写出来。这样的话,它无参构造就不会丢了,你再去执行这个程序,你看它就又可以了,那对象就可以创建了。对吧,五三构造执行了。
06:01
所以说我在这里唠叨了半天,我想说明什么一个问题呢?各位,就是获取了我们的class之后,我们通过他的new instance这个方法可以创建对象,但是呢,创建出的这个对象是谁的对象,是user这个类的对象。因为你这个C代表什么类型,代表的是U类型吗。对吧,你想想C代表user类型啊,是不是那c new instance创建创建实例嘛,New是创新建嘛,Instance实例,New实例,新建实例,那新建一个什么实例啊,新建一个user实例。这样就可以把优秀对象创建出来了,创建出来这个地方调的是无参构造啊,这里的重点是什么,各位啊。重点是调的无参数方法。调用的是无参构造,无参构造啊,必须保证无参构造是存在的。啊是存在的,那有的说了半天,老师你这么你你这么这干啥呀,我们以前多爽啊,8NEW就行了,这样的话我不是也可以创建个优乐对象吗?你这折腾半天,我觉得你这代码不好。
07:13
是吧,哎,你看我这不直接扭出来了吗。是不是,哎,那这样我不也行吗?来执行一下,你看确实是啊,你说的非常有道理,这种方式也可以创建对象,你看。对吧,是不是也去创建对象去了,创建对象那有同学说老师那你讲这个干啥呀,注意听同学们啊,我还没有讲到这个关键上,还没讲到关键上就是代码用反射机制,和你以前的这种方式有什么区别,就是这是以前的这种创建对象的方式,对吧?哎,这是。不使用什么呀,反射机制。啊,创建对象,下面这个代码呢,是以什么呀?哎,下面这段代码是以什么呀,反射机制的方式创建对象。啊,那么这个和这个有什么区别,首先第一个这个代码复杂多了。
08:02
这个代码简单多了,对吧,但是这个代码呀,它这样写不灵活,这样写更灵活。有的老师,我怎么就没感觉出来他灵活呢?它灵活吗?哎,我给大家演示一下它的灵活性,好吧,我给大家演示一下反射机制的方式去创建对象,它的灵活性在什么地方。对吧,啊,你这种写代码它的缺点是在什么地方。啊,我们呢,把这块啊给大家来说明白好吧,那获取到class能干什么呀。通过class的new什么instance方法来实例化对象,但是需要注意的是什么new instance方法内部实际上调用了无参数构造方法,必须保证什么呀?无参构造存在才可以。啊。
我来说两句