【西行】Java 编程语言简单介绍

简介: 【西行】Java 编程语言简单介绍


1、Java 发展史


Java 语言的诞生并不是精心策划、制作,最后产生出来的,因为当时的开发者并没有想创造出世界上


如此伟大的编程语言之一。


时间让我们回到 1990 年年末,当时并不是互联网发展的浪潮(全世界都是如此),各大公司争相推崇的是电器领域,那时候的生活我想还是基本的生活设施较为重要(如电视机,微波炉,电话)。


在各大公司中,Sun 就不得不说了(创造 Java 的公司),Sun 公司预料嵌入式系统将在未来智能电器领域大显身手,于是公司成立了一个由 James Gosling 领导的 “Green 计划”,为智能家电编写一个通用控制系统。


由于智能家电等设备的处理能力和内存都很有限,所以编程语言必须非常小且能够生产非常紧凑的代码。另外,由于不同的厂商选择不同中央处理器(CPU),因此这种语言的关键不是任何特定体系结构捆绑在一起,也正是有这些局限性的要求进而促使开发团队要设计一个高效可移植性的语言 Gosling 把它称为 “Oak”。


到了 1992 年夏天,Green 计划已经完成了新平台的部分功能,包括 GReen操作系统、Oak 的程序设计语言、类库等。同年 11 月,Green 计划被转化成 “FirstPerson 有限公司” ,一个 Sun 公司的全资子公司。


1992 年的时候 Green 项目发布了它的第一个产品,称之为 “*7” 。这个产品是具有非常智能的远程控制,但很遗憾,Sun 公司对这个产品并不感兴趣。后来直到 1994 年上半年也没有一个买家对其产生的产品有兴趣这也导致了 “FirstPerson 公司” 公司解散的命运。


而就在 1994 年的夏天在 Sun 公司以外,Internet 的万维网正在逐渐发展壮大。


Gosling 在第一时间,意识到这是一个机会,于是对 Oak 进行了小规模的改造,到了 1994 年秋,小组中的 Patrick Naughton 和 Jonathan Payne 完成了第一个 Java语言的网页浏览器:WebRunner。Sun公司高层在观看了浏览器的演示之后,对其给予了高度的评价,而当时 Oak 这个商标已经被人注册了,所以只能将 Oak 更名为 Java。


有了产品那自然是要让跟多的人知道它的强大,所以 Sun 公司在 1995 年年初发布了 Java语言,并直接把 Java 放到了互联网上,免费给大家使用。更疯狂的是连源码也不保密,一起放到了互联网上向所有人公开。


几个月后,让所有人都大吃一惊的事情发生了:Java 称为了互联网上最热门的宝贝。其 Java 语言的下载量竟然高达 10 万多次(想想那时候就有 10 万+)。然后,互联网上立即就有了数不清的 Java 小程序,掩饰着各种小动画、小游戏等。


此时,Java 语言终于是扬眉吐气,成为了一种广为人知的编程语言。


1995 年,Sun 虽然推出了 Java,但这只是一种语言,如果想要开发更为复杂的程序,那必须有一个强大的开发类库。因此,Sun 公司在 1996 年年初发布了 JDK 1.0 。这个版本包括两个部分:


  1. 运行环境(JRE)
  2. 开发环境(JDK)


运行环境包括核心 API 、集成 API、用户界面 API、发布计划、Java虚拟机(JVM)五个部分;


开发环境包括编译 Java 程序的编译器(既 javac 命令)。


1997 年 2 月 18 日 Sun 发布了 JDK1.1 。JDK1.1 增加了 JIT(即时编译)编译器,通过该功能让 JDK 在效率上有较大提升。


但是一直以来,Java 都没有准确的找到自己的一个准确定位,也没有找到它必须存在的理由,因为在 1996 年 Flash 面世了,这是一种更加简单的动画设计软件:使用 Flash 几乎无需任何编程知识,就可以做出丰富多彩的动画。随后 Flash 增加了 ActionScipt 编程脚本,Flash 逐渐蚕食了 Java在网页上的应用。


