01. 【Java教程】Java 简介

简介: 01. 【Java教程】Java 简介

1. Java 的历史

1995 年 5 月 23 日,Sun Microsystems 公司宣布 Java 语言诞生, 当时使用 Java 的总人数还不到 30 人,可能包括 Java 语言之父詹姆斯·高斯林在内的大多数联合创始人都无法预想,Java 在未来的二十年间,居然会给互联网乃至我们的生活带来如此深远的影响。


目前 Java 提供以下三个版本:


Java Platform, Enterprise Edition(Java EE:Java 平台企业版);


Java Platform, Standard Edition(Java SE:Java 平台标准版);


Java Platform, Micro Edition(Java ME:Java 平台微型版)。


2006 年,SUN 公司在 JavaOne 大会上,宣布在 GNU 通用公共协议(GPL)的构架下向开源世界贡献 Java 平台,这次开放的 Java 版本包括了其标准版(Standard)、微型版(Micro)以及企业版(Enterprise)。这是一个具有 “历史性意义” 的改变。

2. 语言特性

Java 语言的诞生,重新定义了面向对象编程(OOP)。Java 语言的创建之初,就定下了以下几个目标:

  • 简单易学,并且面向对象;
  • 必须健壮且安全;
  • 摆脱平台的依赖性;
  • 高性能执行;
  • 必须是可解释的,多线程的,动态的。

2.1 面向对象

面向对象(Object Oriented)指的是一种编程方法。面向对象的主要思想是:围绕着我们所操纵的 “事物”(即对象)来设计软件。 计算机硬件的发展为软件技术的发展提供了更好的土壤,为了让大型软件项目易于管理,降低开发和维护的成本,面向对象技术也就应运而生。为了了解面向对象技术的诞生原因,我们下面来介绍几种比较具有代表性的软件技术。

2.1.1 汇编语言

汇编语言是软件技术的开端,这种语言与机器语言非常接近,并且可以很容易地转换为可执行代码。使用汇编语言的程序员,必须了解计算机的详细体系结构才能编写程序。

2.1.2 程序语言

在汇编语言之后,开发了高级语言,可以使用语言的编译器(如 gcc)将高级程序代码转换为机器指令。这样程序员无需再深入了解计算机硬件的体系结构。为了提高代码的可复用性并最大程度地减少 GOTO 指令的使用,引入了面向过程技术。虽然简化了软件流程控制的创建和维护,但是忽视了数据的组织。调试和维护许多全局变量的程序,变成了程序员的一场噩梦。

2.1.3 面向对象语言

在面向对象的语言中,数据被抽象地封装在对象中。特定于对象中的数据只能通过该对象来进行访问。这样,程序就成为了对象之间的一系列交互。Java 语言就是一个纯面向对象的语言。

2.2 跨平台性

我们也许常常听到一句口号 ——“一次编译,到处执行(write once, run anywhere.)”,这里说的就是 Java 的跨平台性,我们首先来看下在 cc++ 中,代码是如何在不同平台运行的:

在 c 或 c++ 中,我们首先要将源代码文件编译为机器代码文件,然后再去执行它。这个过程中,机器代码文件必须在为其编译的平台才能执行(这里的平台指的是 Windows、Linux、Mac OS 等),也就是说,我们的代码如果希望在多个平台执行,那就必须多次编译程序。这不仅给程序员带来了繁琐的开发步骤(代码稍做变更就要重新编译整个程序),也给程序带来了更大的漏洞风险。当代码已经编译为可执行文件时,这个可执行文件不能动态更改,此时需要更改代码重新编译,以替换旧的可执行文件。


我们来看看 Java 是如何做的吧:


Java 的思想是,将代码编译为中间语言,中间语言是字节码,解释器是 Java 虚拟机(JVM)。字节码文件可以通用,JVM 是特定于平台的。如下图所示:


每一个平台都需要一个 JVM ,这里 JVM 是实现 “到处执行” 的关键前提,所以,在 Java 中,我们只需要生成一个字节码文件,就可以保证我们编写的程序在任何平台都能运行了。



2.3 标准化

Java 中,提供了大量的标准化库,这保证了我们使用统一的接口对程序进行控制。

2.4 异常处理

异常处理的老方式是:让每个函数返回一个错误代码,调用者会检查其返回的内容,这样就导致了代码中到处都是错误码的校验,从而让源码变得难以阅读。


在异常处理的新方式中,函数或方法不再返回错误码,而是以抛出异常的方式来进行异常处理,在 Java 中可以使用 catch 关键字来捕获在 try 语句块中所发生的异常。这样我们无需频繁通过定义错误代码的方式处理异常,代码可读性大大提高。

2.5 动态类加载

在 Java 中,如果在执行阶段不需要某个类,那么这个类就不会被编译为字节码。在网络编程中,这个特性非常常用。当我们不知道将执行什么代码时,程序可以从文件系统或远端服务器加载类。

2.6 自动垃圾回收机制

在常规语言(例如 C 和 C++)中,程序员必须确保已分配的内存被释放。防止造成内存泄漏的麻烦。


内存资源或缓冲区具有特定的操作模式以获得最佳性能。一旦缓冲区中充满了数据,就需要在不再使用其内容之后将其清除。如果程序员忘记清除其代码中的内容,则内存很容易过载。Java 使用自动垃圾收集器来管理对象生命周期中的内存。程序员确定何时创建对象,一旦不再使用对象,Java 运行时将负责恢复内存。一旦没有了对对象的引用,则垃圾回收器将自动释放无法访问的内存。


