知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

零基础编程入门(04)——Java与环境搭建(改)

发表时间:2022-03-24来源:网络

在上一章中,鄙人为大家讲解了操作系统与编程语言的一些早期发展,提到了C语言与Unix操作系统的诞生与其解决的问题。而在本章中,我们将继续探索编程语言后续的一些发展,并最终到达我们教程的核心,Java 语言。


一、一条语句引发的血案

1964年,随着鄙人在上一章中提到的OS/360系统的发布,这个世界上爆发了一场危机。因为虽然OS/360发布后是一个巨大的成功,但是却在研发过程中遭遇了极为严重的开发问题,这个项目耗费了5000个码农近1年的时间才完成,写了几百万行代码。

而且,随着代码数量的增多,开发人员逐渐发现他们的代码变得极为难以修改与阅读,后期已经严重到了几乎无法完成项目的地步。大家都意识到自己写代码的方式可能存在问题,但却一直没能找到问题的原因。


然后,一直到了1968年,一位名叫艾兹格·W·迪科斯彻Edsger W.Dijkstra的荷兰人,在开发了上一章中提到的ALGOL 60语言的编译器后,写了这样一篇小论文:

翻译成中文的意思就是《Goto语句危害》,国内一般翻译作《Goto有害论》。

在这片小论文中,他提出了当时各大语言都有,而且开发人员都极常使用的一种名为Goto的语句,对软件项目包含着巨大的危害,而这种危害正式导致类似OS/360这样的大型软件项目差点玩儿完的主要原因。

所谓Goto语句,其实本质上就是一个跳转语句,意思就是将程序执行从一个地方跳到另一个地方接着执行,比如,有下面这样一段Basic程序:

20 LET a=2 // 将变量a的值赋为2 30 LET b=5 // 将变量b的值赋为5 40 GOTO 60 // 跳转到前面标号为60的那行代码继续执行 50 PRINT a+b // 打印a+b的运算结果即2+5的结果也就是7 60 PRINT a-b // 打印a-b的运算结果即2-5的结果也就是-3 70 END // 程序执行结束

在这样一段程序中,我们注意到在每一行的最前面,都有一个按10累加的数字,这个数字称为行号,然后在40行,我们注意到出现了一行名为 GOTO 60的语句,这一行语句的意思其实就是说,跳转到60行执行,而50行在本程序中,则永远都不会被执行,所以本程序的执行结果为:

-3

而不是:

7 -3

在《Goto 有害论》中,艾兹格·W·迪科斯彻提出了正是这样一种当时开发人员极为常用的语句,随着代码数量的增加,最终将导致程序逻辑变得极为混乱,而百万行级的代码中如果到处都是这种跳来跳去的代码,绝对将是一场灾难!

此文发布后,立即在当时的欧美计算机科研界引起了一场争论,无数人加入了论战,并设计出了各种奇奇怪怪的语言来证明其观点,比如我们上一章中提到的腐国人搞出的B语言的前身BCPL语言,还有一个瑞士人搞出了Pascal语言等等等等。

而其中,就有一位名叫克利斯登·奈加特 Kristen Nygaard的挪威人,在ALGOL 60语言的基础上,开发一种名为Simula 67的新语言。在这种新语言中,他创造性的加入了:

对象(Object)和类(Class)的两个概念。。。

。。。(嗯唔,不是处对象的那个对象,Object本意是物体的意思,不知道哪个老屌丝把它翻译成了对象)。。。

提出了编程应当基于对象进行。。。

。。。(不是说有了对象才能编程)。。。

简称为,面向对象编程(Object Oriented Programming)。。。

。。。(再说一次,不是对着你那口子编程,而是基于物体编程)。。。

更多关于面向对象的内容,我们后面在后续面向对象编程详解章节中,会具体参照着Java代码解释,现在只需要记下即可。


二、Simula 67与C++

面向对象编程提出后,由于其编程理念过于诡异,而Simula 67编译器生成的代码的执行性能又是相当的低,长期被人遗忘在某个角落里,特别当C语言崭露头角后,更是几乎被彻底遗弃,丢进了垃圾桶。

直到1979年的一天,一位名叫本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)的贝尔实验室工作人员,在偶然使用了Simula 67解决某个问题时,发现这种语言在进行大项目开发时,显得特别好用,特别是在进行并发项目开发时,用这种语言写的代码显得特别清晰易懂。