直到 1998 年 12 月,Sun 发布了 Java 历史上最重要的 JDK 版本:JDK1.2,伴随JDK1.2 同时发布的还有 JSP/Servlet、EJB 等规范,并将 Java 分成了 J2EE、J2SE 和 J2ME 三个版本。


  • J2ME:主要用于控制移动设备和信息家电等有限存储的设备。
  • J2SE:整个 Java 技术的核心和基础,它是 J2ME 和 J2EE 编程的基础。
  • J2EE:Java技术中应用最广泛的部分,J2EE 提供了企业应用开发的完整解决方案。


三个版本推出后,标志着 Java 已经吹响了向企业、桌面和移动 3 个领域进军的号角,Java 已经进入了 Java2 时代,这个时期也是 Java 飞速发展的时期。


2002 年 2 月,Sun 发布了 JDK 历史上最为成熟的版本:JDK1.4。此时由于 Compaq、Fujitsu、SAS、Symbian、IBM 等公司的参与,使 JDK1.4 称为发展版本最快的一个 JDK 版本。到 JDK1.4 为止,我们已经可以使用 Java 实现大多数的应用了。


与此同时,Java 语言在企业应用领域的发放异彩,涌现了大量基于 Java 语言开发的框架:Struts、WebWork、Hibernate、Spring 等;大量的企业应用服务器也开始涌现:WebLogic、WebSphere、JBoss等,这些都标志着 Java 语言的飞速发展时期。


2004 年 9 月, Sun 发布了万众期待的 JDK1.5,同时,Sun 将 JDK1.5 改名为 JavaSE5.0,J2EE、J2ME也相应改名为 JavaEE 和 JavaME 。


2006 年 12 月,Sun 公司发布了 JDK 1.6(也被称为 JavaSE 6)。往后 Sun 公司一直维持着大约 2 年发布一个新版本的习惯。


但在 2009 年 4 月 20 日,Oracle 宣布将以每股 9.5 美元的价格收购 Sun,该交易的总价值约为 74 亿美元。而 Oracle 通过收购 Sun 获得了两项软件资产:Java 和 Solaris(称比 Linux 更稳定的操作系统)。


于是曾经代表了一个时代的公司:Sun 终于是落幕了,“江湖” 再也不显 Sun 身影。


虽然 Sun 不在了,不过 Java 的大旗依然“猎猎”作响。2007 年 11 月,Google 宣布推出一款基于 Linux 平台的开源手机操作系统:Android。Android 的出现顺应了即将出现的移动互联网潮流,而且 Android 系统的用户体验非常好,因此讯处称为了手机操作系统的中间力量。Android 使用 Java 语言来开发应用程序,这也给了 Java 语言一个全新的机会。过去的岁月中,Java 语言作为服务端编程语言,已经取得了极大的成功;而 Android 平台的流行,则让 Java 语言获得了在客户端程序上大展拳脚的机会。


2011 年 7 月 28 日,Oracle 公司终于“如约”发布了 JavaSE 7 —这次版本升级经过了将近 5 年时间。Java SE 7 也是 Oracle 发布的第一个 Java 版本,虽然并未完全满足所有人的期望,不过它的发布,意味着 Java 能继续在它的赛道上继续驰骋。


Java 版本发布时间表:


image.png

image.png


注:LTS 表示的是长期稳定支持版本。


2、Java 程序运行机制


Java 语言是一种特殊的高级语言,它既具有解释型语言的特征,也具有编译型语言的特征,因为 Java 程序要经过先编译,后解释两个步骤。


2.1 高级语言的运行机制

计算机的语言按照程序的执行方式可以分为编译型和解释型两种。


编译型语言是指通过专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性“翻译”成可以被该平台执行的机器码,并包装成能被该平台识别执行程序的格式,这个转换过程称为编译。编译生成的可执行程序可以脱离开发环境,在特定的平台上独立运行。


编译型语言的运行效率较高,但它是被编译成特定平台的机器码,所以通常无法移植到其他平台上运行。现有的 C、C++、FORTRAN、Psscal 等高级语言都属于编译型语言。


