java学习总结——你的前世今生

开发 后端
JAVA语言最开始只是Sun电脑(Sun MicroSystems)公司在1990年12月开始研究的一个内部项目。Sun电脑公司的一个叫做帕特里克·诺顿的工程师被公司自己开发的C++和C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT,同时他也获得了研究公司的一个叫做“Stealth计划”的项目的机会。

一、背景

JAVA语言最开始只是Sun电脑(Sun MicroSystems)公司在1990年12月开始研究的一个内部项目。Sun电脑公司的一个叫做帕特里克·诺顿的工程师被公司自己开发的C++和C 语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT,同时他也获得了研究公司的一个叫做“Stealth计划”的项目的机会。

java学习总结——你的前世今生

在这个项目中,团队最初考虑使用C++语言,但是很多成员包括Sun的首席科学家比尔?乔伊,发现C++和可用的API在某些方面存在很大问题。

工作小组使用的是内嵌类型平台,可以用的资源极其有限。很多成员发现C++太复杂以至很多开发者经常错误使用。他们发现C++缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。

根据可用的资金,乔伊决定开发一种集C语言和Mesa语言大成的新语言,在一份报告上,乔伊把它叫做“未来”,他提议Sun公司的工程师应该在C++的基 础上,开发一种面向对象的环境。最初,高斯林试图修改和扩展C++的功能,他自己称这种新语言为C++ ++ --,但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树),以他的办公室外的橡树命名。

1994年6、7月间,在经历了一场历时三天的头脑风暴的讨论之后,约翰·盖吉、詹姆斯·高斯林、比尔·乔伊、帕特里克·诺顿、韦恩·罗斯因和埃里克·斯 库米,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。作为原型,帕特里克·诺顿写了一个小型万维网浏览器,WebRunner,后 来改名为HotJava。同年,Oak改名为Java。商标搜索显示,Oak已被一家显卡制造商注册,因此团队找到了一个新名字。

这个名字是在很多成员常去的本地咖啡馆中杜撰出来的。一种比较可信的说法是这个名字是出于对咖啡的喜爱,所以以Java咖啡来命名。类文件的前四个字节如 果用十六进制阅读的话,分别为“CA FE BA BE”,就会拼出两个单词“CAFE BABE”(咖啡宝贝)。

1994年10月,HotJava和Java平台为公司高层进行演示。1994年,Java 1.0a版本已经可以提供下载,但是Java和HotJava浏览器的第一次公开发布却是在1995年5月23日SunWorld大会上进行的。SUN公 司的科学指导约翰·盖吉宣告Java技术。这个发布是与网景公司的执行副总裁马克·安德森的惊人发布一起进行的,宣布网景将在其浏览器中包含对Java的 支持。1996年1月,Sun公司成立了Java业务集团,专门开发Java技术。

二、发展

1、概念

是一种可以撰写跨平台应用软件的面向对象的程序设计语言。

Java不同于一般的编译语言和直译语言。它首先将源代码编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编写,到处运行”的跨平台特性。

Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

2、组成

Java编程语言,即语法。

Java文件格式,即各种文件夹、文件的后缀。

Java虚拟机(JVM),即处理*.class文件的解释器。

Java应用程序接口(Java API)。

#p#

3、优点

(1)Java是目前使用最为广泛的网络编程语言之一。

它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点。

(2)简单

Java 语言简单是指这门语言既易学有好用。如果你学习过 C++语言,你会感觉 Java很眼熟,因为 Java中许多基本语句的语法和 C++一样,像常用的循环语句,控制语句等和 C++几乎一样,但不要误解为 Java 是 C++的增强版,Java 和 C++是两种完全不同的语言,他们各有各的优势,将会长期并存下去,Java 语言和 C++语言已成为软件开发者应当掌握的语言。如果从语言的简单性方面看,Java要比 C++简单,C++中许多容易混淆的概念,或者被Java弃之不用了,或者以一种更清楚更容易理解的方式实现,例如,Java不再有指针的概念。

(3)面向对象

基于对象的编程更符合人的思维模式,使人们更容易编写程序。在实际生活中,我们每时每刻都与对象在打交道。我们可以用共有的属性和功能给出一个概念 ,如机动车类。一个具体的轿车就是机动车类的一个实例 对象 .

Java 语言与其它面向对象语言一样,引入了类的概念,类是用来创建对象的模板,它包含被创建的对象的状态描述和方法的定义。

