Java概述

Java是概述


1. Java的前世今生

1.1 Java简介

Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。

1.2 Java之父

Java语言的创建人:[加拿大]詹姆斯·高斯林(James Gosling )
Java之父国Gosling,内戏称“高司令”,也含有敬称之意。

1.3 关于Java的名称

  • Java的乳名
    Java是由编程语言Oak(橡树)改名而来;因此,Oak也可以算作Java的乳名。
  • Java的名称含义
    Java,即爪哇(与印尼的爪哇岛也算有丝半缕的关系,但关系不大)
  • Java与JavaScript的关系
    确切地说,Java和JavaScript没有半毛钱关系。(只有名称的来源上有一点点关系)
    JavaScript作为Web前端的一门脚本(script)编程语言,当初刚诞生不久,是因为Java太火,相趁其一点热度取了这么个名字,有点搭便车的味道。

1.4 性质(归类)

在计算机编程语言的世界中,就语言性质而言,Java的分类归属如下:

  • 低级与高级 :机器语言[×]、汇编语言[×]、高级语言[√]
    说明:Java属于第三代编程语言,是非常著名的一门现代高级编程语言,其封装性强、具有面向对象等特征,与C语言相比,相对机器更为抽象。
  • 通用与脚本:脚本语言[×]、通用语言[√]
    说明:Java是通用性的编程语言,而非脚本性质或领域专属性质的编程语言。如PHP则属于脚本语言
  • 过程与对象:面向过程编程语言[×]、面向对象编程语言[√]
    说明:Java是典型的面向对象语言,相对于C++,Java的面向对象程序更彻底
  • 系统与应用:系统编程语言[×]、应用编程语言[√]
    Java主要用于编写各种应用程序/软件,而不编写操作系统。
  • 静态与动态:静态语言[√]、动态语言[×]
    说明:Java程序需要先使用“编译器”静态编译(成字节码),然后才能(在JVM虚拟机)运行。与PHP、Python等运行时——通过解释器来动态解释执行——即边解释边执行的语言相比,Java则属于静态语言。
  • 编译与解释:编译型语言[√]、解释型语言[×]
    说明:同上
  • 强类与弱类:强类型语言[√]、弱类型语言[×]
    说明:Java的变量,需要先声明,后使用

1.5 Java在编程语言江湖中的地位

TIOBE 世界编程语言排行榜中,Java长期一来高居榜首,过十来年历年处于第一名的位置,可以称得上是编程语言江湖中的大哥大了。

