00:00
好了,咱们继续再往下啊,这个测试大家了解一下,知道是什么意思啊,什么意思好了,那么接下来呢,还是回到我们原先这块啊,任何一个类呢,没有显示继承任何类,默认继承的是object这个类,那么object类当中有哪些方法呢?老祖宗为我们提供的哪些方法是不是?哎,我们这个呢,可以看一下源代码啊源代码,那源代码扒一下吧,来在这啊,在这个JDK下力目录下src对吧,哎,这块。Java好学,就是因为你看有很大的一个库对不对,很大的库就是这些东西都是已经怎么着,哎,写好的我们可以直接用啊,这就是Java好的地方对吧?如果是C语言呢,如果是C加加呢,你可能这里边儿随便拿出来一个类,对吧,像这种东西都得自己手写出来。啊,手写出来,所以说Java开发还是方便的啊,Java这里有一个什么呀。有一个。Language啊,这个单词language是language language啊,英语单词当中的这个language是什么?是语言吧。
01:09
哎,所以大家说一下啊,呃,这个language是什么呢?其实就是我们Java最核心的一个目录了。啊,这个地方Java base这个单词你应该认识吧,Base是最基本的,对不对,基本的基础的下面有个什么叫Java,然后language啊,Java啊,语言包,这个包下的东西非常非常之重要,我们要学这个包下的很多东西,比如说最典型的字符串,你看是不是就在这个包下对不对,在这个目录下是不是叫找一找老祖宗在不在这个里边,老祖宗是以O开始的object,你看。是不是object.java呀啊,也就是说实际上我们写任何一个类,它都会把object这个类当中这个这个这个代码继承过来,就是说其实我们写一个类啊。他与生俱来的就有这些代码,我们可以考虑把这个代码拿过来啊,我们复制一下。
02:02
哎呀,这个代码太多了。拿来啊。这个啊。来。哎呀。多了去了,这个。大部都注释啊。拿过来。我们随便写一个程序啊。TEST05。嗯。默认继承object object类中有哪些方法呢?是不是,哎注释拿过来啊,诶拿过来,然后把这个怎么着呢,该删的删掉,你看这个不要了。不要了啊,这个代码这个注释咱都不要了啊,都不要了,来这块删了来同样这块呢,我们删掉啊,这一块呢,咱们删了它。然后这块呢,我也给他删了啊,有些代码你看不懂,看不懂没关系啊来走。
03:04
来。这块。来继续。没事啊,咱很快就可以删完了啊,稍等片刻啊。这袋都拿过来啊。好,大家看,这就是object这个类的源代码。这是一块,这是一块啊来。嗯。好,往下看一看啊,你看object类当中啊,它一共就这些代码,也就是说你现在你只要是写一个class啊,说public class叫test test05就这个类。Public static void man。
04:05
这个类呢,去继承谁啊,Object就是你不写他也继承啊,就这个类它默认是继承谁的呀?哎,继承我们这个object。啊,默认记中object,那这个object有哪些方法呢?大家看这里边代码,首先呢,呃,有学老师,这是个什么东西。什么private?什么void,然后registers,然后来个小括号,后面有个分号完之后这个是个什么呀?Static是吧?Static这个能看懂吧。能看懂吧,这是啥呀,这是个静态代码块吧。静态代码块在什么时候执行啊,在类加载时执行对不对?哎,并且这个是不是只执行一次啊,在类加载的时候调调用了哪个方法呀。你从这儿可以看出来,这是调用哪个呀,调用这个叫natives方法呗,调的是这个方法。对吧,调用这个方法啊,那有同学说老师我有点懵,我有点懵,调用这个方法,这个方法干啥的,不用管啊,不用管了,这个方法是干啥的,但是这块呢,我要说的是,你看这个方法呀,连个大括号都没有,你发现没,它后面没个大括号,它后边是个啥呢?是个分号,那么我想说的是这个方法如果后边是个分号,并且在方法的修饰符列表当中有native的话,表示这个方法调底层的C加加程序啊来注意啊,这个是语法,各位啊,注意注意啊,当原码当中,当原码当中。
05:35
一个方法以什么呀?以分号结尾,以分号结尾啊,并且修饰符列表中有什么呀?哎,有这个叫native关键字啊,关键字表示表示底层调用什么C加加写的DLL程序啊,DLL是什么?是动态链接库文件。
06:05
啊,这个这个你听不懂啊,听不懂没关系,没关系啊,我大概这么一说,你大概有个印象就完事了啊,有个印象就完事了,好各位再说一下啊,你看看这这这门类加载吧,是执行并且执行一次是不是调这个方法,这个方法是不是在这儿啊哎,那这个方法是不是后边有个分号,前面是有native,比如底层这个东西调的是什么C加加啊,这调的C加加的东西。啊,这你说老师C加里面到底是啥东西你就不管了,什么DL程序是啥你也不用管啊,总之呢,它底层调的C加加就完事了,那么大家看这是不是无参数构造方法,无参数构造方法对吧。有同学老师这是个什么东西?圈A来个什么hotport,这个你们管了,这是注解,各位啊,这是一个注解,这是一个注解public object,你看括弧来一个大括号是不是好,大家看这个再往下是不是有一个方法叫get class啊。是不是get class是不是也是分号结尾是不是native啊是不是,哎这个底层啊也是调用什么呀,C加加。
07:06
啊来,你下边这个呢,你看它还是调什么呀,C加加的东西,你看哈code是不是native,哎分号吧,是不是调C加加呀,哎,你看这个就不一样了,这个是不是有有自己的实现呀。有自己的实现吧,你看这个大括号里边对不对,Return吧,This,什么等于等于OBG吧,哎,它到底这个方法干啥呢?我现在不讲啊。总之它有这个东西对不对,是不是它有这个东西啊,啊有这么equals方法啊,有个equal方法来你看克隆。分号是不是native吧?哎,这是克隆啊,就是你听说过,听说过这个克隆羊多利吗。克隆羊多利克隆就是说你你在加入中,如果想要个对象,你可以克隆你有一个对象A了,已有对象A想创建一个和A一模一样的对象。你可以调用这个克隆方法。
08:04
克隆方法,克隆克隆。底层调C加加啊,底层也是调用C加加的动态链接库程序,这个你看这个native吧,是不是,然后这是不是分号啊,对吧?哎,你有的老师这是啥玩意儿,这是什么东西,看不懂,看不懂没关系啊,没关系,来你看下边有个to string,你看是不是,哎,To string。吐往哪吐啊?哎,吐是转换的意思,转换成字符串。啊,转换成字符串有这么一个方法,一会儿我们可以测一下这个方法对吧?哎,一会儿我们可以测试一下这个to string方法,啊,测试一下to string。方法啊,就这个东西是不是好,那么下边的你看notify也是一个什么native,然后notify all也是native啊,Wait调用的是wait是吧,这个wait底层也是native是不是这还是个wait方法,这个方法我们就不看了啊,这里边其实大家到目前为止啊都看不懂,看不懂,但是有俩方法,你最起码能能能能能能调吧,其中有一个方法,什么方法叫ES方法,你是不是可以调,你看现在跑哪了,在这你看。
09:11
长得这个您应该能看懂吧。是不是,哎,Equals方法你应该能看懂啊,能看懂对,能看懂,然后呢,其中的这个to论方法其实你也查不到,你你能看懂,你你看呗,是不是,哎,Public是什么意思啊,是公开的是不是啊不不不不,Lin是啥呀?是方法的什么返回值类型对不对,哎,Equals。Equals你equals是是啥意思,这个你你可以你可以你可以查一下,你可以这个百度一下嘛,是不是它是它是什么意思啊啊来我们看一下这个equals是个啥意思,这是个方法名呗,对吧?来equals是什么意思看看相等。相等是不是相等,也就是说实际上这个equals是一个什么呀?方法名啊,表示相等的意思,那这个时候再往下呢,括号里面有个object o BJ,这是啥呀?
10:12
这是什么东西啊?就这是行参呗,是不是,哎,行参再往下那个大块里边就方法体呗。就这是方法体啊,这这里边这是方法体啊,方法体嘛,是不是,所以这个代码呢,怎么说呢,你不是看不懂啊,其实也能看个差不多。对吧,只不过你不知道,只不过目前不知道这个方法是干啥用的啊,就只不过目前还不知道这个方法存在的意义啊,你还不知道,但是这个兔子你看,我们可以随便调一下这个兔子你看。这块你可以分析一下public表示什么,公开的吧,公共的是不是public表示么?公共的对吧?然后接下来string是什么呀,是返回值类型派它返回一个什么呀,就是突顿方法,方法执行结束之后返回一个字符串。
11:01
对不对,哎,那么首先to string,这是一个什么呀?方法名啊,对吧?哎,这是方法名嘛,对不对,然后再往下括弧呢,啊,表示形式行参个数为零嘛。行参个数为零对吧,你看参数不用吗?你直接调就行,来我们调一下来extend extend test05,然后接下来我们直接用它to string行不行各位。来走一波,各位告诉我这个行不行?行不行?行吗?分析,这个代码可以执行吗?行啊,这怎么怎么,你再好好好好看看,好好看看行不行。能用类名去掉吗?亲?啊。这怎么就行了呢,你就就很容易上当是不是。啊。
12:00
这证明还是没学明白呀,你这个方法带丹吗?你这个方法带不带static,没有static不是静态,它是实力方法是吗?你实力方法得你有对象你才能掉啊。这个不说话的好,我就是要让你上个道,哎,结果你还真是上道了,哎呀,就是说这个类呢,它是继承的,默认是继承,哦不对,这是肯定的。对吧,这个里边也有什么呀,To方法就是说有,但是这个方法就是TEST05默认继承谁啊object啊,这个类当中是有什么。突死论方法的啊,不过突斯顿方法是一个基啊,是一个实例方法。啊,需要创建对象啊才能调用,就实际上这里是有这个代码的,我们把这个代码拷过来啊,实际上这里是有的。
13:04
明白吗?这个代码是存在的。我们可以注释掉,你注释掉这个方法也有。所以这个时候呢,你呢,编一下Java c编译一下ten test05.java走。第98行报错了吧?无法从静态上下文中引用非静态方法toth string,看见了吧?哎,第98行。这吗?所以这个不行啊,你得先干什么呀,先拗对象怎么对象extend test05,然后接下来直接ET啊,你一个什么呀,它你完这个对象之后,你用ET去调。ET去调什么toth string,你调一下to准,那么这个方法不需要参数,诶你就不用传参数了,那方法真结束之后返回一个字符串string,那你用string来接收一下对不对,哎,Return value。
14:00
那么接下来system.out.print打印我们输入什么呀?输入这个return value,嗯,你看这个结果会是什么呢?啊,你看那个源代码里面,源代码里面有艾符吗。对吧,这个双引号里边放的是一个字符串,大家还记不记得以前。以前我们曾经说过,加号这个东西啊,它有两个作用,一个作用是什么?一个作用是做加法运算是吧,当左边和右边都是我们数字的话,这个地方是做什么求和嘛,是不是?如果是加号两边有一边是字符串的话,我们这个加号一定是做什么呀?做字符串连接,如果这个字符串和这个字符串连接在一起,然后还是个字符串,这个字符串用这个加号和后面这个字符串连接在一起,那么整体执行完之后,它是不是一个字符串啊,所以return返回的整体的这个东西是不是一个字符串,我不知道这个字符串长什么样,但是我一定知道这个字符串里边有这么一个艾特符号是不是?
15:03
是不是我一定是知道这个里面有这么一个符号的,我不知道你前面是啥,后边是啥,但我知道你这个是个啥,是不是,所以这里呢,肯定是某某某艾特某某某是不是,哎,有这么一个东西在里边。啊ET调to string啊,然后呢,返回一个什么呀,Return value,直接把这个return value输出,我们来编译一下,去运行一下啊Java c编译,然后Java去运行EXTEND05轴。好,大家看,最后呢,跟我们预期的结果差不多。是这么一个东西。里边确实有一个符号什么呀,爱的符号,艾符号前面的这个东西是个什么呢?哎,我们发现这个东西其实是一个类名,那爱的符号后边这是个什么呢?哎,各位注意听了啊,这个可以等同看作我们这个对象在堆内存当中的内存地址,只能说等同啊,各位注意其中的这个。
16:04
可以等同俩字啊,可以等同。可以等同看作。对象在堆内存当中的内存地址。它其实不是内存地址啊,咱只不过可以等同啊,实际上是内存地址经过。哈西算法。哎,这个哈希算法还不如不提呢啊来实际上是内存地址经过哈希算法得出的结果,得出的16进制结果啊,16进制结果,就你看这个16进制的数据。是个16进制的数据,各位啊,这可以等同看作对象在堆内存当中的内存地址这个含义算法你就不用管了啊,这是很诡异的一个算法啊,这个算法很牛很牛啊,呃,我们先对象通过引用去调这个方法,然后返回一个值。
17:09
是不是,然后呢,输出这个结果就这样子一个类名。对不对,一个艾特符号后边有个什么呀,一个对象的内存地址,那包括现在我在这加一个class product,然后商品,那你说我商品product这个有没有这样的一个情况,Product我们能不能先new出来啊,Product pro new一个什么product new完之后呢?接下来这是不是创建对象啊,创建对象那我现在能不能project to string这个方法调调这个方法行不行,那没问题,因为这个类默认继承谁object呀,是不是默认继承object,所以呢,这个类当中也是有这个方法的。也是有它的一模一样,也是有这个的。有这个你看不见,你看不见,你看不见是不是他单继承过来了,这个to string方法就属于他的方法,这个to string方法其实就属于他的方法啊,Product pro new,一个product,然后pro to string,那么接下来返回一个字符串,Return value2好,那system.out点打印我们输入什么呀?Return value2好,这边我们加一个哎分号,那最后这个结果是什么呀?
18:19
最后这个结果你能猜个差不多,肯定也有一个at符号,肯定的前面这个东西得到是个类名,这个类的类名叫product,所以应该是product at后边有一个什么呀,16进制嘛,对不对,所以接下来你再编译一下,你再去运行,你看最后结果我们猜的对不对,你看product at符号后边有个什么呀,哎,有这么一个数据拿过来这。这就类名吗?是不是好?那么这两行代码,以上两行代码能不能合并成一行?以上两行代码能否合并为一行?那当然是可以是吧,直接把这两行代码拿过来,然后我们把这个改成它呗。
19:04
改成他不就行了吗?是不是,哎,改成它就行了,你看。嗯,system.out.print打印输出什么呀,Pro,那么接下来我们再去编译好,大家看再去运行,最后的结果是不是一样的呀,因为你这个对象只扭了几次啊,扭了一次,所以这个对象是不是这个结果呀。对吧,哎,大家看好了,New一个product,哎掉to返回它,然后呢,继续往下点to你看。嗯。听见了吗?哎,可以啊,两行合并成一行,那么我如果直接输出引用呢?大家注意听。如果我现在直接输出这个引用,后面的这个to string方法我不掉了,我直接new一个product pro,我直接输入会是什么样的呢?我们再去编译,再去运行,各位,诶神奇了,神奇了,这个结果还是这个结果,通过这个大家得出一个结论。
20:14
得出个什么结论,当点print这个方法直接出一个的话,会认这个什么string方。他会直接调用这个引用的to string方法,你想这个结果和这个结果,还有这个结果是不是一样啊。是不是啊啊,就是你不去在这显示的去调用你这个to方法,实际上它底层print LN这个方法,它会去调这个pro toth方法,它会掉,它会掉啊如果直接输出引用的引用呢。哎,注意我这个呢,结论应该记在哪了,应该记在这各位啊。1.3下边啊,1.3这块我们把它说完啊,把这个说完,我们研究了一下object类当中有很多方法啊,大部分看不懂是不是啊,大部分看懂,其中有一个叫做叫做的。
21:16
我们进行了测试啊,我们进行了测试。发现发现什么呢?发现点system.out.print直接输出一个引用啊,当直接输出一个引用的时候。Print LN这个方法会自动会先干什么呀?会先自动调用什么,调用引用的to string。啊,然后输出to string方法的执行结果。
22:02
这个不是我让大家死记硬背的,刚才我们已经经过测试了,你set.out.print LN打印输出这个。你如果你看输出100,你看看啊,输出100,那就好好的输出100就完事了,对不对,这是个数字,那如果你输出一个波尔类型to啊或者false,那就直接出输出true和false就行了,那如果说你直接set.out点打印输出一个什么呀,输出一个引用的话,这是个引用嘛,对吧?哎,它在这里会掉to soon啊会自动谁会自动啊print LN方法,会自动调用什么pro的什么toth string方法。会自动掉啊,我们也经过测试了呀,因为你这个调to输出这结果,你直接输入pro.to也是这个结果,你把后边点to这个方法去掉,直接输出输出pro,发现这个结果还是这个结果,这说明这个pro的LN,它会自动调用这个这个pro的一个什么呀,To方法我们再测试一下,你看再运行,你看结果还是一样的呀。
23:03
对吧,还是一样的,看见没有,哎,这个东西可以等同看作一个对象的内存地址啊,等同看作一个对象的内存地址。行了,那其实除了这个方法之外,大家发现了我们上面的这堆代码当中啊,还有一个东西叫什么呀,叫做。叫做这个equals。这个ES方法呢,到时候我们再说,现在先不用管啊,先了解到哦,我们这里有个to string是不是方法名叫two string t是小写啊,S是大写啊,To string转换成字符串,转换成字符串,那么调这个方法其实目的就是把对象转换成字符串是不是?你看你看,好好理解一下to string是干啥的呀?To string是转换成字符串是把什么?比如说pro,你去调to string,那就相当于把pro pro指的是一个对象吗?哎,Pro调to准就是把这个对象转换成什么字符串的形式就是这个样子。啊,把这个pro转换成什么呀?哎,转换成我们,哎字符串的形式,就是说你现在这个对象要把对象转成字符串的形式,你可以调这个方法啊,To string。
24:10
啊。啊,你看system.out.print line直接输出输出pro,它会自动调用什么呀?Too soon吧,是不是好,行了,咱们先休息一下啊,休息一下,休息15分钟。
我来说两句