《小白的Java自学课》第五课:从hello world来进一步认识Java

小白: 什么是hello world啊,觉得经常见啊😂

庆哥: 😎

首先我们要知道它的中文是啥意思,那就是”你好啊,世界!“,这难道有啥寓意嘛?你想啊,这像是个问候语,就像刚刚来到这个世界一样,然后跟这个世界打个招呼,意味着自己初来乍到,以后就要在这个世界上混了,大致就是刚刚接触一个新事物,并且以后准备深入了解。

小白: 哦,这样说大致明白了hello world是个啥意思,但是在Java中它又是咋回事,按照你说的,是不是意味着刚刚接触Java,以后逐渐深入的学习Java,所以刚开始先跟Java打个招呼啊😁

庆哥: 完全可以这样理解啊,在Java中我们一般写的第一段代码就是hello world,意味着我们现在要开始进入Java的世界了!

小白: 😹可是这个hello world的代码是啥,没有写过啊,也不知道长啥样子。

庆哥: 怎么会没见过呢?你看看,就是他啊:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!"); 
    }
}

怎么样,是不是很熟悉😀,我们在之前讲解JDK的时候做过演示的,那个时候你可能并不知道这段代码啥意思以及为啥这样写,因为刚开始,你不了解很正常,随着后续的慢慢的学习,你就会越来越清楚的。

小白: 哦哦,原来是它啊,它就是我们说的Java中的hello world嘛?

庆哥: 是的,其实本质上是啥呢?所谓的hello world其实也就是使用Java语言去写一段代码,然后打印出hello world,就是这么简单,很多人都把这个叫做学习Java的第一段代码,意味着敲开了Java的大门😎

小白: 嗯嗯,这下知道怎么回事,那么咱们今天主要就讲这段代码嘛?

庆哥: 我们今天是以这段代码为基础,去聊聊Java中的一些知识,不知道你之前是否看过别的书籍或者视频教程,都是怎么讲解这个hello world的呢?

小白: 我之前确实看过,很多都是写出这段代码,然后演示一下,看到输出hello world就过去😂,难道咱们今天不是这样嘛?

庆哥: 必须的啊😎,咱们今天虽然也是说hello world,但是涉及的内容也不少的,绝对不是让大家啊看个输出就结束的,大致这次会聊聊以下的内容:

  1. 重新认识hello world
  2. java的运行条件(jvm,jdk和jre)
  3. 什么是编译和解释
  4. 什么是面向对象编程语言和面向过程编程语言
  5. Java和c语言以及c++有什么区别
  6. Java是如何实现跨平台的
  7. Java的学习应该注重什么
  8. 计算机组成原理部分知识

怎么样?期待嘛?

那接下来,咱们就正式开始吧😉

重新认识hello world

庆哥: 我们在学习Java之初,大部分人都会写上这么一段代码

class Test{
    public static void main(String[] ithuangqing){
        System.out.println("一个自学的程序员");
    }
}

标志着自己的编程生涯或者说Java学习正是开始了,这段代码或许你是从书上看到的或者是从视频里面看到的,然后你就跟着操作,然后输出执行,然后看到

一个自学的程序员

当然,输出内容是可以自己自定义的,随便都行,然后写完了,输出了也看到内容了,然后就进行下面的学习了

小白: 咦?为啥你这里写的代码跟之前的hello world不一样啊🙄

庆哥: 确实不一样,还记得之前说的嘛,hello world其实就是用Java语言写一段代码,输出hello world而已,这只是大家习惯这样的方式而已,实际上,我写上这么一段代码,输出什么内容都是可以的,并不意味着你定要输出hello world才对,比如这里,我就输出”一个自学的程序员“,因为我之前经常说自己是一个程序员,所以就输出这个了。

小白: 哦哦,也就是说,这段代码输出什么都可以的是吧?对了,我还发现这里的不同:

String[] ithuangqing 之前是 String[] args啊?😁