参考网址1 - 百度百科:世界编程语言排行榜(https://baike.baidu.com/item/世界编程语言排行榜/1600318?fr=aladdin)
参考网址2 - TIOBE官网:https://www.tiobe.com/tiobe-index/

1.6 Java编程语言的体系

Java编程由三个大的板块组成:

  • 标准版本:Java SE(Java Standard Edition),曾用名:J2SE
  • 企业版本:Java EE(Java Enterpriser Edition),曾用名:J2EE
  • 微型版本:Java ME(Java Micro Edition),曾用名:J2ME

定位:
Java SE:主要面向桌面应用开发
Java EE:主要面向企业级Web应用开发
Java ME:主要面向嵌入式程序开发

1.7 Java(SE)-JDK的历史版本及特性

已发行的版本
版本号 ————名称 —————— 中文名 —————— 发布日期
JDK 1.1.4 ——Sparkler ———— 宝石—— —— —— 1997-09-12
JDK 1.1.5 ——Pumpkin—— —— 南瓜 —— —— —— 1997-12-13
JDK 1.1.6 ——Abigail —— —— 阿比盖尔–女子名 —— 1998-04-24
JDK 1.1.7 —— Brutus —— —— 布鲁图–古罗马政治家和将军
JDK 1.1.8 —— Chelsea —— —— 切尔西–城市名 —— 1999-04-08
J2SE 1.2 —— Playground ———— 运动场 —— —— 1998-12-04
J2SE 1.2.1 —— none —— ———— 无 ———— —— 1999-03-30
J2SE 1.2.2 —— Cricket ———— 蟋蟀 —— —— —— 1999-07-08
J2SE 1.3 —— Kestrel —— —— 美洲红隼—— —— —— 2000-05-08
J2SE 1.3.1 —— Ladybird ———— 瓢虫 —— —— —— 2001-05-17
J2SE 1.4.0 —— Merlin —— —— 灰背隼 ———— —— 2002-02-13
J2SE 1.4.1 —— grasshopper —— 蚱蜢 —— —— —— 2002-09-16
J2SE 1.4.2 —— Mantis —— —— 螳螂 —— —— —— 2003-06-26
J2SE 5.0 (1.5.0) —— Tiger —— —— 老虎
J2SE 5.1 (1.5.1) —— Dragonfly —— 蜻蜓

参考网址1:JDK版本变迁历史及代号
https://blog.csdn.net/djsl6073/article/details/83129515
参考网址2:jdk(SunMicrosystems针对Java开发员的产品)>历史版本
https://baike.baidu.com/historylist/jdk/1011#page1
参考网址3:JDK版本变迁史(详细)
https://blog.csdn.net/damin112/article/details/84634041
参考网址4:JDK发展历史以及版本特性(概略)
https://blog.csdn.net/phoenix_smf/article/details/79709592
参考网址5:获取jdk的历史版本
https://blog.csdn.net/weixin_37885641/article/details/80342415

2. Java的特性(或 主要特点)

  • 跨平台性
    》 Java程序运行在Java虚拟机(JVM)中,借助JVM,Java语言编写的程序可以运行各种操作系统上,成功实现了跨平台性,具有“一次编程,到处运行”特点。
  • 安全可靠
    》 Java语言是强类型语言,要求变量必须定义之后才能使用,一旦一个变量被指定了某种数据类型,如果不强制转换,那么它永远是该数据类型。这样Java可以在编译时进行检查语法是否正确。
    》 Java取消了强大而又危险的指针,指针可以直接操作内存,这是十分危险的,很可能导致程序崩溃。Java取消了指针,增加了引用类型的概念,用来代替指针。
    》 Java的解释型特性,字节码加载进虚拟机后,解释器会对每行指令进行检查。
    》 Java有异常处理机制,程序员可以把某些可能出现错误的代码,进行异常检查。
  • 完全面向对象
    》 Java语言支持封装、继承、多态,面对对象编程,让程序的耦合度更低,内聚性更高。每一个模块执行自身的功能,和不干扰通过公开的接口互相联系。
  • 多线程
    》 进程是操作系统中分配内存资源的最小单位,每一个进程可以同时拥有两个或更多的线程,让它们并发执行。它提供了Rannable接口和他的实现类Thread,并提供了大量的方法来控制线程的运行,以及线程的同步控制。
  • 性能良好
    》Java是编译型(切确地说是伪编译)语言,并使用了两种手段使其性能很好:
    ——1)在java语言源程序编写,java编译器用于伪伪编译,并将其转换成中间代码(也被称为字节码),然后解释。
    ——2)提供准实时(即时、JIT)编译器。当需要更快的速度时,JIT编译器可以用来将字节码转换成机器代码,然后缓冲它,这样速度就更快了。
  • 适合分布性计算
    》 java语言有一个强大的,易于使用的网络能力,这是非常适合于分布式计算程序。java应用程序可以访问的URL远程对象作为他们访问本地文件系统。
    》 在java语言编写的Socket通信程序非常简单,这是简单的使用比其他任何语言。它也非常适合开发公共网关接口(CGI)脚本。此外,它还可以使用java小应用程序(Applet),java服务器页面(java服务器页面,JSP,Servlet等)来构建丰富的网页。
  • 简洁高效、简单易用
    》java语言是一个非常简洁的“面向对象”的程序设计语言。java语言省略所有难以理解和困惑的特点在C++语言,如头文件、指针、结构、单元、运算符重载、虚拟基础类,等它更简洁严谨。
    》Java源代码的书写不拘泥于特定的环境,可以用记事本、文本编辑器等编辑软件来实现,然后将源文件进行编译,编译通过后可直接运行,通过调试则可得到想要的结果。

3. Java程序的运行

3.1 Java程序的运行原理

》 在Java中引入了虚拟机(JVM,Java Virtual Machine)的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。虚拟机在任何平台上都提供给编译程序一个的共同的接口。
》 编译程序只需要面向虚拟机,生成虚拟机能够理解的字节码(ByteCode)(class文件的内容),然后由解释器来将虚拟机代码转换为特定系统的机器码执行,每一种平台的解释器是不同的,但是实现的虚拟机是相同的。
》 Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。

java编译器 (编译) → 虚拟机(解释执行) → 解释器(翻译) → 机器码

3.2 Java程序的运行过程

从这个框图很容易大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘当中。然后你在命令行中输入

javac YourClassName.java

此时,你的java代码就被编译成字节码(.class)。如果你是在Eclipse IDE或者其他开发工具中,你保存代码的时候,开发工具已经帮你完成了上述的编译工作,因此你可以在对应的目录下看到class文件。此时的class文件依然是保存在硬盘中。

当你在命令行中运行

java YourClassName