解释型语言是指使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言。解释型语言通常不会进行整体性的编译和链接处理,解释型语言相当于把编译型语言中的编译和解释过程混合到了一起同时完成。


可以认为:没错执行解释型语言的程序都需要进行一次编译,因此解释型语言的程序运行效率通常较低,而且不能脱离解释器独立运行。但解释型语言有一个优势:跨平台比较容易,只需要提供特定平台的解释器即可,每个特定平台上的解释器负责将源程序解释称特定平台的机器指令即可。


解释型语言可以方便的实现源程序级的移植,但这些是以牺牲程序执行效率为代价。现有的 Ruby、Python 等语言都属于解释型语言。


2.2 Java程序的运行机制和 JVM

Java 语言比较特殊,由 Java 语言编写的程序需哟经过编译步骤,但这个编译步骤并不会生成特定平台的机器码,而是一种与平台无关的字节码(也就是 *.class 文件)。并且,这种字节码不是可执行的,必须使用 Java 解释器来解释执行。因此,我们可以认为:Java 语言即时编译型语言,也是解释型语言。或者说,Java 语言既不是存粹的编译型语言,也不是存粹的解释型语言。Java 程序的执行必须经过先编译,后解释两个步骤,如图。


image.png


Java 语言负责解释执行字节码文件的是 Java 虚拟机,既 JVM(Java Virtual Machine)。


JVM 是可以运行 Java 字节码文件的虚拟计算机,所有平台上的 JVM 向编译器提供相同的编程接口,而编译器只需要面向虚拟机,生成虚拟机能理解的代码,然后由虚拟机来解释执行。


当使用功能 Java 编译器编译 Java 程序时,生成的是与平台无关的字节码,这些字节码不面向任何具体平台,只面向 JVM 。不同平台上的 JVM 都是不同的,但它们都提供了相同的接口。JVM 是 Java 程序跨平台的关键部分,只要为不同平台时间了相应的虚拟机,编译后的 Java 字节码就可以在该平台上运行。


显然,相同的字节码程序需要在不同的平台上运行,这几乎是“不可能的”,只有通过中间转换器才可以实现,JVM 就是这个转换器。


JVM 是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器。


3、Java 语言的特性


从 Java 语言的设计者编写的“白皮书”中可以简要概括 Java 语言的 11 大特性,如下:


  1. 简单性
  2. 面向对象
  3. 分布式
  4. 健壮性
  5. 安全性
  6. 体系结构中立
  7. 可移植性
  8. 解释型
  9. 高性能
  10. 多线程
  11. 动态性


3.1 简单性

在设计 Java 的时候,尽管人们发现 C++ 不太适用,但还是尽可能的接近它,以便系统更易于理解。Java 剔除了 C++ 中许多很少使用、难以理解、易混淆的特性。所以 Java 语法也可以说是一个纯净版 C++ 语法。


Java 语法没有文件头、指针运算(指针语法)、结构、联合、操作符重载、虚基类等。


3.2 面向对象

简单地讲,面向对象设计是一种程序设计技术。它将重点放在数据(既对象)和对象的接口上。


用木匠打个比方,一个“面向对象的”木匠始终关注的是所制作的椅子,第二位才是所使用的工具;一个“非面向对象的”木匠首先考虑的是所用的工具。


Java 语言在设计时面向对象技术已经相当成熟。Java 的面向对象特性与 C++ 旗鼓相当,Java 与 C++ 的主要不同点在于多重继承,在 Java 中,取而代之的是更简单的接口概念。


3.3 分布式

Java 有一个丰富的例程库,用于处理像 HTTP 和 FTP 之类的 TCP/IP协议。Java 应用程序能够通过 URL 打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。


3.4 健壮性

Java 的设计目标之一在于使得 Java 编写的程序具有多方面可靠性。


Java 投入了大量的精力进行早期的问题检测、后期动态的(运行时)检测,并消除了容易出错的情况等。


