00:00
大家好,我是海波老师,接下来我们来讲一讲Java中是如何构建对象的,我们这里复制一下,然后呢,把这个零三啊,我们改成11,我们写上下划线叫instance OK,咱们叫对象点击OK,点击完成以后,把里面的东西啊,咱们全给它去掉,咱不要了,好,然后呢,我们在后面呢,给它补上,我们就写上它,咱们叫做构建对象。其实啊,我们构建对象啊,咱们之前已经讲过了,对吧?来,我们写上一个叫class,我们这里呢叫U11,然后呢,放过来,放过来以后呢,我们在这里呢,把U11啊,我们放到这里,然后呢,我们写上一个叫U等于new,我们说过了我们的new啊,就等同于构建对象了,对不对?所以呢,我写上一个叫U11,我们放过来就那么简单,但是呀,这里面有一个地方有点奇怪,什么地方呢?我们new没问题,它表示创建新的的意思,你看new不就新的嘛,对吧,然后呢,我们的U11呢,表示的是你创建对象的那个类型啊,是我们的U11,这个也没有任何的问题,但是问题就在于我们的小括号是什么意思,大家想一想。
01:02
我们这里怎么会多一个小括号呢?这里给大家解释一下,这个小括号啊,其实就是方法的意思,只不过呢,大家看看我们在这个地方呢,我们写上一个叫VO,然后写上一个test,然后呢,写个括号,再来我们打印一下,我们写上叫test对不对,我写完了以后,你想调用它怎么调用,你是不是要写上一个叫U的点test的方法呀,好了,你这么写完了以后,这个小括号恰恰指的就是它,我们称之为叫参数列表,这个我们称之为叫方法名称对不对?诶所以告诉大家,我们的这个括号呢,它其实也是参数列表。诶,这不对呀,老师,如果它也是一个参数列表的话,那么这些都有方法呀,方法在哪呢?这里就得给大家解释一下,我们在类名后面写个小括号的这种方式,它是一种特殊方法的调用,也就意味着我调用了这个方法之后,这个对象就会构建出来,所以我们就把这个方法呢,称之为叫构造方法,所以我们说一下,我们称之为叫构造方法,这个方法不是干别的,它专门用于。
02:05
构建对象。也就意味着这个方法是专门用于构建对象的,诶老师那不对呀,咱这儿也没看见呀,你说有方法,咱这怎么没有呢?这里就得给大家解释一下了,如果我们当前的类中没有构造方法的话,Java虚拟机为了创建方便,会给你自动添加一个,所以这里我们补充一下,如果一个类中没有任何的构造方法,那么Java虚拟机它会自动添加一个公共的,然后无参的构造方法。方便对象的调用。这个希望大家能够明白,也就意味着你没有,但是Java虚机会给你自动添加,哎,老师呀,那它添加什么样的呢?它添加的是一个公共的无参的构造方法,这个公共的我们后面再讲,我们先说这个无参,就是没有参数的意思,好了,那我们就把这个基本的语法咱们来说一下来咱们叫基本语法,基本语法是什么样子呢?非常简单,就是写上一个类名。
03:07
然后写个括号,然后呢,写个大括号就行了,就那么简单,哎,老师不对啊,怎么没有这个Y呢?记住了,重点就在这儿了,我们的构造方法是没有VO的,也就意味着它的主要作用就是构建对象,不涉及到返不返回的问题。所以它。它就不存在这个word关键字,这是我们需要注意的地方,来来我们这里给它写上啊,我先把这个地方呢写上一个突突。然后呢,我在后面写上一构造方法,它也是方法,但是没有Y的关键字。第二个。我们的这个方法名和类名完全相同,哎,这个也是咱们需要注意的。然后呢,我们第三个。如果类中没有构造方法,那么Java虚拟机它会提供咱们叫默认的构造方法,刚才说过了,是一个公共的无参的构造方法,但是呢,如果你有了呢,诶写上一个四,如果我们类中。
04:08
有构造方法,那么我们加入信息就不会提供了,它不会提供。哎,所以这是我们需要注意的,还有呢,我们再接着写,我们写上五。咱们构造方法,它也是方法,所以也可以传递参数啊,可以传递参数,但是一般传递参数的目的用于对象属性的赋值。所以啊,这几个点呢,需要给大家稍微的介绍一下好了,那么我们现在呢,给大家去演示演示啊,首先我们从第一个演示,我们第一个呢,说了构造方法也是方法,但是没有WHY的关键字,也就意味着我现在准备要声明一个方法了,那好了,那我现在呢,给他写上一个方法,写个括号,然后呢,我们这么写,记住同学们,我这里可没有YI,我们的第一个就已经完成了,那么第二个他说了方法名和类名要完全相同,那么也就意味着你的这个地方叫USER11,那我这也得叫U的11诶。
05:06
确实没问题呀,那好,那如果他没问题的话,那现在我是不是可以执行了呢?所以我运行一下,那么运行以后咱们看结果,看结果以后诶是对的,可是你这怎么证明了我们这个括号,它调用的就是我的构造方法呢,所以呢,我在这个里面我添加一个打印语句。我就写上它,我们就叫U点点点写完了之后,同学们我们运行一下,看结果运行。运行之后你会发现我们的U点点点确实打印了,但是我想知道啊,你的这个11是在什么时候完成的,所以啊同学们,我在这上拷贝,我拷贝以后呢,我在我new的前面,我加一句话叫before。然后呢,我在这个地方呢,我再加上一个我们放过来叫做after。好了,同学们,在我们new之前我打印了一下,在我的new之后我打了一下,我就想知道这个我们的U的11的这个构造方法,它是在什么时候执行的,所以啊,我们运行一下看结果,运行之后看结果你会发现,哎,Before u和after,然后是它的test,没问题吧?同学们说明这个是对的,我们就是在new的时候调用了我们的构造方法,好了,那么我们接下来呢,给这个构造方法呢,我传个参数,咱们试一试啊,我写上个string,给他一个name,我写完了以后,同学们有没有发现我这里有个红色的波浪线啊,同学们什么意思,我们说了,你这个地方要传参数,我的这样有参数,那么你在调用的时候就得传参数吧,对不对,可是你没传吗?你没传不就报错了吗?哎,老师呀,不对呀,你不说我们类当中我们加入虚机会给一个无参的构造方法吗?
06:43
怎么这里我们还报错呢?同学们,你看这句话他说了,如果类中有构造方法,我问你同学们这个算不算?算吧,你甭管是无参的还是有参的,这个构造方法他都算构造方法,他说了,那么Java虚拟机就不会提供默认的构造方法,什么叫默认的构造方法?他说了,公共的无餐的,诶,我们无餐的他就不再给你提供了。同学们,为什么呀,很简单,因为我们的Java虚拟机他认为呢,你现在已经可以自食其力了,无需他的帮助,所以说他就不需要给你提供任何的构造方法了,你看看社会就是这么现实,对不对,Java他也逃不开呀,那好了,那你这里报错了怎么办?你要缺参数,我就给你传参数吗?所以我就写上一个张三就行了,好了,我先运行一下,运行以后看结果,你会发现我当前的结果应该是没有问题的,诶老师啊,你不说了吗?我们这里的构造方法如果传参数的话,一般是为了给对象的属性赋值,所以我这里添加一个属性。
07:44
咱们叫做使军,叫user nameme好了,写完了以后,我就想把我们当前的nameme的值给它,所以呢,我的user name,它等于我的name,诶你这么写就可以了,那你写完了以后,同学们那我就可以访问了呀,所以我打印一下,咱们来写上叫user.user name,这个应该没有任何的问题,我把咱们这啊,咱们都给它注掉啊,咱们演示完就不要了。
08:06
给他注掉,注掉以后我就想看看,我传了个张三进去,他把张三呢,复制给我们的user name的这个属性,那我现在呢,我就可以直接访问这个属性了,所以我运行运行之后应该是正确的啊,咱们的张三你看不就出来了吗?所以啊,这就是我们的构造方法。诶说到这个构造方法了,咱们之前给大家讲过一个叫代码块,大家还记得吗?我们当时讲那个静态代码块的时候,我们讲过个叫代码块,而那个代码块啊,它是在咱们构造方法执行之前去执行的,什么意思啊,咱们来说一下来。我们的代码块。它是在构造对象之前执行的,所以啊,咱们这里的验证一下了,怎么验证呢?我在这个U的11里面啊,我添加一个代码框,这个代码块呢,我们就直接写上它来,我们叫做这个叫代码块一,我为什么要写个一呢?是因为我们再拷贝一下,我们后面再给他写一个。
09:03
我写上一个代码块二,我在后面呢,我再给他写一个叫代码块三,好了,我写完了之后,把这个构造方法呢给它打开。我现在呢,已经把代码呢给它稍微改了一下,加了一些我们的代码块,现在呢,我们来运行一下看结果你就会发现呢,我们这里代码块一代码块二和代码块三,我们执行完了以后,才轮到了我们的构建的过程,构建完成以后再执行test,再打印它的属性,你看这就是我们前面讲的一个代码块和构造方法的一个执行顺序的问题,咱们之前讲的那个静态代码块啊,就是在我类的信息加载完成以后自动执行的,对吧?这个咱们之前都是说过的啊好了,同学们,我们构造方法就先讲到这里。
我来说两句