庆哥: 可以啊,看的很是仔细啊😅,这里确实是我故意改的,因为我刚开始学习Java的时候,在写这段代码的时候,有很长一段时间,我都觉得这段代码是固定的,也就是说非得这样写不可,但是实际上并不是,只要按照Java的正确语言,很多东西都可以变得,比如之前的那个输出,还有你刚刚指出的这个,这里不是只能写成args,改成其他的也行。

小白: 哦哦,原来是这样,你不说的话,我还真的以为是固定写法,不能改变的呢。这确实跟我之前知道的不一样,不过,咱们该不会就说这么多吧?😁

庆哥: 当然不是啊,别看一段简短的代码,那里面可是有大学问的,下面咱们就来一起重新认识这个hello world。

首先问你个很简单的问题,当你写下这段代码的时候,你把它保存在哪了,假如说你说是桌面,就像现在这样

是的,一个HelloWorld.java文件就保存在了桌面上,这个叫做Java源文件,不过说是保存在桌面上这个有点模糊,这个桌面又是个啥呢,我们应该想象它保存在了我们电脑的哪个部分呢?

小白: 保存在了电脑的哪个部分?不就是桌面吗?😂,不对你的意思是不是指的计算机的组成的某些东西?

庆哥: 哈哈,是的,你知道一台计算机,最基本的包含哪些东西吗?

小白: 这个好像有如下的五个部分吧:

  1. 运算器
  2. 控制器
  3. 存储器
  4. 输入设备
  5. 输出设备

庆哥: 可以,回答的很准确,这些好像都是专有名词专业术语,不过我们从字面意思上应该能猜得出,这个Java源文件应该是和存储器有关系的,那是必须然,那么这个存储器又是个什么鬼呢?你知道吗?

小白: 存储器,应该就是存储东西的,是不是就是我们说的电脑上的内存啊?硬盘?🤣

庆哥: 在计算机中啊,保存信息主要靠存储器,而存储器又分为内部存储器和外部存储器,内部存储器就是内存了,而这个外部存储器主要就是磁盘了,磁盘又分为硬盘和软盘,而我们电脑中的大部分就都是硬盘了,这里也分为固态硬盘和传统机械硬盘。

不管怎么说吧,磁盘也好内存也罢,就是用来存放数据的,那么我们就知道了我们写的这个Java源文件应该就是存放在电脑中的磁盘了,那好我们现在来梳理一下

我们通过记事本写下了这么一段代码:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!"); 
    }
}

然后命名HelloWorld.java,我们知道这是个Java源程序,实际上它是存放在了我们电脑中的磁盘上面,下一步我们就要想着去如何运行这段代码,那么该怎么运行呢?

java的运行条件

庆哥: 你知道运行一个java程序员,都需要哪些基本条件吗?这个我们之前可是讲过的哦?

小白: 这个必须知道啊,我们写完一个java源程序,想要运行的话,就要使用jdk来进行编译和运行,运行的话实际上是依靠jdk中提供的jre,也就是java的运行环境。

庆哥: 可以的,记得很清楚,那么编译和运行java的那两个基本指令还知道是啥吧?

小白: 必须的,就像下面这样:

是不是啊,庆哥😃

庆哥: 可以的😎,那你知道什么是jvm嘛?

小白: 这个??哈哈😂,这是啥啊,不太了解。

庆哥: 这个jvm的全称是

Java Virtual Machine

也就是Java虚拟机,这个相当重要,为啥?如果你学习Java的话你就一定知道Java的跨平台,也就是一句非常经典的话

“write once, run everywhere”

要知道Java实现跨平台可全是jvm的功劳啊

Java的跨平台

小白: 跨平台是个什么鬼?🤣

庆哥: 下面我们就来好好说说这个跨平台,也就是来聊聊jvm,说到这个我们需要把c和c++也拿过来一起做个比较。

我们或许知道c语言是一个偏底层的语言,是面向过程编程的语言,对于面向过程语言,它专注的是数据之间的流向,重点在过程两个字,而c++和Java语言都属于面向对象编程语言,他们关注的则是不同对象之间的一个关系,重点在对象两个字。

