00:00
大家好,我是海波老师,接下来我们来讲一讲Java中的常见类和对象,那和之前一样啊,咱们首先还是创建一个新的一个包啊,咱们叫chapter,咱们叫零五了,然后呢,我们点击右键,我们写上一个new,选择一个我们的类,咱们叫JAVA01,我们就写上叫object啊,然后呢,回车,回车以后呢,我这里写上一个men啊,然后呢,写上它嘟嘟,我们叫常见类和我们的对象啊,那么首先啊,我们第一个先讲的呢,就是大家耳熟能详的那个叫object,不过呢,这个object呢,它所属的那个包叫Java点诶我们这边写上就可以了。这个Java点浪啊,是默认导入的包,所以说你不需要import就能用了啊,我们所谓的面向对象中的那个对象说的就是它,诶,所以它就叫做对象了,所以啊,这个object其实就是对象的意思,在Java的语言体系中啊,所有的类默认都会将这个类作为我们的副类,诶,所以大家可以看到我们的class,我们的U,诶,我写个U,写完了以后,这个类是没有明确的父类的,当你没有明确的父类的时候,它会自动的继承我们的object,所以啊,它的代码跟你这么写是没有本质区别的,你这么写是完全相同的,你写也行,你不写也行。
01:17
诶,老师,那如果我当前有一个继承的父类怎么办?比方说我的class。我们叫person,你写完以后干嘛呢?我在这个user里面,我继承了我们的person,这个时候呢,它就不会继承我的object了,但是没关系,为什么?因为我们的person它继承了object呀,所以person继承了他,而我继承了person,那不就等同于我间接的继承了我们的object嘛,对不对?哎,所以啊,这种感觉啊,有点突兀啊,但是有的时候确实是这样的,所以呢,我们把这种方式呢,称之为叫做超累。它不是我的直接负类,它是我的一个超类,既然我们的object类是所有类的负类,所以啊,由于语法中的多肽的话,那么我们所有对象都可以作为我们的object类型来使用,所以大家可以看到我们这么写叫object,我们写上它等于什么呢?叫new u,为什么?因为我们的object是所有类的,什么我们的父类,那么子类对象在父类这使用是完全没有任何问题的,同样道理,我改个person也是没有问题的,诶,就是这样。
02:24
所以啊,这种方式就会感觉啊更通用一些,对不对,但是它也有个问题,就是我们多态的语境当中啊,它会限定我对象的使用方法,也就意味着我在当前的场合下,我们只能使用object里面的方法了,别的你用不了了,对吧?这是我们多态的一个限定功能啊,诶,老师啊,那你要照这么说的话,这个object都有哪些方法在当前场景下能用呢?对不对?所以接下来呢,我们就给大家讲一些它比较重要的一些方法,咱们来给大家说一说啊,首先我们来看看我们的第一个object,我们叫做点,它有一个叫to string方法,这个方法是每一个对象都有的,什么意思啊,很简单来说一下,将我们的对象给它转换成我们的字符串,就这么回事,所以呢,我们点一下来,点一下VR回车,回车以后你把一个对象就变成了支符串,A老师。
03:18
把一个对象变成字符串,那我哪知道它变成什么样的字符串呢?这个没有什么好的办法,为什么?因为每个对象变成字符串的方式它不一样,现在呢,我们就打印一下,看一看我当前的这个字串是什么东西,我运行运行以后大家会发现我当前打印的就是这个内容,这个内容啊我有点看不懂,但是你会发现它。这个就是我当前port类的一个全类名,包含了它的包名,后面这个圈A呀,它叫at,什么叫at呀,同学们,At就是我们在什么位置的意思,后面的这个呢,就是它的一个哈希code的值,说白了我们简单的理解为叫内存地值,就说明在我们的这个内存地址当中有这么一个类型的对象存在,当然了,这个内存地址啊,对于我们来讲其实不用管它,但是你懂得这个意思就行了,诶老师,那这个地址从哪来的呢?这就需要涉及到另外的一个方法了,咱们一会儿再说,我现在回过头来接着说这个突使君方法,这个突使君方法它默认。
04:19
说一下托屎俊方法,它默认打印的就是我们对象的内存地址,哎,老师内存地址我不懂啊,对吧,咱们没有提过内存什么事,你怎么说有个地址呢啊,所以啊,为了能够更直观啊,更直观理解我们叫做对象的内容,所以呢,可以重写这个方法,那么把这个port的这个方法呀,咱们重写一下,咱们叫ctrl o快捷键,然后呢,把这个to使string我们点击OK。点击OK以后,你会发现我重写的这个图doing,那我怎么重写啊,它要求你返回个字符串,OK,拿过来,拿过来我们就写上它,我们就叫person就行了,然后呢,我加上一个中括号,我为什么加个中括号呢?如果有属性的话,我可以把属性添加进去,比方说我添加一个咱们叫public string,我们叫做name,你写完了以后,你就可以把这个name呢,我们拼接到里面,这个时候就涉及到一个字符串的拼接了,咱们叫双引号,用一个加号,我们的加号就能把两个字符串拼在一块,你是个字符串,它们俩也是个字符串,你相加就可以了。那好了,现在我重新运行一下,我运行运行以后大家看结果,你会发现我在当前呢就是个空。
05:35
为什么个空啊,因为这个name没有值嘛,你没有值当然就是个空了,哎,没关系,我给它附上一个值,我等于张三好了,写完了以后我运行一下看结果,那这样的话,我们的值不就出来了吗?你看看就是这个意思,所以啊,这个图使string方法呢,同学们,我们可以自行来决定该如何生成啊,我们有很多的格式嘛,比方说我们的一些什么呃,TSV格式啦,什么J格式啦,会有很多不同格式的数据,我们都可以以这种方式来生成就行了。
06:06
好了,这是我们刚才所说的第一个方法,咱们叫图实句方法,我们刚才还提到了一个内存地址,这个内存地址呀,其实我们有一个方法可以专门的获取到它,我们来写上叫object的点,我们叫哈希code,这个方法呀,你简单的就可以理解为我获取到了这个对象的内存地址,其实啊,它并不是真正的内存地址,只是我们这么去理解,所以呢,我们写上它,哎图图要获取对象的内存地址啊,有的时候会有用啊,那好了,把这个拿过来,诶,我们给它来拿过来以后,你会发现它会得到一个I,这个I呢,就是一个地址编号,那么我们打印一下,打印以后把这个I我们放过来就行了,哦,对了,我们把这个呢,我们不去重写它吧,把这个注掉。注掉以后还用它默认的,现在呢,我们去运行一下,把这个呢,我们给它注掉,做掉以后,我们运行一下看结果啊,运行运行以后看结果之后,大家有没有发现我们这个对象new port那个对象,它的那个字符串打印的内存地址是这个,怎么我们直接取它的这个内存地址怎么是这个呢?这里给大家解释一下,我们这两个值呀,你看着不一样,但是其实是一样的值,为什么?因为我们这个值是int类型,它是十进制的,但这个值呢,它是16进制的,所以两个值看着不一样,但是本质上其实是一样的啊,这个没有任何的问题。好了,这个给大家去说一下,那么除了这两个方法以外,其实还有一个方法叫对象点,有一个叫equals方法。
07:36
这个方法是什么意思呢?Equals就是相等的意思,所以呢,我们突出一下干嘛呢?我们叫做判断我们的两个啊对象是否相等。所以呢,你的这个equals里面应该再传一个,我写上一个叫new port,哎,就是这样的,这么写完了以后,同学们记住了,它会返回我们的布尔类型,如果相等,返回true,如果不等,返回false,所以呢,说一下,如果相等,那么我们要返回true,那么否则咱们返回false。
08:09
所以啊,就这么回事了,那老师,那我这个地方到底是相等的还是不相等呢?来我们写上它点我们点我们写上它好写完了以后我运行一下,运行以后看结果你会发现它是false,说明啊,你当前的这个对象跟我new的这个PORT2个是不相等的,哎,老师啊,那它的比较规则是什么呢?这里给大家去说一下,我们的这个E是这个方法,这个方法它比较对象时,比较对象时默认比较的就是内存地址。如果你的内存地址相同的情况下,他认为两个对象是相等的,所以呢,我们运行一下看结果,你就会发现我们的这个是false,说明两个内存地址不相等,来咱们验证一下,我把这个呢,我们拿过来拷贝,拷贝以后干什么呢?我们这里写上一个它,然后写个点,我们叫VR回车。
09:04
回车以后我就写上它叫other port,另外一个port对吧,然后呢,把这个port呢,我放到这里,诶我打印一下它的内存地址。然后呢,我们叫做other person,然后呢,来写上它,我们叫做点哈希code行了,然后呢,运行一下看结果,运行以后你会发现两个内存地址它确实不相等,对不对?其实啊,咱们的echcos默认的就是比较它的内存地址,那如果呢,你不想比较内存地址的话,我们就可以重写它的ES方法,所以呢,我们来,我们ctrl o,我们把这个equals方法拿过来,拿过来以后我直接return true就行了,就这么简单,你什么都不用管它,你来一个我就认为它相等不就完事了吗?所以我们运行一下看结果,运行运行之后大家看一看,你看。结果为处吧,但是两个内存地址其实不相等,对不对?不相等的情况下,现在我们为处也没有任何的问题吧,同学们,哎,所以啊,重写EQUAL4就可以让两个对象相等了,老师呀,这有什么用呢?其实啊,在咱们的开发当中啊,有的时候给你的两个对象可能就是一个对象,但是你并不知道,所以有的时候需要判断我们的对象是不是相等,如果相等的话,咱们就当成一个对象来用,如果不相等的话,就应该是两个不同的对象,所以这个时候是需要进行判断的啊好了,这是我们比较常见的一些方法啦,我们的哈希code呀,咱们的to string啊,还有我们这里的这个叫什么呢?我们的ES方法,其实除了这个以外,后面还会有一个方法叫做object点叫get class,这个方法呢,其实就是获取了我们类型的信息啊,所以我们说一下,咱们叫做get class,它是获取获取对象的类型信息啊,类型信息啊,就是这样的,那比方说我们拷贝,拷贝以后点一下叫点一下点。
10:53
叫get,我们的simple name,这个就是你当前这个对象它的类型的名称,所以我们来打印,打印以后我们运行一下,看结果,运行之后你就会发现当前就是我的person,你看看我当前是什么类,我不就知道了吗?而且不光是什么类,还有呢,我们在打印,打印以后叫get,我们叫做pack name啊,诶咱们叫做包的名称,我们也运行,运行以后看结果,你会发现这个呢,我们叫CHAPTER05,你看这不都出来了吗?
11:24
我们在当前的环境下,我们通过这个object就给大家演示的一些方法,这些方法在咱们的每一个对象中都能够直接使用,非常的方便啊。好了,我们就先说到这里。
我来说两句