Java 和 C++ 最大的不同在于 Java 采用的指针模型可以消除重写内存和损坏数据的可能。


3.5 安全性

Java 适用于网络 / 分布式环境,为了达到这个目的,在安全方面也是投入了很大精力。


使用 Java 可以构建防病毒、防篡改的系统。


Java 的设计能够防范攻击包括:


  • 运行时堆栈溢出。如蠕虫和病毒常用的攻击手段。
  • 破坏自己的进程空间之外的内存
  • 未经授权读写文件


3.6 体系结构中立

编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码, 只要有 Java 运行时系统, 这些编译后的代码可以在许多处理器上运行。


Java 编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。 精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以动态地翻译成本地机器代码。


3.7 可移植性

与 C 和 C++ 不同,Java 规范中没有“ 依赖具体实现” 的地方。基本教据类型的大小以及有关运算都做了明确的说明。


例如,Java 中的 int 永远是 32 位的整数,而在 C/C++ 中,int可能是 16 位整数、32 位整数,也可能是编译器提供商指定的大小。


在 Java 中,数据类型具有固定大小,这消除了代码移植时令人头痛的主要问题。二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串是用标准的 Unicode 格式存储。


3.8 解释型

Java 解释器可以在任何移植了解释器的机器上执行 Java 字节码。


3.9 高性能

尽管对解释后的字节码性能已经比较满意,但在有些场合下还是需要更加高效的性能。字节码可以(在运行时刻)动态地翻译成对应运行这个应用的特定 CPU 的机器码。


3.10 多线程

多线程可以带来更好的交互响应和实时行为。


Java 在当时很超前。它是第一个支持并发程序设计的主流语言。那时,多核处理器是非常神秘的,而 Web 编程才刚刚起步,处理器要花很长时间等待服务器响应,需要并发程序设计来确保用户界面不会“冻住”。


而并发程序设计并非易事,不过 Java 在这方面表现出色,可以很好的管理这个工作。


3.11 动态性

从各种角度看,Java 与 C 或 C++ 相比更加具有动态性。它能够适应不断发展的环境。库中可以自由的添加新方法和实例变量,而对客户端却没有任何影响。在 Java 中找出运行时类型信息十分简单。


好了,今天的内容到这里就结束了,关注我,我们下期见

目录
相关文章
|
15天前
|
设计模式 安全 Java
Java编程中的单例模式:理解与实践
【10月更文挑战第31天】在Java的世界里,单例模式是一种优雅的解决方案,它确保一个类只有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的实现方式、使用场景及其优缺点,同时提供代码示例以加深理解。无论你是Java新手还是有经验的开发者,掌握单例模式都将是你技能库中的宝贵财富。
24 2
|
5天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
11天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
18天前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
79 5
|
13天前
|
安全 Java 编译器
JDK 10中的局部变量类型推断:Java编程的简化与革新
JDK 10引入的局部变量类型推断通过`var`关键字简化了代码编写,提高了可读性。编译器根据初始化表达式自动推断变量类型,减少了冗长的类型声明。虽然带来了诸多优点,但也有一些限制,如只能用于局部变量声明,并需立即初始化。这一特性使Java更接近动态类型语言,增强了灵活性和易用性。
95 53
|
4天前
|
Java 开发者
Java多线程编程的艺术与实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的技术文档,本文以实战为导向,通过生动的实例和详尽的代码解析,引领读者领略多线程编程的魅力,掌握其在提升应用性能、优化资源利用方面的关键作用。无论你是Java初学者还是有一定经验的开发者,本文都将为你打开多线程编程的新视角。 ####
|
3天前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
6天前
|
安全 Java 开发者
Java多线程编程中的常见问题与解决方案
本文深入探讨了Java多线程编程中常见的问题,包括线程安全问题、死锁、竞态条件等,并提供了相应的解决策略。文章首先介绍了多线程的基础知识,随后详细分析了每个问题的产生原因和典型场景,最后提出了实用的解决方案,旨在帮助开发者提高多线程程序的稳定性和性能。
|
12天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####
|
9天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
下一篇
无影云桌面