自动垃圾回收机制,让使用 Java 编写的代码更加健壮,降低了内存泄漏和溢出的风险。程序员唯一需要注意的是对象创建的速度。如果应用程序创建对象的速度超过了垃圾收集器释放对象的速度,则可能导致内存相关问题。

3. Java 的版本历史

Java 的主要发行版本及其发行日期如下:


JDK 1.0(1996 年 1 月 23 日)


JDK 1.1(1996 年 2 月 19 日)


J2SE 1.2(1998 年 12 月 8 日)


J2SE 1.3(2000 年 5 月 8 日)


J2SE 1.4(2002 年 2 月 6 日)


J2SE 5.0(2004 年 9 月 30 日)


Java SE 6(2006 年 12 月 11 日)


Java SE 7(2011 年 7 月 28 日)


Java SE 8(2014 年 3 月 18 日)


Java SE 9(2017 年 9 月 21 日)


Java SE 10(2018 年 3 月 20 日)


Java SE 11(2018 年 9 月 25 日)


Java SE 12(2019 年 3 月 19 日)


Java SE 13(2019 年 9 月 17 日)


Java SE 14(2020 年 3 月 17 日)


Java SE 15(2020 年 9 月 15 日)


Java SE 16(2021 年 3 月 16 日)



4. 名词解释

我们将在后续详细介绍如何在不同平台上安装 Java,在安装 Java 之前,我们需要理解两个名词,JDK 和 JRE:

JRE:Java Runtime Environment (Java 运行时环境)


JDK:Java Development Kit (Java 开发工具包)


以上两个名词是 Java 平台的两大重要软件,他们分别可以帮助用户运行和开发 Java 程序,JDK 是 JRE 的超集,包含 JRE 的所有内容,以及开发小程序和应用程序所需的工具,例如编译器和调试器。


简单来说,我们如果想要利用 Java 语言去开发应用程序,就要在我们的电脑上安装 JDK。本教程使用最新版本的 Java 16。

5. 学习基础

学习本教程,最好有一定的计算机基础知识,熟悉计算机软件的下载、安装等。当然,如果你没有任何基础知识也不必担心,本教程会尽量使用通俗易懂的语言来讲解知识点。

6. 小结

在大多数人看来,Java 语言已经非常完美,但是,Java 语言并非没有缺陷,Java 语言缺少硬件特定的数据类型,也没有能够指向任意地址的指针或编程方法之类的功能。尽管这些功能有可能被程序员误用或滥用,但不得不承认它们是强大的工具。

在本节中,我们对 Java 语言的历史以及主要特性有了一个初步的了解,小伙伴们是不是已经迫不及待,要更加深入了解 Java 了呢?那么在下一小节,我们将了解如何在自己的电脑上安装 Java。

相关文章
|
2月前
|
Java 开发者 UED
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
40 3
|
14天前
|
Java API
Java时间戳教程
本文详细介绍Java中时间戳的处理方法,包括获取当前时间戳、使用`java.time`包、时间戳与日期的相互转换及格式化等。示例代码展示了如何利用`System.currentTimeMillis()`和`java.time.Instant`获取时间戳,以及如何通过`Date`和`ZonedDateTime`进行日期转换和时区处理。随着Java 8引入的`java.time`包,日期时间操作变得更加强大和便捷,推荐在新项目中优先采用。
|
2月前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
71 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
2月前
|
Java 开发者
Java多线程教程:使用ReentrantLock实现高级锁功能
Java多线程教程:使用ReentrantLock实现高级锁功能
34 1
|
2月前
|
存储 网络协议 Oracle
java教程
java教程【8月更文挑战第11天】
25 5
|
3月前
|
SQL 安全 Java
「滚雪球学Java」教程导航帖(更新2024.07.16)
《滚雪球学Spring Boot》是一个面向初学者的Spring Boot教程,旨在帮助读者快速入门Spring Boot开发。本专通过深入浅出的方式,将Spring Boot开发中的核心概念、基础知识、实战技巧等内容系统地讲解,同时还提供了大量实际的案例,让读者能够快速掌握实用的Spring Boot开发技能。本书的特点在于注重实践,通过实例学习的方式激发读者的学习兴趣和动力,并引导读者逐步掌握Spring Boot开发的实际应用。
73 1
「滚雪球学Java」教程导航帖(更新2024.07.16)
|
2月前
|
Java API
Java与Lua互相调用简单教程
【8月更文挑战第29天】在软件开发中,Java以其强大的稳定性和广泛的生态系统著称,而Lua则因其轻量级、灵活和嵌入式的特点在脚本编写、游戏开发等领域大放异彩。将两者结合使用,可以充分利用Java的底层能力和Lua的快速开发优势。本文将通过一个简单的教程,介绍如何在Java程序中嵌入并执行Lua脚本,以及如何在Lua中调用Java方法。
27 0
|
2月前
|
并行计算 Java 程序员
Java中的Lambda表达式和函数式编程简介
【8月更文挑战第1天】Lambda表达式,在Java 8中引入,为Java程序员提供了一种简洁、灵活的编写代码的方式。本文将通过实例介绍Lambda表达式及其在函数式编程中的应用,并展示如何利用这些特性简化代码和提高开发效率。
21 2
WXM
|
3月前
|
Oracle Java 关系型数据库
Java JDK下载安装及环境配置超详细图文教程
Java JDK下载安装及环境配置超详细图文教程
WXM
334 3
|
3月前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
76 2
下一篇
无影云桌面