(4)与平台无关

跨平台是 Java 语言最大的优势。其它语言编写的程序面临的一个主要问题是 操作系统的变化,处理器升级以及核心系统资源的变化,都可能导致程序出现错误或无法运行。Java的虚拟机成功地解决了这个问题,Java编写的程序可以 在任何安装了 Java虚拟机 JVM 的计算机上正确的运行,Sun公司实现了自己的目标 “一次写成,处处运行”。

(5)解释型

我们知道C,C++等语言,都是只能对特定的CPU芯片进行编译,生成机器代码,该代码的运行就和特定的CUP有关。

Java不像C++,它不针对特定的CPU芯片进行编译,而是把程序编译为称做字节码的一个“中间代码”。字节码是很接近机器码的文件,可以在提供了 Java 虚拟机 JVM 的任何系统上被解释执行。

Java的字节码经过仔细设计,很容易便能使用JIT 即时编译方式 编译技术将字节码直接转化成高性能的本地机器码,Sun 公司在 Java 2发行版中提供了这样一个字节码编译器——JIT(Just In Time),它是Java虚拟机的一部分。Java运行系统在提供JIT的同时仍具有平台独立性,因而“高效且跨平台”对Java来说不再矛盾。

如果把 Java 的程序比做“汉语”的话,字节码就相当于“世界语”,世界语不和具体的“国家”关,只要这个“国家”提供了“翻译”,就可以再快速地把世界语翻译成本地语言。

(6)多线程

Java 的特点之一就是内置对多线程的支持。多线程允许同时完成多个任务。实际上多线程使人产生多个任务在同时执行的错觉,因为,目前的计算机的处理器在同一时刻 只能执行一个线程,但处理器可以在不同的线程之间快速地切换,由于处理器速度非常快,远远超过了人接收信息的速度,所以给人的感觉好象多个任务在同时执 行。C++没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序的设计。

(7)安全

当你准备从网络上下载一个程序时,你最大的担心是程序中含有恶意的代码,比如试图读取或删除本地机上的一些重要文件,甚至该程序是一个病毒程序等。当你使用支持Java的浏览器时,你可以放心地运行Java的小应用程序 Java Applet ,不必担心病毒的感染和恶意的企图,Java小应用程序将限制在 Java运行环境中,不允许它访问计算机的其它部分。

(8)动态

Java 程序的基本组成单元就是类,有些类是自己编写的,有一些是从类库中引入的,而类又是运行时动态装载的,这就使得Java 可以在分布环境中动态地维护程序及类库,而不像 C++那样,每当其类库升级之后,相应的程序都必须重新修改,编译。

4、缺点

开发周期长,代码量大,对程序员的技术要求高

有人说,对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net也不过3,4本书足以,这就是区别。

比性能,微软曾做过一个例子,就是同一个项目用java和.net来作,结果开发周期,.net是java的一半,代码量java是.net的三倍。

三、比较

Java编程语言的风格十分接近C语言、C++语言。

Java是一个纯粹的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能,用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管 理而担忧。

在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

总结:无论java还是.Net,他们都是编程语言的一种,编程的关键不是语言,而是思想,一旦 你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思 想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。所以,让我们去学习语言中的思想,让我们去掌握编程的灵魂。

 
责任编辑:王雪燕 来源: 编程大巴
相关推荐

2018-04-02 14:33:58

区块链投资存储技术

2012-11-01 10:59:38

桌面虚拟化

2011-08-23 09:52:31

CSS

2014-07-30 10:55:27

2015-11-18 14:14:11

OPNFVNFV

2016-11-08 19:19:06

2016-11-03 13:33:31

2013-05-23 16:23:42

Windows Azu微软公有云

2014-07-21 12:57:25

诺基亚微软裁员

2016-12-29 18:21:01

2016-12-29 13:34:04

阿尔法狗围棋计算机

2014-07-15 10:31:07

asyncawait

2021-06-17 07:08:19

Tapablewebpack JavaScript

2019-06-04 09:00:07

Jenkins X开源开发人员

2012-05-18 16:54:21

FedoraFedora 17

2019-08-05 10:08:25

软件操作系统程序员

2015-06-11 11:10:09

对象存储云存储

2011-05-13 09:43:27

产品经理PM

2013-11-14 16:03:23

Android设计Android Des

2021-04-15 07:01:28

区块链分布式DLT
点赞
收藏

51CTO技术栈公众号