于是,抱着试一试的心态,他决定在他同僚,上一章提到的肯·汤普森与丹尼斯·李奇,开发的C语言上,也加入对面向对象编程的支持,于是花了点时间,开发了一种名为C with Classes(带类的C)的新语言。

这种新语言诞生后,在贝尔实验室内部得到了很大的关注,经过大量的改良和数个版本的内部修正后,最终得以定型,并在1983年被重新命名为:C++

C++语言本质上依然只是一种C语言的变形,保留了对C语言的兼容性,并加入了一大堆乱七八糟的新语法,而其中大部分主要就是实现对于面向对象编程的支持。相对于C语言,C++的功能要强大的多,而由于加入了对于面向对象的支持,用其开发的项目的代码风格也有了显著的变化。至于性能,一般情况下,C++则要略逊于C语言,但一些其他情况下,则有所超越,所以也可以说还算是各有所长。

最终,在1985年,C++正式离开了实验室,对外发布了第一个版本,称为C85版本。发布后,立即火爆全球,被大部分公司视为解决超大软件开发难题的一剂良药。甚至某个靠PY 交易上位不太硬的公司在发布其某个跨时代图形操作系统时,还特别标注了,本公司新系统100%支持C++开发,超牛逼,特自信,编写蓝屏程序就是这么简单!

100% C++, 100% 自信

然而!但是!这个世界上总有人爱唱反调,有那么一小部分人在用了C++后,却表示:


这货~哔~就是个坑啊,谁用谁死,你信不信!


三、太阳之泪

詹姆斯·高斯林博士

对,就是这老头,James Gosling,1991年,高司令正在一家给自己起名叫『日』的牛逼炫酷吊炸天的上市软件公司接手一个很2逼的项目,名叫『绿色计划』,这个项目的目标是给一些常见的家用电器添加可编程模块,来实现一些程序设定功能。

比如你家的微波炉,你可以设定一些诸如时间、温度这样的参数,然后冰鲜三文鱼丢进去,想化了生吃,设置为解冻。然后,几分钟后就给你烧熟了,并给你个提示,生吃不利健康,已替你烧熟。最后,用户为了表示感谢,就需要时常默念该公司的名字,日。

啊~~鄙人又说废话了~~回到正题~~

为了赶时髦,这老头决定使用当时最流行、最牛逼、最蓝屏的C++进行项目开发,然后悲剧发生了,在反复编写了大把的C++程序后,『绿色计划』的车翻了,原因有几点:

1、使用C++开发的程序难以移植到不同的平台,比如他们为洗衣机开发的程序,没法移植到微波炉上,因为洗衣机和微波炉可能用了不同的微处理器和一些其他的芯片,所以针对不同的电器,每次都需要进行大量重复的开发工作。

2、C++开发的程序极难调试,程序出错时,难以定位到具体的错误原因,每次排查故障原因都是一场灾难,因为需要反复编译、烧机 与 测试。(注:这苦逼差事,鄙人在给某 塞班系统手机厂商,不是诺基亚,开发翻盖外屏幕驱动时也干过,查个简单的BUG能查一下午,苦不堪言,效率极低)

3、公司的菜比程序员(比如当年的鄙人)为了图简便,经常会用C++中的一些稀奇古怪的语法写出一些天马行空的玩意儿,除了他们自己外,谁都看不懂。

4、由于C++语法中有大量的不确定性内容,大学刚毕业就进公司捣蛋的菜比们在使用C++写程序时,特别容易犯错,而且如前面所说,犯错后还几乎找不到原因。

在总结出了上面这些坑爹问题后,高司令痛定思痛,开会讨论决定:

日友们,我们不用C++这破玩意儿了,干脆先自己再开发一种新语言,名字我已经想好了,就叫!就叫...就叫什么来着?嗯,窗外那颗橡树看着不错,新语言就叫Oak吧(注:Oak英文意为橡树)。

于是,在1992年,高司令的团队在经过了18个月的研发后,Oak语言诞生了,这种新语言在借鉴了C++的设计后,加入了一些当时非常独特的设定:

1、完全的面向对象开发支持,几乎达到了100%,甚至整个程序都以类的形式编写(注:这个我们下一章开始会看到,现在不用急)