此时,JRE的类加载器从硬盘中读取class文件,载入到系统分配给JVM的内存区域–运行数据区(Runtime Data Areas)。然后执行引擎解释或者编译类文件,转化成特定CPU的机器码,CPU执行机器码,至此完成整个过程。

示例:

(1)创建Java程序文件:Test.java

在这里插入图片描述
(2)编译(Test.java->Test.class)和执行(Test.class)
在这里插入图片描述

3.3 环境变量

【Path】

在JDK的安装路径下,我们很容易发现bin文件下的javac、java命令——分别用于执行【编译】和【解释】的操作。配置path环境变量便可实现直接找到这两个命令并运行。

【ClassPath】

而classpath变量,通过后来的学习得知,在jdk1.5以上版本便可以不用配置。首先要知道java源程序通过编译生成的class文件,默认会存储到JRE文件下,也就是java运行环境路径下,在1.5之前的jdk还没智能到可以自动找到编译好的类,进行下一步解释操作,故需要手动配置classpath,指明class文件路径,在执行java命令形成可执行文件。

【JavaHome】

另一个javahome再单独运行java程序时是不需要进行配置的,因为编译、解释均已通过javac 和java命令完成。但在tomcat、jboss部署时需要配置该环境变量。

示例:

在:计算机–>属性–>高级系统设置–>高级–>环境变量–>系统变量里

(1) 新建一个环境变量名为:JAVA_HOME
变量值:D:\Users\Michael\Apps\Java\jdk1.8.0_172
即一堆命令所在的目录bin的父目录

(2) 新建一个环境变量名为:
CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

(3) 找到系统变量里的path(路径): 追加值。
追加的内容如下:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;


检查是否配置成功:
打开命令提示符界面(windows+R):cmd
输入两个命令:java -version 回车
在这里插入图片描述

3.4 术语:JDK、JRE、JVM三者间的关系

在这里插入图片描述

Java概念/原理-说明图
参考网址:javaSE8官方文档(https://docs.oracle.com/javase/8/docs/)

JDK:Java开发套件(或Java开发工具箱)
JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。

=> JDK = JRE + tools & tools API
也即 JDK = JRE + Java工具 + Java基础类库(API)

(切确地说:【1】Java工具,即指JDK安装的bin/目录下的那些.exe执行文件;【2】Java基础类库,即指Java工具运行所依赖的类库,位于JDK安装的lib/目录下)

(1)JRE:参见下面“JRE:Java运行时环境”部分
(2)Java工具:即Java开发工具,包括编译器、调试器、javadoc等
Java开发工具 = 基本工具 + 安全性工具 + 国际化工具 +RMI工具(即远程方法调用工具)+ Java IDL and RMI-IIOP工具 + 部署工具 + Java Web工具 + Java问题分析,监控,管理工具 +web service工具(即web服务工具)+监控工具+问题分析工具+脚本工具
参考:JDK自带Tools(https://blog.csdn.net/u011499747/article/details/51057447)


**-----------------------------【Java基本工具介绍】-----------------------------** - **javac:** java编译器(英文说明:The compiler for the Java programming language.) - **java:** java应用启动器(英文说明:The launcher for Java applications. In this release, a single launcher is used both for development and deployment.The old deployment launcher, jre, is no longer provided) - **javadoc:** API文档生成器(英文说明:API documentation generator.) - **jdb:** java调试器(英文说明:The Java Debugger.) - **jar:** 新建和管理Java用jar文件的工具(英文说明:Create and manage Java Archive (JAR) files.See Java Archive Files page for the JAR specification.) - **其它(略)**

(3)基础类库API:Java工具运行所依赖的API接口(即lib/目录下的一堆类库)

JRE:Java运行时环境
Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。

=> JRE = JVM + Java核心类库(API)

JVM:Java虚拟机
JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。

JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品。
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。

  • SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
  • EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
  • ME(J2ME),micro edition,微型版,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。

在这里插入图片描述
参考:JDK与JRE结构图解(https://blog.csdn.net/qq_16811963/article/details/52578381)

JDK目录详细

参见:
JDK的目录结构及结构图(https://www.cnblogs.com/lcword/p/5857905.html)
JDK基础概念及目录结构(https://www.jianshu.com/p/f98c3acd8df8)

Java官方教程

参见:JDK8
Java Platform Standard Edition 8 Documentation(https://docs.oracle.com/javase/8/docs/)
Java™ Programming Language(https://docs.oracle.com/javase/8/docs/technotes/guides/language/index.html)
The Java™ Tutorials (https://docs.oracle.com/javase/tutorial/index.html)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值