c语言应该是每个学计算机的都会学的吧,或多或少都会知道一个很厉害的名字叫做“指针”,是可以直接去操作内存的,这带来的问题就是我们需要自己手动的去释放内存,而Java我们应该也知道,有了jvm来管理内存,我们不需要自己手动释放内存

也就是说,Java把c++和c语言中那个神奇的指针给去掉了,为啥,因为指针是可以直接操作内存的,因此肯定会带来很多的编程错误,这里给大家看一张图来理解吧

c和c++因为有了指针的存在,所以是可以直接与操作系统进行交互的,从而可以去操作内存,但是谁能保证你写的没啥问题,直接操作内存难免会出现问题,而且你还需要自己手动的去释放内存。

而Java就不同,他去掉了指针,不与操作系统直接交互,而是在中间多了一层jvm,也就是说你写的程序会先交由jvm去处理,然后才会与操作系统进行打交道,如此一来,你就可以随便造,反正有jvm在后面帮你把关,而且内存也会交由jvm来进行自动回收,着实很酷。

我们再来说说这个跨平台,从图中我们可以分析得到,无论是c还是c++他们都是严重依赖操作系统的,也就是说你在windows上写的c程序在其他平台是无法运行的,是无法做到跨平台的,为了更好的理解这块,我们需要补充下知识

说的这些听懂了吗?😂

小白: 信息量有点大啊🤣,不过你说的很清楚,我明白了

庆哥: 那就好,为了让你更好的去理解,需要说点额外的知识点,那就是编译和解释,这个你知道吗?

小白: 编译和解释?之前一直有说编译,不过到底啥是编译,好像真的没啥概念啊🙄

编译和解释

庆哥: 那接下来我就好好的解释解释这个编译和解释😂

说到编译和解释,可能会遇到编译器和解释器的概念,这个不难理解,编译器的作用就是编译,而解释器的作用就是解释,而他们操作的对象都是程序。

根据编译和解释其实可以将程序语言分为两大类,分别是编译型语言和解释型语言,说到这里我们还要明白一个问题,那就是为什么会有编译和解释,要知道,计算机是只认识机器码的,也就是0和1,所以我们通常情况下写的代码,计算机是不认识的,因此需要把我们写的程序翻译成计算机能够识别的机器码,那么翻译的方式就有两种

一是编译

二是解释

而他们最大的区别就是翻译的时间不同,对于编译而言,它是一次性的把源程序翻译成目标代码,然后计算机读取的时候就可以直接以机器码进行执行,这样的话效率就会很高,但是对于解释则不同,解释的特点是只有在执行的时候才去翻译,也就是边翻译边执行。

我记得之前看过很形象的一个回答,就是什么是编译和解释呢?

编译就是相当于提前做好了一桌子菜等着你吃,而解释就好比是吃火锅,边吃边下。

个人觉得很形象,对理解什么是编译和解释很有帮助。

知道了什么是编译和解释我们就要说道说道什么是编译型语言和解释型语言了。

我们熟知的c和c++就是典型的编译型语言,对于编译型语言,有一个专门的编译过程,是直接把源程序翻译成目标代码,而且是一次性的翻译完成,因此执行效率很高。

而像python和js就是解释型语言,可能有人会说到脚本语言,脚本语言也是一种解释型语言,对于解释型语言,会有一个专门的解释器在执行的时候进行解释,也就是执行一句解释一句。

那么对于Java属与哪一种呢?你知道吗?

小白: 😂,我还在消化你说的呢?

庆哥 其实Java属于两者的结合,也就是Java即是编译型也是解释型,不过说到底,Java应该是解释型语言,为什么呢?可能有点绕,但是也好理解

我们知道Java是一种跨平台的高级语言,而实现跨平台的则是jvm,那这个跨平台到底是怎么回事呢?

再来看看这段熟悉的代码:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!"); 
    }
}

那么这段代码是如何做到一次编译,到处执行的呢?注意我这里说的是编译,那么在Java程序的执行中肯定存在一个编译的过程,那么这个Java应该属于编译型语言啊,为什么是解释型语言呢?

