00:00
大家好,我是海波老师,第一个Java代码咱们已经演示完了,并进行了详细的解释,那么需要同学们自己下来再理解理解,那么接下来啊,咱们就准备开始一步一步学习Java的具体语法了,那么首先我们准备将这个字符串的内容啊,咱们在控制台上咱们多打印几次啊,我先CTRLC,咱们拷贝一下,然后呢,我CTRLV啊,咱们复制一下,其实在咱们idea当中啊,我们也可以采用特殊的快捷键,我们叫CTRLD,它可以呢复制,我们叫当前行对吧?那比方说我们现在把光标放在我们的结尾,我们CTRLD,它会自动把这一行复制出来,也是比较方便的啊,那么我们现在呢,就去打印一下运行。运行以后看结果,你会发现控制台上打印的就是我们的hello Java,没有任何的问题,那么接下来呢,我准备把打印的内容呢,我稍微改一下,那比方说我把这个hello Java我改成hello,对吧,那就更简单了,你把这个Java直接去掉就可以了,对吧?那么我们这里呢,Hello把这个全都替换掉啊,把它全都替换掉,哎,一个一个一个的替换掉,那么替换掉以后啊,我们再去点击右键,我们再去运行,你会发现也没有任何的问题,对吧,也是比较简单的,但是啊,你会发现每一个字符串的内容啊,我都要改一遍,就会显得很麻烦,那当然了,我们可以采用我们的快捷键,比方说我们这里有一个叫CTRL2,这个CTRL2呢,可以把当前文件中的内容呢做一个替换,这是完全可以做到的啊,所以咱们来咱们叫CTRL2,它可以呢,我们叫替换啊,当前我们的文字内容啊,这是完全可以做到的,但是啊,有没有别的方式可以让这个操作变得简单一点的,比如啊我就改一个地方,那么所有打印的操作它都会发生。
01:40
变化,那可不可以呢?其实是可以的,Java提供了一个语法来实现这样的功能,不过在讲解这个语法之前啊,咱们先梳理一下指定代码的执行过程。我们的Java的源代码呢,它会通过编译器把它编译成我们的自解码文件,这个咱们前面是讲过的,对吧?然后呢,我们的Java虚拟机启动之后,它会读取我们的自解码文件,然后呢,转换成我们的机器码,由操作系统来识别,操作系统读取指令以后由CPU来执行,那么我们在执行的过程当中,我们的CPU呢,它会把一些数据存储在内存当中,或者把我的数据存储到磁盘当中,然后呢,将我的结果呢,再反馈给我的操作系统,我们的操作系统呢,再把我们的结果反馈给我们的控制台,这个是咱们之前给大家说过的这么一个流程。
02:29
那么我们这里呢,把其中的一个细节咱们细化一下,就是我们CPU在执行指令的时候,它可能会像内存中存储数据,这个我们给大家细化一下来,我们这里把这个内存呢,我们复制一下。复制以后,把这个内存呢,我们拷贝过来,然后呢,我们在下面呢,我们再给大家添加我们的CPU啊,咱们CPU,咱把这个CPU的颜色呀,咱们变一下。好了,变完了以后呢,我们把我们的内存和CPU呢,里面画一些小格子啊来咱们画一些小格子。
03:12
好了,我这边画完了啊,内存画完了,然后呢,我们这个CPU呢,我们也换上小格子,那这个小格子是什么意思呢?咱们之前给大家解释过,内存啊,它就跟个抽屉一样,里面会有一个一的小格子,用来存储数据,对吧?而我们的CPU呢,这个一个一个的小格子呢,就好比一个一个的指令,我们就可以通过我们的指令一步一步去执行它,那这里呢,我们就写上它,我们叫print对吧,我们就叫print,然后写个括号,那这里呢,我们加上一个它,诶复制,把这个复制过来啊,把它我们也复制过来。还有我们这边都给它复制一下,那么接下来呢,我们在内存当中,我们写上我们叫hello啊,咱们叫hello,然后呢,我们这里来咱们拷贝,拷贝以后我们来复制,诶复制复制以后大家可以看到我们在当前的处理过程当中,我们的CPU执行我们的指令,那么在执行指令的时候,你就会发现它的print呢,会打印一个字符串,而这个字符串我们就是一个数据,那这个数据就存储在了我们内存当中,我们的print其实打印的就是这个hello,所以呢,我加上一个箭头呢,给它指向一下。
04:18
诶把箭头呢,我们拿过来,然后呢,我们再复制一下,为什么呢?因为我们后面的print呢,都会打印我们的hello,对吧,那所以我都复制一下,那么这样的话,我们的指令就依次执行就可以了,所以我们这个图画的应该没有什么太大的问题,但是有的同学可能会想,老师呀,这么画不太好吧,你这么画的话感觉多麻烦呀,为什么呢?因为我们的print呀,是一个一个的指令,那么你执行了我们的四次或者五次呀,我这边写五个四个都没问题。但是呢,你打印的内容不都是一样的内容吗?你打印的不都是hello吗?那都是hello的话,我为什么要去存四份呢?我难道存一份不行吗?哎,所以有的同学呢,他可能会这么想,来咱们复制一下,复制以后呢,大家看一下,他可能呢会这么去考虑,他会把我们的这个print呢,诶这么画没问题,但是呢,他觉得呢,我们的这个箭头这么画可能会更合理一些,所以把这个箭头我们拿过来。
05:12
也就意味着我们打印的内容呢,是这个样子,诶,我不知道其他同学会不会这么想,那这样的话,我们这个hello就不用了,Hello不用了,Hello不用了,那么这样的话不就赋予了更多的小格子吗?这些小格子是不是就可以存其他的数据了呢?啊,我相信这种方式啊,很多同学会认可的,对不对?但是咱们换个角度来想,如果我们当前的代码,我们这里是把第一个我们改成我们的hello Java,我们同学们怎么办?那如果你把它改成hello Java的话,有的同学说老师改呗,那好,我问你,如果我把这点就改成hello Java的话,那对吗?你会发现这就不对,为什么不对?因为我们下边并没有改,对不对,那所以我们这个地方它没有改的情况下,你的这个地方它变了,那么他们不都受到影响了吗?同学们是不是这样,你会发现这么是不对的,诶那这么是不对的话,那咱们前面呢?呃,前面的话把它改成hello加va诶这不就合理了吗?为什么呢?因为只有它们发生变化了,这几个并没有发生变化,对不对?所以啊,咱们的问题点就出现了。
06:18
如果呢,我们当前按照第一种方式的话,你会发现它会占用大量的存储空间,而且存储的空间啊,都是大量重复和冗余的,对不对?哎,这是我们第一种情况,那么第二种情况我们会发现啊,我们改动了一个,所有的都会有影响,那是为什么?就是因为这个箭头,这个箭头啊指向的是同一个空间,那是因为他们建立的关系,那么你把这个数据改动以后,所有建立关系的指令全都会受到影响呀。那有没有什么好的办法把它折中一下呢?我们又希望我们的数据不要大量的重复和冗余,我们又希望呢,这个影响没那么大,我改动一个呢,对别的指令没有什么太多的影响,那这个怎么做到呢?
07:01
我们这里给大家提供一个思路,大家看一下,我们把咱们的这个图形啊,咱们稍微的复制一下,首先我们第二个图形啊,我们觉得是有道理的,但是我们说它有问题,所以怎么办,咱们这样,咱们把咱们的这个图形啊,咱们给它稍微的什么,我们往下放,往下放以后呢,我们把这个图形拉长,诶所以咱们来我把这个内存呢,我拉长一些。拉长一些以后,把内存放过来,然后把这个数据这一块呢,我们给它复制一下,复制以后来同学们看我们这里呢,写上它,那么这个时候我们的hello Java保持不变,但是我们的这个地方我要稍微的变一变,我这里换个颜色,我写上一个什么呢?我们写上一个叫叉叉叉叉叉好了,我写上叉叉叉以后,这个下面的箭头我们也不变,然后呢,我们把这个箭头啊,叉叉叉我们指向这个,还加va我们指向它,诶我们这样。老师这样的话有什么好处呢?诶,咱们一块来看一看啊,咱们回来回来以后我把这个hello Java啊来我们给它替换掉,来替换掉好,那么现在呢,你会发现我们所有的print,其实大家会发现我们通过这个黄色的这个叉叉指向了hello Java,对不对,哎,是这样的,那么如果这个时候我们改动了这个hello Java,比方说我们改了一个叫hello,那么这个时候大家看一下,我们只需要在这儿我们写上一个hello就行了。
08:20
然后呢,我把箭头我指向这里。诶,那这个hello Java还是之前的,但是我们的hello就直接跟着变了,你会发现这样的话就比之前要好很多,为什么?因为我们一改就全改了吗?哎,老师啊,那如果你只想改一个呢,比方说你就想把第一个发生改变,你其他的不变怎么办也可以啊,我们再来一个呗,我们这里再来一个蓝色的对吧,我们给它写上一个YYYYY好,然后呢,我们的这个它我们指向hello加了,然后呢,我们的这个YYY,诶我们指向咱们的他,那这样的话大家想想,那不就意味着我们的这个箭头它指向的是黄色还是蓝色,就决定了我们打印什么样的内容,这种方式它又可以减少咱们之前所说的数据冗余和重复,然后呢,又可以降低我们的影响,你说这个不挺好吗?对不对,所以啊,我们Java的底层其实就是这么操作的,所以啊,我们给大家画这个图,是希望大家能够稍微的理解一下。
09:18
那好了,那么说到这里以后呢,我们就需要给大家去讲讲我们接下来要说的这个语法了,我们的语法是这样的,我们Java在底层的内存当中,我们的数据存储呢,是分两部分,我们这一层呢,专门是用来存储数据的,所以咱们就称之为叫数据存储。咱把这个呢,给它关联上啊,告诉大家有这么一个概念。好了。然后呢,你会发现我们下面的这个地方,它存储的不是数据本身了,它存储的其实是一个我们的数据的位置,也就意味着我们的叉叉叉,它会指向这个hello Java,但是呢,我们的print呢,它访问的是叉叉叉,它访问的不是hello Java,所以它等同于降低了数据和我们指令之间的一个关系,那么这个呢,其实我们也说一下,它是一种特殊的存储,我们称之为叫向量存储,那么这个向量存储其实很简单,因为呢,我们的这个地方是通过一个符号和名称来标记的数据的位置,所以这里面有一个方向,而且呢,我们的这个地方它指明了你所指向的数据的类型,比方说是个字符串啊,这个数字啊,哎,所以这个黄色呀,这个蓝色里面存储的数据,它又有数据的大小,还有数据的位置,我们把这个就称之为叫向量存储,不过呢,在我们Java当中,我们在内存空间当中创建向量存储的方式。我们就。
10:45
称之为叫变量。其实啊,什么叫变量啊,顾名思义就是可以改变的向量存储,我们就称之为叫做变量。好了,我们这个概念就先说到这里。
我来说两句