0
点赞
收藏
分享

微信扫一扫

JAVA基础(一)------ Java简介(版本、可移植、JRE、JDK、编译过程、PATH和CLASSPATH的区别)

要说java相关的背景,那有一大堆,哪个公司开发的、什么时候开发的、谁开发的、为什么叫java,jdk1.0啥时候发布的.......... 

说起这些背景知识,知道当然好,没事和圈子里的朋友哈哈牛皮挺不错的,这个专栏就不介绍了,咱捞干的来整理,嘿嘿!

 

1、JavaEE、JavaSE和JavaMe

java按照功能用途区分,可分为3个版本:

1. Java SE(Java Platform,Standard Edition)

Java SE是基础包,标准版。(前称J2SE)

2. java ee(Java Platform,Enterprise Edition)。

        Java EE 是在 Java SE 的基础上构建的,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)

和 Web 2.0 应用程序。(前称 J2EE)

3. Java ME(Java Platform,Micro Edition)。

Java ME 为在移动设备和嵌入式设备(如手机、PDA、电视盒)上运行的应用程序提供一个健壮且灵活的环境。(前称  J2ME)

2、Java为什么是可移植的?

先要弄清楚JDK\ JRE\ JVM三者之间的概念及关系。

  • JDK  (Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。

在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类

库,而jvm和 lib合起来就称为jre。

  • JRE(Java Runtime Environment,Java运行环境)

包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,不包含任何开发工具(如编译器和调试器)

  • JVM(Java Virtual Machine,Java虚拟机)

JVM是解释java字节码的模拟器,XXX.java源码编译后产生的XXX.class文件将在JVM上解释执行。
 

关系图如下:

JAVA基础(一)------ Java简介(版本、可移植、JRE、JDK、编译过程、PATH和CLASSPATH的区别)_字节码

上图可知,三者之间的包含关系是:JDK>>JRE>>JVM。

这里java能实现可移植性的关键就是因为存在JVM。XXX.java源码编译后产生的XXX.class文件不管在什么操作系统下,只要这个

系统下安装了兼容该系统的JVM,那么这个.class文件就能被这个JVM解释执行。

实际上,DOS、windows、Unix等操作系统都已经有对应版本的JVM,因此我们不需要太关心在windows下写好的java程序移植到

其他操作系统还能不能执行的问题,只要移植的操作系统也有JVM就可以。JVM与各操作系统的关系图如下:


JAVA基础(一)------ Java简介(版本、可移植、JRE、JDK、编译过程、PATH和CLASSPATH的区别)_字节码_02

可移植

 

这里还要插一句,Java程序不是直接在操作系统上运行的,而是通过JVM执行,因此执行效率不高,但随着硬件的不断进步,这

点影响也渐渐不再是问题可以忽略,但JVM作为载体,JVM调优依然是需要大家不断研究的方面。

3、java代码编译执行过程

这里先有个大概的过程,然后再细致地探究,这个大概的过程就是:XXX.java文件要经过编译器编译成XXX.class文件,再经JVM解释执行。

JAVA基础(一)------ Java简介(版本、可移植、JRE、JDK、编译过程、PATH和CLASSPATH的区别)_java程序_03

下面具体再说明一下JVM的类加载过程,JVM整个类加载过程的步骤如下:

1.       装载

装载过程负责找到二进制字节码并加载至JVM中,采用类名+包名+ClassLoader实例ID来标识一个被加载了的类,并加载。

2.       链接(校验)

链接过程负责对二进制字节码的格式进行校验、初始化装载类中的静态变量以及解析类中调用的接口、类。完成校验后,JVM初

始化类中的静态变量,并将其值赋为默认值。最后对类中的所有属性、方法进行验证,以确保其需要调用的属性、方法存在,以

及具备应的权限(例如public、private域权限等),会造成NoSuchMethodError、NoSuchFieldError等错误信息。

3.       初始化

初始化过程即为执行类中的静态初始化代码、构造器代码以及静态属性的初始化。
 

综合以上过程,整个java程序运行过程如下:

JAVA基础(一)------ Java简介(版本、可移植、JRE、JDK、编译过程、PATH和CLASSPATH的区别)_java程序_04

 

4、PATH和CLASSPATH的区别

PATH是定义操作系统下所有可执行程序的路径;

CLASSPATH是由JRE提供的,用于定义java程序解释时类加载的路径,换句话说就是.class文件的位置,JVM通过CLASSPATH定义的路径找到.class字节码文件来解释执行。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


举报

相关推荐

0 条评论