Java是一种计算机语言
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java更重要的是有强大的类库方便编程者使用,Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java可以做什么?
Java语言的特点
Java 语言是简单的
Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。
Java 语言是面向对象的
Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
Java语言是分布式的
Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。
Java 语言是健壮的
Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。
Java语言是安全的
Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。
Java 语言是体系结构中立的
Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
Java 语言是可移植的
这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。
Java 语言是解释型的
如前所述,Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
Java 是高性能的
与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。
Java 语言是多线程的
在 Java 语言中,线程是一种特殊的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子类将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized)。
Java 语言是动态的
Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
Java分为三个体系
Java的历史是非常有意思的。1990年底,Sun Microsystems在工作站计算机市场上领先世界,并继续保持健康发展。Sun想把本公司的创新和专业知识应用到即将到来的消费电子市场领域,于是该公司邀请了一些顶级工程师,组建了一个Green Team团队(核心成员有: James Gosling, Mike Sheridan, Patrick Naughton和Bill Joy)来研究这个项目,这个项目主要做数字设备(例如:交互式电视、机顶盒等)。在1992年,Green Team团队研发了一个交互式手持式家庭娱乐设备,首次展示了其独立于处理器的新编程语言的潜力。由此可见这门语言的先进性,Java的先进性体现在它的设计原则:
Java的目标是,让应用程序开发者,“编写一次,到处运行“,这意味着,它是一门跨平台的语言,James Gosling被誉为”Java 之父“。
由此可见,Java如些先进,它的发展自然不言而喻。下面,我们看看Java1-8版本的发展历程:
1991年1月(Green Project)
一个名为“Green Project”的项目启动。该项旨在为家用电器提供支持,使这些电器智能化并且能够彼此交互。而且这些家电可以由远程客户端控制。Bill Joy、James Gosling、Mike Sheradin和Patrick Naughton是该项目的核心成员。
1991年2月(橡树(Oak))
James Gosling是该计划的软件负责人和架构师。他最初的目标是为“绿色计划”找到一个适合的语言来运行。他选择了C++,并对有需要的地方进行了扩展。但是这些功能不能满足计划的需要,因此建立一门新的语言成为当务之急。他开始夜以继日地忙于新语言的开发,并将其命名为“Oak”,因为他办公室窗外有一棵橡树。
1991年4月(硬件原型)
SPARC工作站10的架构师 Ed Fran k加入到绿色计划中,并领导硬件开发工作。该计划的目的是开发一个硬件原型,展示“绿色计划”的功能。该计划命名为star-seven(*7)。*7计划的成员有Craig Forrest、Al Frazier、Ed Frank、James Gosling、Patrick Naughton、Joe Parlang、JonPayn、 MikeSheridan和Chris Warth。
1991年6月(解释器)
James Gosling开发了Oak的解释器。
1992年3月(Java命名)
由于Oak已被用作另一种已存在的编程语言名称,因此必须选一个新的名字——它就是Java,灵感来源于咖啡。
1992年9月(Star-Seven原型)
Star-seven(7)带GUI的工作原型完成了,并向大家展示了其功能。与此同时绿计划也建立了一套新的语言、一个操作系统、一个硬件平台和一套接口。下面是如7原型的PDA样机,并由James Gosling亲自演示它。我推荐你完整观看整个视频,感受这来自1991-1992年的神奇。
1992年11月(FirstPerson)
Green计划被转化成了“FirstPerson有限公司”,并作为一个独立实体合并到Sun的子公司。
1993年2月(电视机顶盒)
FirstPerson试图从时代华纳获得一个电视机顶盒交互系统的一揽子订单。在那时,由于绿色计划不是很成功,随即失去了时代华纳的订单。于是开发的重心从家庭消费电子产品转到了电视盒机顶盒的相关平台上。
1993年9月(应用开发平台)
Arthur Van Hoff加入了开发组,他的工作是交互平台上的应用开发。
1994年6月(Liveoak计划)
实际上电视交互市场并没有给FirstPerson公司带来收益,最终它倒闭了。员工都合并到Sun公司。Liveoak计划启动了,它的目标是使用Oak语言设计出一个操作系统。
1994年7月(网络浏览器时代)
Patrick Naughton设计了一个Web浏览器,该浏览器内部使用Java。Liveoak计划进行了调整,使得Oak语言支持互联网。
1994年9月(HotJava)
Naughton和Jonatha Payne开始从事名为HotJava的以Java语言为基础的网页浏览器项目,该项目获得了管理层的广泛认可。
1994年10月(Java编译器)
由Van Hoff编写的Java编译器用于Java语言,之前的编译器由James Gosling使用C语言编写。
1995年5月(正式发布JDK Alpha and Beta)
在SunWorld大会,Sun公司正式介绍了Java和HotJava。
1995年5月23日
Sun公司发布了Java 1.0(Java Development Kit (Jave开发工具包) , JDK1.0)
1995年6月(Netscape支持)
一次重大突破——Netscape在它的浏览器中支持Java。
1995年9月(HotJava)
由Sun组织的第一次Java开发者大会在纽约召开。
1995年10月(Oracle支持)
Oracle在其将发布的WWW网页系统中包含了一个兼容的Java浏览器。
1995年12月(Microsoft支持)
更广泛行业接受的信号,Microsoft在其IE浏览器中支持Java。
1996年1月(1.0版本发布)
JDK1.0版本发布,这个版本为JDK1.0.2
1997年2月(1.1版本发布)
JDK1.1版本发布。主要特点是:
仅仅支持内省形式的反射,具体在java.beans包中实现
1998年12月(1.2版本发布)
JDK1.2版本发布,代号Playground。该版本通常被称为Java 2版本,是见证重大转变的最流行版本。主要特点是:
2000年5月(1.3版本发布)
JDK1.3版本发布,代号Kestrel。主要特点是:
2002年2月(1.4版本发布)
J2SE1.4版本发布,代号Merlin。主要特点是:
2004年9月(5.0版本发布)
J2SE5.0发布,代号Tiger。主要特点是:
2006年11月(Java/Jdk (半)公开源码)
Java宣布将会公开源码,引起了广泛争议。由于设计的证书违背了通常的源码开放条款。或许我们可以称其为半公开。
2006年12月(6.0版本发布)
Java SE 6版本发布,代号Mustang。主要特点是:
2010年1月(Oracle收购Sun)
Oracle收购Sun公司及其产品。现在Java由Oracle控制。
2010年10月(苹果不再支持Java)
Steve Jobs声称,苹果将来不再支持Java。请阅读James Gosling“关于Steve Jobs声明的评论”。
2011年7月(7.0版本发布)
Java SE 7.0版本发布,代号Dolphin。这个版本距上次发布有5年之久,并且只有这个版本花费了这么久。主要特点是:
2014年3月(8.0版本发布)
代号名字文化丢弃,主要特点是:
字节码
Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文 件),它不面向任何特定的处理器,只面向虚拟机。
采用字节码的好处
Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的 问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效, 而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可 在多种不同的计算机上运行。
java中的编译器和解释器
Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代 码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每 一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译 器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节 码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运 行,这就是上面提到的Java的特点的编译与解释并存的解释。
编译到运行的流程
Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中 解释器----->机器可执行的二进制机器码---->程序运行。
一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主 类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承自系统 类JApplet或Applet的子类。应用程序的主类不一定要求是public类,但小程序 的主类要求必须是public类。主类是Java程序执行的入口点。
简单说应用程序是从主线程启动(也就是main()方法)。applet小程序没有main 方法,主要是嵌在浏览器页面上运行(调用init()线程或者run()来启动),嵌入浏 览器这点跟flash的小游戏类似。
都是面向对象的语言,都支持封装、继承和多态 Java不提供指针来直接访问内存,程序内存更加安全
Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是 接口可以多继承。
Java有自动内存管理机制,不需要程序员手动释放无用内存