00:01
好了,那咱们就接着来吧,啊接着来啊,咱们接着看,嗯,再往下呢,咱们进入下一个章节了啊,这个章节是关于常用类。常用类啊,就是说我们可能要以后要开发我们用的比较多的一些类呢,我们在这里给大家讲一讲好吧,用的比较多的一些类啊,当然呃,这块呢,当然这个类啊,我们只是挑了这几个啊,也有可能在后期我们还会遇到一些别的类啊,这个只是一些常用的而已啊,常用的而已。常用的这块包括什么呢?嗯,包括这个string字符串是不是哎,String buffer啊,String buffer,然后呢,还有基本数据类型所对应的八个包装类型啊,八个包装类型我们可能得学一学,看一看,然后在这里还有个日期相关的这个类啊,就是对日期的一个处理啊,然后还有数字相关的这些类啊,还有随机数random啊,还有那啊,还有那枚举啊,那么我们一起来看一看吧啊,首先我们看先看这个顿,呃,这块的内容好学吗各位。
01:04
这块内容是不是不需要记,只需要翻文档?这块的内容好学啊,因为什么呢?因为只需要什么呀,翻阅什么呀,API帮助文档。啊,翻阅API帮助文档不需要记啊,不需要死记硬背,手里有工具,走遍天下都不怕,就这意思啊,手里有工具,这个工具在哪呢?这些都是散给我们提供的呀,是不是我们把这些常用的这些类我们要学的呀。是不是散写好呢?在哪呢?保准文档嘛,打开是不是我说了手手里有文档,走遍天下都不怕吗?是不是你手里没有文档,那你废了。啊,来,字体让它变大一点,来拖一拖啊拖一拖。拖一下往这拖一下,这边是包啊加va long包下,你看是不是有一个类不是interface啊,是类啊class这个class呢,我们找一找string啊,这不string这个类吗?是不是,哎,String这个类用的就比较多一些,哎呀,一变形这玩意儿就就完了。
02:08
中文的就哎,不如英文的啊,不如英文的。什么东西,这都是。啊,JDK中英对照版啥玩意儿。这文档不太行,这文档啊,中文的翻译的太烂了啊,太烂了,我们这个文档要先会看好吧。上面呢,是什么呢?是关于呃,再往上往上走啊class string是不是,那这个string这个类呢,默认继承谁啊,Object是不是,哎,然后呢,所有已经实现的接口看见了吗?哎,这个词这类实现了什么接口啊,什么able啊,Sequence啊comparable啊是不是哎你看不行这个啊,这个文档不行这个文档。太烂。嗯,但是现在我们我们不看这个文档了啊,有的老师咱们看怎么办?看英文的呀,英文也不太现实是吧,因为现在大家毕竟是初学,嗯,英文文档别看了,行吧,那咱们再找个低版本的啊,反正目前也能用啊,也能用来JDK6的API的中文参考手册,我们看一下。
03:12
呃,这个怎么样。哎,这个文档翻译的怎么样,看看啊。看看翻译的如何?嗯。左边这是目录。哎呀,这个格式不太一样是吧。我记得以前有一个挺好的文档。拷过来这个文档不是。我再找找那个文档吧,行吧行,我现在咱们先在这看吧,啊也能用,你看加完浪是不是,哎浪下面有谁啊,有这个ES打字string吗。这是不是论啊,对不对,哎,Public final class论,你看所有已实现的接口,你看这个文档翻译的是不是好一些啊。
04:05
大家看看是不是比刚才那个文档好一些,是不是,那咱就用它吧,啊Java了类string啊,这个类string,它类object是不是所有已实现的接口你看。对吧,最起码这像个样啊,像个样,那逗号逗号是不是,哎,Public final class string去继承object实现了这几个接口,然后下面是string这个类呢,代表字符串。是不是加号程序中所有字符串字面值,你看所有字符串的字面值,如ABC都作为此类的实例实现。也就是我们平时我们在第一天写那个hello word的时候,我们system.out.print打印输出的那个hello word,只要你是用双引号括起来的字符串的字面值,只要是这个字面值妥了,它其实底层是扭了一个对象,什么对象啊,是一个string对象啊,在底层实际上string对象啊。嗯,然后下边说了一说,说字符串是常量啊,不要去理解这个常量啊,它的值在创建之后不能更改啊,这个呢,我想说一下,我想说一下啊,这是什么意思呢?就表示说呀,我们双引号括起来的这个ABC啊,它这一辈子自从出生到最后死亡,整个过程它永远都是ABC,它不能ABC变成abcd,也不能说ABC变成AB。
05:16
啊,这是第一个大家知道的啊,大家知道的行吧,那这块的文档咱们,呃主要是学这个构造方法呀,还有它的方法呀,是不是你看方法这么多,是不是这么多你看太多了是不是,哎,那我够我们去学的这个东西啊,所以今天的课程比较枯燥啊,比较枯燥因为什么?因为我不学新东西,都是老东西,为啥呀,这个东西都是看着文档去做的,去点的是不是,所以今天内容是会很轻松的啊,会很轻松的,但是你下一周需要狂敲狂练,什么意思?你比如说杜老师在上课的时候讲了这个方法啊,说这个方法比较常用啊,这个方法比较常用这个方法,哎,妥了,你下一周是不是应该多去多去敲啊,多练啊是不是?哎,你用idea工具也有一个好处,什么好处啊,Idea工具只要一点就能出来,你看点诶就出来了是不是,哎,所以说idea工具对我们帮助也很大是不是啊,所以这块呢,非常感谢啊,非常感谢有这些牛人为我们开发了这种非常便利的工具啊,非常感谢非常感谢啊,谢谢你让我吃饭吃吃,吃这碗饭的时候更容易也是。
06:16
是好,那么这块呢,我们直接建一个package,各位啊,那com.BG power node点,然后咱们就Java SE,我们就叫做常用类string。啊,我们来看一下string,各位来out insert class,我们新建叫string test01行吧,好,接下来ctrl shift f12打开来,在这里我们给大家写上注释啊,写上注释呃,那这块呢,可能会有一个课堂笔记的事儿啊,课堂笔记首先第一个就是string类。啊,这个中这个课堂笔记这块,我到时候再去总结吧,我再把一些重点放到这个笔记当中,课堂上的可能往这里面写的就少了,各位啊,反正写的少了。行,那咱们来看一下啊,关于什么呀,关于Java jdk中啊,内置的一个类,Java点这个类。
07:09
首先第一点啊,String表示字符串啊,属于引用数据类型。啊,表示字符串类型。类型啊,属于引用数据类型啊,属于基本数据类型。那么第二个呢是在什么?在Java中随便啊使用双引号。括起来的都是string对象,注意啊,例如双引号ABC啊。对吧,哎,双引号D双引号hello word,哎,这都这是三个啊,这是三个词对象啊,这是三个什么呢词对象。
08:01
String类型的对象啊,这是第二点需要跟大家传达的,那么第三点是Java中规定啊,Java中规定什么呀,字符串。字符串。啊,双引号括起来的字符串。双引号括起来的字符串啊,是不可变的。啊,不可变的。也就是说,双引号ABC。自出生到最终死亡。啊,不可变。不能变成什么ABCDA啊,也不能变成什么不能变啊,这一点是加法中的一个特色,各位啊,双引号括起来字符串是不可变的啊,双引号ABC自出生到最终死亡不可变,不能变成abcd,也不能变成AB。
09:06
啊,那么这块呢,有一个特殊的待遇,大家注意啊,在JDK当中,在JDK当中双引号括起来的字符串。例如双引号ABC,双引号DEF都是直接存储在方法区的字符串常量池当中的。啊,都是直接存储在方法区的字符串常量池当中的。常量池各位啊符这有个概念啊,叫字符串常量池在哪啊?在方法区,哎,你需要知道这两点,一个是方法区,另外一个是在方法区里边有个字符串的一个常量池。为什么字符串?为什么散公司把字符串设置为一个?
10:05
把字符串存储在一个字符串常量池当中呢,为什么散公司把字符串设置不把字符串存储吧,存储在一个字符串常量池当中呢?哎,因为字符串啊在。实际的开发中使用怎么着啊,太频繁。啊,为了什么?为了执行效率。啊,所以把什么呀?哎,把字符串放到了方法区的字符串常量池当中,比如说举个例子啊,String s ABC def拖拉,那这行代码它所对应的内存图是怎样的,我们画一下来把它打开啊。它是这样的各位啊,来我们整个这个呢,就是一个所谓的一个Java虚拟机啊,然后我们这个线条让它细一点,然后整个标上去,这是一个JVM,然后接下来呢,我们这个地方呢,我们叫做方法区啊。
11:12
方法区各位啊,这个叫方法区,方法区然后还有一个东西,我们就叫做堆。啊,大概写一下,这个叫做堆个位啊,然后呢,这个位置呢,我们叫做占。啊占占啊,然后接下来我们这块呢,就给它删了,然后我们来看一下啊呃,这边的代代码首先第一个是会进行类加载,是不是哎类加载啊会类加载各位这个类装载进来,这个类装载进来啊类装载进来明白吧,这个代码先拿过来,它点什么呀?Class啊是不是string点什么呀?Class啊是不是哎代码片段呀,静态变量啊对不对,哎都在这儿存储的啊都在这存储的,那么接下来这个程序啊,它会去执行,它怎么执行,执行笨方法,执行笨方法会压站,所以在这块呢,它会压进来一个笨方法战争。
12:12
明白什么意思吧?啊,这个呢,我们叫做闷方法战争啊,Men方法战针啊,闷法战针,那闷方法战争当中是怎么回事呢?它首先第一个磁砖S等于ABCDF,记住啊,但凡是双引号括起来的东西,它都是字符串,字符串一旦出生,不可变,不可变,各位啊,在家文中规定它是不能变的,ABC不能变成deff,有的候老师不对啊,我这个ABCDEFF为谁说我不能变了?我ABC,我进行字符串拼接,拼接一个XY不就变成abcddx y了吗?错啊。如果你在这拼串的话,它底层会创建三个字符串对象。明白吗?来string SR啊,注意啊,我们就来把这个内存图画一下,什么意思呢,它。
13:02
会在哪儿啊,会在我们的字符串常量池里边。这是个字符串常量池啊。我们写上叫字符串常量值。颜色是字符串常量池啊,就是常量池来红色啊,红色在方法区里边啊,然后首先第一个呢,程序它里边有一个什么呀,有一个ABCDF。有一个ABCDEF,各位啊,那么其实这个呢,就是一个字符串对象了。这是个字符串对象啊,这个字符串对象有没有内存地址啊,它有内存地址,这个内存地址给了谁给了一。S1啊顿S1实际上它是一个引用,S1里边保存的不是ABCDEF啊,S1里边保存是这个对象,它的内存地址,只不过这个对象在哪啊,在我们的字符串常量池当中啊,那么这个时候呢,在这儿有个string什么呀,S1,然后呢,这里呢,哎,S1是个变量啊。是个局部变量啊,各位有没有想过,因为你S1现在不是在我们的这个焖方法里边吗?是个局部变量啊,对不对,哎,局部变量啊,然后接下来实际上哎,我们这样看的话,就把之前的讲的就推翻了,各位啊,0X1234,而这个0X1234是谁呢?各位是我们这个字符串。
14:18
这个对象在方法区常量池当中的一个内存地址。对,是这样的啊,颠覆了吧,之前画的图是就不对了,哎,是这样一个情况,各位啊,是这样一个情况,然后你这个程序再往下走,再往下走,大家注意看了啊,再往下的话,你这块磁钝S2等于什么呀,ABCDEF,而ABCDEF直接各位啊,看好了,是不是和上面没发生改变,没发生改变这个字符块对象是不是就不需要新建了,它可以直接从这个字块常量池里面拿过来。拿过来听懂了吗?就是他为什么把字符串,我上面说的很清楚,为什么把字符串放到一个字符串常量池里边,因为字符串使用太频繁,它你假如说这一块去新建一个字符串对象到第十五行的时候,大家想一想,这个是不是就直接从字符串常量池里边拿了,就不需要再新建了,对不对,不需要再新建了,这就是符串常量池的一个好处啊。
15:12
啊,所以这个时候他把这个拿过来,然后加上后边又有一个双引号,里边放的是XY,那么这个时候看到双引号,它一定会在字符常量常量池里面新建一个对象。会一定会在这新建一个对象,各位啊,新建个对象,这个对象叫什么,叫XY。XY啊,这同样也是一个什么呀,哎,字符串对象也在什么呀,我们那个字符串常量池里边放着,只不过现在呢,这个对象没有引用去指向它。没有引用就指向他各位。没有引用去指向它,是拿着这个对象通过加号的方式进行拼接,拼接完之后会生成一个新的字符串对象啊,这个字符串叫ABCDEFXY,这个时候它会在我们的这个。哎,字符串常量池里边干什么呀,会生成一个什么呀,新的字符串各位。会生成一个新的啊,叫做什么呀?叫做ABCDEFABCDEF,然后呢,XY。
16:02
会生成这样一个新的字符串。由于拼接的操作,让它生成了新的字符串,那么这个时候拼接完之后的这个结果。是一个,哎也在什么呀,字符段常量池里边,然后呢,这个对象它的内存地址给了谁呀?哎,给了我们这个S2,那给了这个S2。RDS2是死转S2来把它拿过来,然后接下来我们在这儿呢,哎,写上啊,然后呢,这是一个什么呀,来对象各位啊,这是个对象。这个呢啊是什么呢?是这个0X什么呀,2356啊,而这个0X2356指向谁呀?哎,指向的是我们这个啊字母串。字母串个位啊,原先的那个ABCDF还是abcdf X y还是XY啊然后呢,哎,在进行字符串拼接的时候,会产生新的字符串对象。所以在这里呢,我需要大家掌握的是什么呢?第一,字符串用双引号括起来的这个东西啊,它是不可变的,自出生到最后死亡,它ABC永远是ABCABC无法变成abcd,也无法变成AB。
17:07
这是第一点各位我要告诉的啊,第二点我想说的是字符串这个东西是存在哪存在一个所谓的叫什么字符串的一个常量池里面,是在一个字符串这个常量池当中的。字符串常量池为什么放在字符串常量池?字符串常量池就意味着常量,常量不能变,它是一个池,双引号括起来都在这个里边。啊,那将来你用ABCDEF它可以不用创建了呀,它效率比较高啊,你第一次用abcd,你第二次再用ABCDEF,你不需要再这个新的字符串对象了,而这个ABCDEF呢,直接是从从从上面拿了拿过来的。直接拿过来,直接这个内存地址就拿过来了,加号做的是连接运算嘛,连接运算会让它产生一个新的字符串啊,所以这个哎,这两行代码表示底层创建了三个字符对象啊,这两行代码表示底层创建了三个字符串对象啊,都在字符串什么常量池当中。
18:02
啊,下边这两行代码啊,那么接下来继续继续看啊,大家看看,还有一种情况是这样的,各位还有一种情况注意听啊,看帮助文档,帮助文档当中啊,我们往上走,大家看这个string这个类,这个string这个类啊这里啊有一个什么呀,有个构造方法,大家看是不是有这么一个构造方法。构造方法你懂吗?构造方法,这个类的构造方法你懂吗?是通过它是不是可以构建对象啊。对不对,那我们采用这种方式创新的字符串对象呢?哎,我们尝试一下各位啊,大家看好了,在这呢,我们用string叫做S3STRING s3等于new string,这次调构造方在这new这个东西是调构造方法的,构造方法里边可以跟个字符,那如果直接写个XY呢?好各位,这个XY它是这里双引号括起的XY它是从哪拿的,告诉我就你要分析啊呃,这是使用new的方式创建的字符串对象,对吧?分析什么呢?分析这个这个代码中的双引号XY是从哪里来的。
19:06
是从哪里来的?哎,注意啊,我说过凡是凡是双引号。括起来的啊,凡是双引号括起来的,注意啊,凡是双引号括起来的。都在字符串常量池中。有一份儿。啊。凡是双引号括起来的,都在字符串常量池中有一份。就你new只不过但是你要注意啊,New对象,New对象的时候。一定在堆内存当中开辟空间。New对象的时候是一定在堆里边开辟空间的,各位啊,New string。
20:02
啊,然后这有个XY。好,各位看好了啊,这个程序啊,就变成这样了,你不是new吗?New啊,它实际上是在堆里边开辟空间,这是那个对象。String对象啊,那么这个string对象里面有一个XY吗?不是这样的,各位啊,实际上在这里啊,它有一个这样的东西。有一个什么呢?0X5656,这个0X5656指向谁呢。这个内存地址谁的呀?是XY的内存地址。啊,是XY的内存地址,各位啊,然后你这个对象扭出来之后,为为什么在堆里边,为什么突然在堆里边又多了一个对象呢。哎,各位注意是因为你这的。啊new的,然后拗完之后呢,这个对象,整个这个对象呢,它的内存地址付给了S3 S3是谁是这个把这个拿过来。
21:02
放到了哪儿啊,放到了我们的这个位置上。啊,这是一个string s3,然后呢,这个S3呢,它保存一个对象的内存地址。明白吧,啊,保存一个对象内存地址,这个对象内存地址我就随便写了啊,比如说零。0X0X1111,那这个0X1111指向谁呢?指向的是这个。这个啊,指向是这个词对象。来,颜色变一下。这个0X111是这个堆内存,这个对象的内存地址。但是你这个堆里边这个对象,它由于在构造的时候,它是传了一个XY,而XY双引号括起来的会在字符串常量池里边有一份,所以这个XY在字符串常量池里边的这个对象,它的地址会给谁啊这个对象。是这样一个一个情况,各位啊,是这样一个情况。
22:00
所以说你的这种方式和这种方式是不一样的,如果是这种方式,表示你这个变量里边保存内存,内存地址直接指向了谁呀,我们常量池里边的字符串对象,如果你采用是new的这种方式。那new string的这种方式,那么它会在哪呢?会在字符串常量池里边有一个对象XY,同时把这个对象它的内存地址给了这个堆里边这个对象,因为你拗了,为什么这个堆里边会多这么一个对象,是因为你拗了。你明白吗?哎,这个这个好好去理解一下啊。
我来说两句