什么是Java,Java语言简介
1990 年年底,Sun 公司成立了名为 Green 的项目组,专攻计算机在家电产品上的嵌入式应用,Games Gosling(被称为Java 之父)为该项目组的负责人。
Green 项目组最初考虑采用 C++ 编写应用程序,但是 C++ 过于复杂和庞大,并且安全性差,缺少垃圾回收机制。因此,Green 项目组设计并开发了一种以 C++ 为基础的新的面向对象编程语言——Oak(橡树)。这个名字来源于 Green 项目组办公室窗外的一棵橡树。
但是,Oak 已经被另一家公司注册为商标,因此,Green 项目组不得不考虑一个新的名字。有一天,Green 项目组的几位成员正在咖啡馆喝 Java(印度尼西亚爪哇岛的英文名称,此地因盛产咖啡而闻名)咖啡,其中一位成员灵机一动说就叫 Java 怎么样?其他成员欣然同意,于是将 Oak 更名为 Java,一杯热气腾腾的咖啡图案成了 Java 的商标。
Sun 公司将 Java 定位为互联网应用开发。为了推动 Java 的发展,Sun 公司决定对 Java 采用免费提供的方法,因此 Java 是开源免费的语言。
20 世纪 90 年代使用 C++ 的开发者很多,所以 Java 的设计风格与 C++ 的设计风格类似,但是摒弃了 C++ 中难以理解且容易引发程序错误的内容,如指针、内存管理、运算符重载和多重继承等。
需要注意的是,Java 不使用指针,使用的是引用,并且提供了自动的垃圾回收机制,因此,程序员不必为内存管理而担忧。
Java 提供了类、接口和继承等原语,支持类之间的单重继承、接口之间的多重继承,以及类与接口之间的实现机制(采用关键字 implements 说明)。
Java 程序可以凭借 URL 打开并访问网络中的对象,其访问方式与访问本地文件系统几乎完全相同。
任何种类的计算机,只要可以运行 Java 虚拟机,字节码文件就可以在该计算机上运行,从而实现程序运行效率和不同操作系统之间可移植性的完美结合。
Java 不提供指针,从而杜绝开发者对指针的误操作,如内存分配错误、内存泄漏等造成系统崩溃的可能性。
在内存管理方面,C/C++ 等采用手动分配和释放,经常导致内存泄漏,进而导致系统崩溃。而 Java 采用自动的内存垃圾回收机制,程序员不需要管理内存,这样可以减少内存错误的发生,提高程序的健壮性。
在底层运行机制方面:
在 API 层面,Java 提供了大量与安全有关的应用程序接口(Application Program Interface,API)、工具,以及常用安全算法、机制和协议的实现。
因此,开发者可以专注于如何将安全性集成到应用程序中,而不是如何实现复杂的安全机制。
当使用 C/C++ 编译时,将函数库或类库中被使用的函数、类同时生成机器码;当类库升级之后,程序必须重新修改和编译才能使用新类库提供的功能。
Oracle 公司根据 Java 的应用领域不同将其分成 3 个平台,分别为 Java SE、Java EE 和 Java ME。
如果只运行 Java 程序,不考虑开发 Java 程序,那么只安装 JRE 就可以。JRE 中包含运行 Java 程序所需要的 Java 虚拟机(Java 虚拟机是运行 Java 程序的核心虚拟机),而运行 Java 程序除了需要核心虚拟机,还需要其他的类加载器、字节码校验器及大量的基础类库。JRE 中不仅包含 Java 虚拟机,还包含运行 Java 程序的其他环境支持。JDK 中包含 JRE 和一些开发工具,这些开发工具包括编译器、文档生成器和文件打包等。
Java SE 提供了开发 Java 程序所需的基本的和核心的类库,如字符串、集合、输入/输出、网络通信和图形用户界面等。
Java EE 以 Java SE 为基础,提供了一套服务、API 接口和协议,主要包括 JSP、Servlet、EJB、JNDI 和 Java Mail 等,能够用来开发企业级分布式系统、Web 应用程序和业务组件等。
Java ME 在早期的诺基亚塞班系统中应用广泛。随着移动开发平台的普及,Java ME 渐渐没有了用武之地。
图 1 Java虚拟机跨平台的原理
如上图所示,不同软件和硬件平台的 Java 虚拟机是不同的,Java 虚拟机向下面对的是不同设备的操作系统和 CPU,在使用或开发时需要下载不同的 JRE 或 JDK。
Java 虚拟机向上面对的是 Java 程序,为 Java 程序屏蔽不同的软件和硬件平台,使 Java 程序不需要修改和重新编译即可直接在其他平台上运行,具有“一次编译,随处运行”的特性。
Green 项目组最初考虑采用 C++ 编写应用程序,但是 C++ 过于复杂和庞大,并且安全性差,缺少垃圾回收机制。因此,Green 项目组设计并开发了一种以 C++ 为基础的新的面向对象编程语言——Oak(橡树)。这个名字来源于 Green 项目组办公室窗外的一棵橡树。
但是,Oak 已经被另一家公司注册为商标,因此,Green 项目组不得不考虑一个新的名字。有一天,Green 项目组的几位成员正在咖啡馆喝 Java(印度尼西亚爪哇岛的英文名称,此地因盛产咖啡而闻名)咖啡,其中一位成员灵机一动说就叫 Java 怎么样?其他成员欣然同意,于是将 Oak 更名为 Java,一杯热气腾腾的咖啡图案成了 Java 的商标。
Sun 公司将 Java 定位为互联网应用开发。为了推动 Java 的发展,Sun 公司决定对 Java 采用免费提供的方法,因此 Java 是开源免费的语言。
Java的特点
Java 是一门优秀的编程语言。Java 之所以能够流行起来,应用广泛,并且长盛不衰,是因为它有很多突出的特点,其中最主要的特点如下。1) 使用简单
Java 的设计目标之一就是能够方便学习,使用简单。20 世纪 90 年代使用 C++ 的开发者很多,所以 Java 的设计风格与 C++ 的设计风格类似,但是摒弃了 C++ 中难以理解且容易引发程序错误的内容,如指针、内存管理、运算符重载和多重继承等。
需要注意的是,Java 不使用指针,使用的是引用,并且提供了自动的垃圾回收机制,因此,程序员不必为内存管理而担忧。
2) 面向对象
面向对象是 Java 最重要的特性。在 Java 中可以理解为“一切都是对象”,面向对象的程序的核心是由类和对象组成的,通过类和对象描述实现事物之间的联系。这种方法符合人们的思维习惯,并且容易扩充和维护,因此提高了程序的可重用性。Java 提供了类、接口和继承等原语,支持类之间的单重继承、接口之间的多重继承,以及类与接口之间的实现机制(采用关键字 implements 说明)。
3) 分布式
Java 是分布式语言。JDK(Java Development Kits,Java 开发工具包)中包含基于 TCP/IP 协议的类库,可以轻松实现分布式应用系统,进行分布式计算。Java 程序可以凭借 URL 打开并访问网络中的对象,其访问方式与访问本地文件系统几乎完全相同。
4) 平台无关性和可移植性
Java 采用解释与编译相结合的方式,Java 源程序文件(.java)先被编译成与机器结构(CPU 和操作系统)无关的字节码文件(*.class),再由 Java 虚拟机解释执行。任何种类的计算机,只要可以运行 Java 虚拟机,字节码文件就可以在该计算机上运行,从而实现程序运行效率和不同操作系统之间可移植性的完美结合。
5) 健壮性
健壮性是指程序运行的稳定性。Java 在编译和运行的过程中会进行比较严格的检查,以减少错误的发生。Java 不提供指针,从而杜绝开发者对指针的误操作,如内存分配错误、内存泄漏等造成系统崩溃的可能性。
在内存管理方面,C/C++ 等采用手动分配和释放,经常导致内存泄漏,进而导致系统崩溃。而 Java 采用自动的内存垃圾回收机制,程序员不需要管理内存,这样可以减少内存错误的发生,提高程序的健壮性。
6) 安全性
Java 的安全性体现在两个层面,即 Java 的底层运行机制和 Java 提供的安全类 API。在底层运行机制方面:
- Java 没有提供指针机制,避免了指针机制可能带来的各类安全问题;
- Java 通过类型安全设计和自动的垃圾回收机制来提高程序代码的健壮性;
- Java提供了安全的类加载和验证机制,确保只执行合法的 Java 代码。
在 API 层面,Java 提供了大量与安全有关的应用程序接口(Application Program Interface,API)、工具,以及常用安全算法、机制和协议的实现。
因此,开发者可以专注于如何将安全性集成到应用程序中,而不是如何实现复杂的安全机制。
7) 支持多线程
Java 是原生支持多线程编程的。采用多线程机制可以并发处理多个任务,并且互不干涉,不会由于某一任务处于等待状态而影响其他任务的执行,这对于网络编程来说可以轻松实现网络中的实时交互操作,提高程序的执行效率。8) 动态
Java 程序在运行过程中可以动态地加载各种类库,即使更新类库也不必重新编译使用这个类库的应用程序。这个特点使其非常适合在网络环境下运行,并且有利于软件的开发。当使用 C/C++ 编译时,将函数库或类库中被使用的函数、类同时生成机器码;当类库升级之后,程序必须重新修改和编译才能使用新类库提供的功能。
9) 异常处理
Java 采用面向对象的异常处理机制,使正常代码和错误处理代码分开,这样程序的业务逻辑更加清晰明了,并且能够简化错误处理任务。Java技术三大平台
Java 不仅是一门编程语言,还是一个开发平台。目前主流的 Java 应用包括桌面级应用、Web 企业级应用和移动端应用。Oracle 公司根据 Java 的应用领域不同将其分成 3 个平台,分别为 Java SE、Java EE 和 Java ME。
Java SE
Java SE 主要为开发台式机和工作站桌面应用(Application)程序提供解决方案。Java SE 是其他平台的基础。Java SE 中主要包含 JRE(Java SE Runtime Environment,Java SE 运行时环境)、JDK 和 Java 核心类库。如果只运行 Java 程序,不考虑开发 Java 程序,那么只安装 JRE 就可以。JRE 中包含运行 Java 程序所需要的 Java 虚拟机(Java 虚拟机是运行 Java 程序的核心虚拟机),而运行 Java 程序除了需要核心虚拟机,还需要其他的类加载器、字节码校验器及大量的基础类库。JRE 中不仅包含 Java 虚拟机,还包含运行 Java 程序的其他环境支持。JDK 中包含 JRE 和一些开发工具,这些开发工具包括编译器、文档生成器和文件打包等。
Java SE 提供了开发 Java 程序所需的基本的和核心的类库,如字符串、集合、输入/输出、网络通信和图形用户界面等。
Java EE
Java EE 主要用来构建大规模基于 Web 的企业级应用和分布式网络应用程序。使用 Java EE 开发的程序具有可移植性、健壮性和可伸缩性,并且安全性高。Java EE 以 Java SE 为基础,提供了一套服务、API 接口和协议,主要包括 JSP、Servlet、EJB、JNDI 和 Java Mail 等,能够用来开发企业级分布式系统、Web 应用程序和业务组件等。
Java ME
Java ME 主要面向消费类电子产品,广泛应用于手机、机顶盒、掌上电脑等移动或嵌入式设备上运行的应用程序的开发。Java ME 在早期的诺基亚塞班系统中应用广泛。随着移动开发平台的普及,Java ME 渐渐没有了用武之地。
Java虚拟机
Java 的跨平台性主要是通过 Java 虚拟机实现的。字节码经过 Java 虚拟机转化成特定平台架构的机器码,从而实现 Java 的跨平台性。图 1 Java虚拟机跨平台的原理
如上图所示,不同软件和硬件平台的 Java 虚拟机是不同的,Java 虚拟机向下面对的是不同设备的操作系统和 CPU,在使用或开发时需要下载不同的 JRE 或 JDK。
Java 虚拟机向上面对的是 Java 程序,为 Java 程序屏蔽不同的软件和硬件平台,使 Java 程序不需要修改和重新编译即可直接在其他平台上运行,具有“一次编译,随处运行”的特性。