不着急,慢慢来,我们来看一张图:

小白: 不对啊,庆哥,这个怎么是Test啊,不应该是HelloWorld嘛🤣

庆哥: 你把它当作HelloWorld不就行了😂,其实是一样的,这个是之前画的图,不想画了就直接借用了🤣

小白: 好吧好吧,知道了😁

庆哥: 这段代码我们把它命名叫做HelloWorld.java,它是一个Java源程序文件,接着我们可以使用javac命令生成一个HelloWorld.class文件,这个叫做字节码文件。

这里我们一定要理解的是,javac就是在执行一个编译的过程,通过javac把Java源程序编译成目标代码,只不过与传统的编译不同的是这里的编译并不是将Java源程序直接翻译成机器代码,而是翻译成来一个中间代码class文件,叫做字节码文件。

很重要的一点,这个字节码文件是与平台无关的,这是实现跨平台非常重要的前提,也就是生成的字节码文件是与平台无关的,那么接下来如何在不同的平台上进行执行的呢?

这就要靠jvm了,字节码虽然与平台无关,但是可以由jvm进行解释执行,因此只要在不同的平台上加装相对应的jvm那就可以实现跨平台执行来

这里需要理解的关键点就是不同的平台需要有不同的jvm,也就是在每一个平台上安装相对应的jvm,那么就都可以解释执行字节码文件了,字节码是与平台无关的,但是这个jvm却是与平台相关的,也就是说不同的平台上的jvm是不同的。

因此,jvm对于Java的跨平台来讲就是一个桥梁,Java源程序首先编译生成字节码文件,这个字节码文件是不能直接运行的,需要由不同平台上的jvm把这个字节码翻译成对应平台上的机器语言,这里的翻译其实就是解释,在这个过程中,字节码始终都是一样的,但是由各个平台上的jvm翻译之后的机器码却是不同的。

Java正是通过这种机制实现的跨平台,总结下就是Java是跨平台的,真正跨平台的是Java程序,而jvm是c和c++编写的软件,是编译后的机器码,不同的平台上jvm的版本是不同的。

经过编译之后的字节码文件是存放在我们电脑中的磁盘中的,当对字节码文件进行解释的时候,这个字节码文件就会通过一个类加载器的东西把字节码文件加载进电脑的内存中,当然这个加载过程是有特定的步骤的,主要就是检查这个字节码文件是否符合jvm规范等等,加载成功就会在电脑中的内存中开辟一块空间,这块空间其实就是jvm,然后再由内存输出内容。

所以到这里,你知道运行一个Java程序涉及到哪些必要的东西嘛?

小白: 经过上面这些介绍,我知道了,要想完整的运行一个Java,离不开jdk,jre和jvm!

庆哥: 可以的😎,没白讲!接下来我再补充一些计算机组成的相关知识,会加深你的理解。

硬盘中固态和非固态的区别?

硬盘按照原理分类可分为机械硬盘(hdd),固态硬盘(ssd)和混合硬盘(sshd),那么他们有什么区别呢?这里主要说固态硬盘和机械硬盘,机械硬盘就是我们平常的电脑里加装的传统硬盘,他是这个样子的:

这种硬盘应该是目前电脑主要的存储媒介之一,就是最基本的电脑存储器,也就是我们常说的电脑硬盘,比如我们电脑里面的c盘啊,d盘啊他们是硬盘,不过更加准确的说应该是硬盘的一个个分区,也就是一整个硬盘空间被分割成了一块块的空间,就是我们看到的abcd盘了。

我们到这里必须说明一个问题。

可能你会纠结这些概念,硬盘大概知道了,不过记得好像还有磁盘,那这个硬盘和磁盘有什么区别呢?

首先记住,磁盘是个总的,也就是说磁盘包括硬盘,那么还要知道磁盘是干嘛的,磁盘最主要的功能就是保存电脑里面的信息,但是磁盘又有一些分类,不过我们首先要知道,在计算机中,保存信息的有这么两类:

第一:内部存储器