2、对程序代码的编译与执行方式做出了巨大的改变,程序不再直接编译成机器码,而是编译成一种名为字节码的伪机器指令,然后由一个叫做虚拟机(Virtual Machine,简称VM)的程序加载后再解释执行。这样就能实现程序与机器硬件的完全隔离,开发者无论开发任何硬件平台,只需要对VM提供的功能进行开发即可,硬件差异则由硬件厂商已经预先开发好的VM程序去兼容。这种特性,高司令美其名曰:一次编译,到处运行~~

3、加入了一个极为强大的错误检查机制,称为程序异常检测,能在Oak语言编写的程序执行时,一旦程序发生错误,其错误就会被 VM 程序检测到,然后输出给开发者,并将输出的信息精确到具体是哪一行代码。同时,开发者也能在开发程序时,通过一种名为异常捕获的语法,预先加入一些对各指定错误情况的预处理方案,以避免类似蓝屏这样的全面崩溃发生。

4、极大的精简了C++的语法,只保留了一些非常简单死板的语法,限制了开发者在编写 Oak 时,像C++一样使用一些奇奇怪怪的写法。而这在盲目追求语言功能强大的当时,是一种非常非主流的做法。甚至直到今天,在Python、C#这些的语言面前,依然显得很非主流,不能为这些语言的开发者所理解。

5、提供了一个称为垃圾收集的机制,过去在使用C++或C语言时,每当你要在程序中使用或存储一个数据,都必须要通过一条语句为其在内存中开辟一块内存空间,而当程序结束前,则需要用另一条语句告知系统这块内存我不用了,你收回去吧。如果不这么做,那内存空间就会一直被你的程序所占用即使程序已经执行完毕,并且随着开启程序增多,最终将内存全部用完,导致系统出错。这种C与C++开发中非常常见的错误叫做内存泄漏,而Oak 语言则独创性的通过VM中的垃圾回收机制帮助开发者管理内存的开辟与释放,开发者在使用Oak语言开发时,几乎再也不需要去管是否释放了占用的内存空间,而这一点极大的减少了程序出现内存泄漏错误的可能,也就避免了大量错误的可能。(注:严格说也没没完全解决,以后在讲解垃圾收集的时候会提到,先不用管)

而这以上五点,我们一般简单的总结为:跨平台性、动态性 与 高安全性,在有了这些改良后,Oak语言引起了不少开发者的兴趣。

最终,在1994年,『日』公司对外公布了Oak语言的编译器与VM程序的全部源码,并在1995年准备为其注册登记版权。然而就在登记时,却发现Oak语言这个名字早已被另一个公司的另一个产品所注册,于是,不得已,便将Oak的名字改为:Java


自1995年起,Java语言至今已经有了20多年历史,当年日破天的『日』公司早已关门大吉,被知名的数据库软件公司Oracle(一般翻译成甲骨文,其实英文是神迹的意思)所收购,而Java也随之转入了 Oracle 产品的名下,成为了 Oracle 的又一件珍宝。

虽然 Oracle 长期对 Java 的态度极为暧昧,直至近年由于使用Java做为应用开发语言的安卓崛起,才开启了一些实质性的项目去进一步更新和改善,但也终究敌不过全球无数菜比开发者们对于Java的热爱。

其在最初时便早已奠定的简单易学、跨平台、动态 与 安全的特性,使其成为了世界上最适合有高安全性、跨平台 与 易于维护等需要的项目的首选开发语言,同时,其本身也常年位居世界最热门编程语言排行榜第一的宝座。

看到这里,鄙人相信同学们早已饥渴难耐,那么接下来,我们就进入我们 Java 学习的第一个环节,搭建 Java 开发环境~~


四、Java开发环境JDK的安装

Java的开发环境安装操作比较复杂,此处鄙人就使用视频代劳,主要步骤是:

1、百度搜索JDK,前往Oracle官方网站下载JDK8

2、安装下载的安装包,注意要安装到默认目录

3、配置下JAVA_HOME、CLASSPATH、PATH环境变量,具体操作见视频

4、使用终端执行java -version命令与javac -version命令,如果看到结果说配置完成


六、问答

暂无问题


七、章节目录链接

零基础编程入门系列,前言及目录

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