这个就是我们说的内存了,是由内存条提供内存空间,特点是存储信息速度快,但是容量不大,而且很重要的一点就是只要一断电,里面什么玩意儿都没有了,断电就会丢失所有的信息。

第二:外部存储器
这个主要就是磁盘了,对就是磁盘,可不是硬盘,也不是内存
,对于外部存储器也就是磁盘而言,它有这么些特性,首先就是不像内存那样一断电就丢失所有的信息,存储的数据不会受到断电的影响,但是它的速度相比内存那就慢的多了。

到了现在起码知道在计算机中保存信息有两类存储器,一是内部存储器,而是外部存储器也就是磁盘,下面我们再来说说磁盘,其实磁盘也有分类

一是:硬盘
这个我们就比较熟悉了,就是我们电脑中的c盘啊d盘啊,这里再说一点,还记得之前说的这些其实就是硬盘空间的分区嘛,要记住c盘是主分区,是安装操作系统的,其他盘可以叫做扩展盘,所以c盘也叫做系统盘,不过他们都属于硬盘,而硬盘又是属于磁盘的,这个关系要理清

二是:软盘
好了到这里你就要知道磁盘是分为硬盘和软盘的,硬盘可能我们还比较清楚,这个软盘估计很多人没有太多概念,先来看张软盘的图片吧:

估计看到图片有些人就会觉得有那么点熟悉了,这就是软盘了,那么该如何解释这个软盘呢?其实你完全可以把软盘理解之前之前的u盘,只不过在出现了真正的u盘之后,这个软盘慢慢就都淡出了市场,要知道没有u盘的时候,软盘是很受欢迎的。不过科技总归是在进步的嘛!

以上我们简单而又详细的说了下关于硬盘的知识,下面继续我们之前的主题,固态硬盘和非固态硬盘,以上说的这些都是属于传统硬盘,价格比较低容量比较大,但是存储数据速度较慢,要知道这些传统硬盘也叫做机械硬盘。

现在开始流行的是ssd了,也就是固态硬盘,它长这个样子:

不用想,这个固态硬盘肯定比机械硬盘要高级的多,各方面性能都远远超过机械硬盘,但是缺点呢?就是太贵了比着机械硬盘,不过固态硬盘可以加快系统启动速度和软件启动速度,所以现在很多笔记本有加装固态硬盘,这个速度那真是谁用谁知道啊。

目前市面上机械硬盘依然占据比较大的市场,不过我觉得吧,随着固态硬盘的成本不断降低,固态硬盘必须是未来的趋势啊。

至于还有一个混合硬盘,这个感兴趣的大家可以自行搜索了解,这里就不再说了。

那么到这里我的这个hello world就说完了,真心希望你能有所收获,那么最好一个问题,我们在学习Java的时候应该注意什么呢?

对此,我只有一句话:

勿在浮沙筑高台!

小白: 谢谢庆哥!😎

感谢阅读

大学的时候选择了自学Java,工作了发现吃了计算机基础不好的亏,学历不行这是没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习Java核心知识,深入的研习计算机基础知识,所有心得全部书写成文,整理成有目录的PDF,持续原创,PDF在公众号持续更新,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!

其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?

非常欢迎你的加入,未来的日子,编码之外,有你有我,一起做一个人不傻,钱很多,活得久的快乐的程序员吧!

回复关键字“PDF”,获取技术文章合集,已整理好,带有目录,欢迎一起交流技术!

另外回复“庆哥”,看庆哥给你准备的惊喜大礼包,只给首次关注的你哦!

任何问题,可以加庆哥微信:H653836923,另外,我有个交流群,我会***不定期在群里分享学习资源,不定时福利***,感兴趣的可以说下我邀请你!

对了,如果你是个Java小白的话,也可以加我微信,我相信你在学习的过程中一定遇到不少问题,或许我可以帮助你,毕竟我也是过来人了!

在这里插入图片描述

感谢各位大大的阅读🥰

发布了161 篇原创文章 · 获赞 1万+ · 访问量 133万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览

应支付9.90元
点击重新获取
扫码支付

支付成功即可阅读