Java001 了解JRE、JDK以及JDK版本

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010425839/article/details/52025887

注:内容收集自网络

JRE

百度知道 https://baike.baidu.com/item/JRE/2902404?fr=aladdin

JRE(Java Runtime Environment)即Java运行环境,是运行Java程序时必须具备的,是面向Java程序使用用户的。是Sun的产品。运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。注意由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行 Applet,务必安装一个JRE或JDK。JRE包括两部分:Java Runtime Environment和Java Plug-in。JRE是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机(jvm)、Java核心类库和支持文件。它不包含开发工具(JDK)--编译器、调试器和其它工具。JRE需要辅助软件--Java Plug-in--以便在浏览器中运行applet。Java Plug-in软件允许Java Applet和JavaBean组件在使用Sun的Java Runtime Environment(JRE)的浏览器中运行,而不是在使用缺省的Java运行环境的浏览器中运行。Java Plug-in可用于Netscape Navigator和Microsoft Internet Explorer。J2RE是Java2 Runtime Environment,即Java运行环境,只是强调其匹配Java2平台,有时简称JRE。如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发 Java软件,请下载JDK(JRE和JDK的区别)。JDK中附带有JRE。版本管理:Java的版本管理解决办法是每个程序自己携带一套JRE。比如说某人的机器上已经被安装了好多套JRE和JDK(JDK包括了同版本的JRE,此外还包括有编译器和其它工具),它们分别是:BEAWeblogic Server 7.0 自带一套 JDK1.3.1_02, 还下载了一套最新的JDK1.4.1_02、JBuilder9自带一套JDK1.4.1_02、Oracle8.1.7自带一套JRE1.1.7、RationRose自带一套JDK1.3、DreamWeaver自带一套JDK1.3,6套JRE,每套JRE都被各自安装到不同的目录,不会互相影响。当在控制台执行java.exe,操作系统寻找JRE的方式如下:先找当前目录下有没有JRE,再找父目录下有没有JRE,接着在PATH路径中找JRE。注册表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ 查看CurrentVersion的键值指向哪个JRE。最常用的是在PATH路径中找JRE,一般情况下,自己的程序运行之前都会先在批处理文件里面临时设置PATH,把自己用的JRE放到PATH路径最前面,所以肯定会运行自己带的JRE,不会造成版本混乱。

基础类库:JRE自带的基础类库主要是JRE\lib\rt.jar这个文件,包括了Java2平台标准版的所有类库。和JRE的版本一致。

查找方法:JRE中由ClassLoader负责查找和加载程序引用到的类库,基础类库ClassLoader会到rt.jar中自动加载,其它的类库,ClassLoader在环境变量CLASSPATH指定的路径中搜索,按照先来先到的原则,放在CLASSPATH前面的类库先被搜到,Java程序启动之前建议先把PATH和CLASSPATH环境变量设好,OS通过PATH来找JRE,确定基础类库rt.jar的位置,JRE的ClassLoader通过CLASSPATH找其它类库。但有时候会出现这样的情况,希望替换基础类库中的类库,那么也可以简单的通过-Djava.endrosed.path=...参数传递给java.exe,于是ClassLoader会先于基础类库使用java.endrosed.path参数指定路径的类库。因此Java的版本管理是非常简单有效的,也许很原始,不过很好用,简单就不容易出错。(所以我很奇怪Eric Ramond为什么批评Java的类库管理机制,他还居然批评Java的接口,令人怀疑他对Java的了解程度)

JDK

百度知道 https://baike.baidu.com/item/jdk/1011?fr=aladdin

JDK(Java Development Kit)即Java开发工具包,是Java的核心,是面向Java程序开发人员的。并且,JDK中包含了JRE。JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。SE(JavaSE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。EE(JavaEE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。从2018年2月26日开始,J2EE改名为Jakarta EE [1-2]  。ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。以下是各版本的名称及发布日期:

版本

名称

发行日期

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(布鲁图–古罗马政治家和将军)

1998-09-28

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

Java SE 5.0 (1.5.0)

Tiger(老虎)

2004-09-30

Java SE 6.0 (1.6.0)

Mustang(野马)

2006-04

Java SE 7.0 (1.7.0)

Dolphin(海豚)

2011-07-28

Java SE 8.0 (1.8.0)

Spider(蜘蛛)

2014-03-18

Java SE 9   2017-09-21
Java SE 10   2018-03-14

jdk各个版本的特性

1997 年Servlet技术的产生以及紧接着JSP的产生,为Java对抗PHP,ASP等等服务器端语言带来了筹码。1998年,Sun发布了EJB1.0标准,至此J2EE平台的三个核心技术都已经出现。于是,1999年,Sun正式发布了J2EE的第一个版本。并于1999年底发布了J2EE1.2,在 2001年发布了J2EE1.3,2003年发布了J2EE1.4。

2.J2EE1.3 J2EE1.3的架构,其中主要包含了Applet容器,Application Client容器,Web容器和EJB容器,并且包含了Web Component,EJB Component,Application Client Component,以JMS,JAAS,JAXP,JDBC,JAF,JavaMail,JTA等等技术做为基础。 1.3中引入了几个值得注意的功能:Java消息服务(定义了JMS的一组API),J2EE连接器技术(定义了扩展J2EE服务到非J2EE应用程序的标准),XML解析器的一组Java API,Servlet2.3,JSP1.2也都进行了性能扩展与优化,全新的CMP组件模型和MDB(消息Bean)。

3.J2EE1.4 J2EE1.4 大体上的框架和J2EE1.3是一致的,1.4增加了对Web服务的支持,主要是Web Service,JAX-RPC,SAAJ,JAXR,还对EJB的消息传递机制进行了完善(EJB2.1),部署与管理工具的增强(JMX),以及新版本的Servlet2.4和JSP2.0使得Web应用更加容易。

4.JAVA EE 5

JAVA EE 5拥有许多值得关注的特性。其中之一就是新的 Java Standard Tag Library (JSTL) 1.2 规范。JSTL 1.2 的关键是统一表达式语言,它允许我们在 JavaServer Faces (JSF) 中结合使用 JSTL 的最佳特性。

jdk1.8新特性

  1. Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。

  2. 新增lambda表达式

  3. 提供函数式接口

  4. Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用

  5. 我们可以直接在lambda表达式中访问外层的局部变量。

组成编辑

JDK包含的基本组件包括:

javac – 编译器,将源程序转成字节码

jar – 打包工具,将相关的类文件打包成一个文件

javadoc – 文档生成器,从源码注释中提取文档

jdb – debugger,查错工具

java – 运行编译后的java程序(.class后缀的)

appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。

Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。

Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。

Jconsole: Java进行系统调试和监控的工具

jdk结构图

分类

java.lang: 这个是系统的基础类,比如String等都是这里面的,这个包是唯一一个可以不用引入(import)就可以使用的包。

java.io: 这里面是所有输入输出有关的类,比如文件操作等。

java.nio:为了完善io包中的功能,提高io包中性能而写的一个新包 ,例如NIO非堵塞应用

java.net: 这里面是与网络有关的类,比如URL,URLConnection等。

java.util: 这个是系统辅助类,特别是集合类Collection,List,Map等。

java.sql: 这个是数据库操作的类,Connection, Statement,ResultSet等。

javax.servlet:这个是JSP,Servlet等使用到的类。

环境配置

在Windows下

java运行环境安装与测试及HelloWorld的实现。

1.下载j2sdk 1.6.0_21或更高版本 (http://java.sun .com,建议同时下载其Java Documentation,这是Java帮助文档)。

2.运行刚刚下载的安装程序进行正式安装(以下假设安装于c:\jdk1.6.0_21\,建议安装路径不要有空格,不宜安装在\Program Files目录下!)。

3.设置运行环境参数:

a.如果是Win95、Win98,在\autoexec.bat的最后面添加如下3行语句:

set JAVA_HOME=JDK安装目录

set PATH=%JAVA_HOME%\bin;%PATH%

set CLASSPATH=.;%JAVA_HOME%\lib

注意:---可用dos命令notepad c:\autoexec.bat打开记事本,加入上面的3行语句。

b.如果是Win2000、WinXP系统,使用鼠标右击“我的电脑”->属性->高级->环境变量

系统变量->新建->变量名:JAVA_HOME 变量值:JDK安装目录

系统变量->新建->变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib

系统变量->编辑->变量名:Path 在变量值的最前面加上:%JAVA_HOME%\bin;

c.如果是Vista、Win7、Win8系统,使用鼠标右击“计算机”->属性->左侧高级系统设置->高级->环境变量

系统变量->新建->变量名:JAVA_HOME 变量值:JDK安装目录

系统变量->新建->变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib

系统变量->编辑->变量名:Path 在变量值的最前面加上:%JAVA_HOME%\bin;

(CLASSPATH中有一英文句号“.”后跟一个分号,表示当前路径的意思)

(使用命令行的方法设置环境变量,只会对当前窗口生效)

(改Path变量时,不是删除原有的值而是添加新的路径)

4.使用文本编辑器(比如:edit .com/记事本/UltraEdit/EditPlus)编写如下代码,并保存为文件:HelloWorld.java(必须大小写正确!假设为c:\test\HelloWorld.java)

/* HelloWorld.java */

public class HelloWorld{

  public static void main(String[] arg){

    System.out.println("Hello,World!");

  }

}

5.开启一个命令提示符窗口,跳转到HelloWorld.java所在的目录中

c:\>cd \test

6.编译HelloWorld.java为HelloWorld.class

c:\test>javac HelloWorld.java

7.运行HelloWorld.class

c:\test>java HelloWorld

Hello,World!

其中步骤5~7可以简化成批处理,这样可以不用切换路径,方法如下:

在java源文件所在文件夹建立一个记事本文档,输入以下3行代码

javac HelloWorld.java

java HelloWorld

@pause

将其保存为"Java运行批处理.bat"

然后双击这个批处理文件,将出现cmd窗口下的编译运行结果,结果如下:

C:\test>javac HelloWorld.java

C:\test>java HelloWorld

Hello,World!

请按任意键继续. . .

在LINUX下

UbuntuLinux下jdk的安装与配置

1.安装

从sun公司网站www.sun .com下载linux版本的jdk

打开终端,用cd命令进入jdk所在目录,执行复制命令

sudo cp jdk-6u7-linux-i586.bin /usr

(使用cp命令复制,由于是在usr目录下,应该是要有管理员权限才能复制。所以可以在命令行前面加上sudo)

即将jdk复制到/usr目录下

然后进入/usr目录

cd /usr

执行权限

chmod +x jdk-6u7-linux-i586.bin

执行安装命令

./jdk-6u21-linux-i586.bin

(文件名)

如遇错误,可先切换至root用户下,su root,再执行安装命令

安装成功会在/usr目录下生成jdk1.6.0_07目录,就是jdk的安装目录

重启电脑,打开终端,输入java -version

如若有显示java的版本信息,则表示安装成功,

2.配置

安装成功后需要配置jdk环境变量

用cd命令进入/etc目录

sudo vi profile

即执行编辑profile文件命令

在umas k022前添加如下内容:

export JAVA_HOME=/usr/jdk1.6.0_21

export JRE_HOME=/usr/jdk1.6.0_21/jre

export PATH=$PATH:/usr/jdk1.6.0_21/bin

export CLASSPATH=./:/usr/jdk1.6.0_21/lib:/usr/jdk1.6.0_21/jre/lib

保存退出,重启电脑

3.测试

新建Test.java

public class Test{

public static void main(String[] args){

System.out.println("Hello,Welcome to Linux World!");

}

}

在终端用cd命令进入Test.java目录,然后输入

javac Test.java

java Test

若输出

Hello,Welcome to Linux World!

则表明配置成功!

如不能通过编译,可通过重新启动系统试试

4.注意

在用vi命令编辑profile文件时,Linux初学者可能还不熟用

sudo vi profile进入编辑文件后如出现

Press ENTER or type command to continue

则按回车

然后按方向键“下”直到umas k022前一行

按字母o进入编辑状态

输入环境变量内容

回车,按几次ESC键,直到听到"嘀"声,输入

:x

回车

即保存退出

至此,Linux jdk环境变量配置完成

如果安装完成时候在终端输入:java -version 不显示当前的安装版本的话

则需要卸载原先的版本即可。

yum -y remove <java版本>

例如:centos 版本

[root@localhost /]# yum -y remove java-1.4.2-gcj-compat 卸载它。

[root@localhost soft]# chmod 700 jdk-1_5_0_13-linux-i586.bin

[root@localhost soft]# ./jdk-1_5_0_13-linux-i586.bin

[root@localhost soft]# mv jdk1.5.0_13/ /usr/local/

为了方便以后升级,建立软链接

[root@localhost local]# ln -s /usr/local/jdk1.5.0_13/ /usr/local/jdk

定义环境变量

[root@localhost local]# vi /etc/profile

export JAVA_HOME=/usr/local/jdk
  export PATH=$PATH:$JAVA_HOME/bin
  export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

ok,至此java环境配置完毕

jdk常用基本工具

  1. Javac: Java源程序编译器,将Java源代码转换成字节码。
      2. Java: Java解释器,直接从字节码文件,又称为类文件.执行Java应用程序的字
      节代码。
      3. appletviewer.exe Java applet浏览器。appletviewer命令可在脱离万维网浏览器
      环境的情况下运行applet
      4. jar: java应用程序打包工具,可将多个类文件合并为单个JAR归档文件。
      5.Javadoc: Java API文档生成器从Java源程序代码注释中提取文档,生成API文
      档HTML页。
      6. jdb: Java调试器(debugger),可以逐行执行程序.设置断点和检查变Md

7.jps: 查看Java虚拟机进程列表 [6] 

Java(甲骨文公司)

Java平台
Java 编程语言 JVM Java ME Java SE
Java EE Java Card    
 
升阳电脑主要技术
Squawk JDK OpenJDK Java Virtual Machine
JavaFX      
 
平台技术
Applet Servlets MIDlets JSP
Web Start (jnlp)      
 
主要的第三方技术
JRockit GNU Classpath Kaffe TopLink
Apache Harmony Struts Spring Framework Hibernate
JBoss Tapestry Jazelle  
 
历史
历史 批评 Java Community Process 升阳电脑
Free Java implementations      
 
主要编程语言
Tcl/Java Jython JRuby BeanShell
Clojure Groovy Rhino Scala
Processing      
 
Java会议
JavaOne

JDK版本

java -version

  • Jrockit JDK来自Weblogic BEA 被Oracle收购
  • Hotspot JDK来自Sun 被Oracle收购
  • openjdk7 是Sun JDK 7的一个分支,并且尽量去除Java SE7的新特性,使其尽量的符合Java6的标准,openjdk只包含最精简的JDK,允许商用
  • IBM JDK
  • 淘宝JDK

摘自简书 https://www.jianshu.com/p/b79424afb761

在过去,Sun JDK 实现,也就是被 Oracle 收购之后的 Oracle JDK 实现,就是 JDK 的参考实现,有兴趣的厂商或组织也可以根据 JSR 自行实现产品,例如 IBM 就是根据 JSR 实现了自家的 IBM JDK 。只有通过 TCK 兼容性测试的实现,才可以使用 Java 这个商标。

IBM JDK:http://www.ibm.com/developerworks/java/jdk/

2006 年的 JavaOne 大会上,Sun 宣告对 Java 开放源代码,从 JDK7 b10 开始有了 OpenJDK,并于 2009 年 4 月 15 日正式发布 OpenJDK。Oracle 时代发布的 JDK7 正式版本,指定了 OpenJDK7 为官方参考实现。

1. Oracle JDK7 与 OpenJDK7

与同为开放源代码的 Sun JDK 不同的是,Sun JDK 采用 JRL,而 OpenJDK7 采用 GPL (带有 GPL linking exception 的修正版本)

  • JRL : 源代码可用于个人研究使用,但禁止任何商业用途
  • GPL :允许商业上的使用

因此,OpenJDK7 必须删掉许多在两个授权间有冲突的程序代码,也不包括一些部署 ( Deployment ) 工具 (例如 Java Web Start 等) 以及软件套件 (例如 Java DB) 等;现在你在 Java Platform,Standard Edition 7 Reference Implementations (或Java Platform,Standard Edition 8 Reference Implementations)下载 RI 时,也会看到有基于 GNU General Public License version 2 与 Oracle Binary Code License 两个授权的版本。

Java Platform, Standard Edition 7 Reference Implementations:
https://jdk7.java.net/java-se-7-ri/
Java Platform, Standard Edition 8 Reference Implementations:
https://jdk8.java.net/java-se-8-ri/

由于 OpenJDK7 中有许多程序代码因授权冲突而必须删掉,因此原始的 OpenJDK7 是不完整的,因此无法通过 TCK 兼容测试,如果执行 java -version,原始的 OpenJDK7 显示的会是 openjdk version 字样,而不是 java version 字样。

为了解决授权问题,以便在 Fedora 或 Linux 分支中能自由发布 OpenJDK7,Red Hat 于 2007 年发起了 IcedTea 计划,而由于原始的 OpenJDK7 是不完整的,后来 IcedTea 致力于修补 OpenJDK7 使之完备,并通过了 TCK 兼容测试,如果使用 IcedTea 修补过后的 OpenJDK7,执行 java -version,就会显示 java version 字样。

2. Open JDK7 与 OpenJDK6

在 OpenJDK 官方网站,也可以看到 OpenJDK6 的版本,OpenJDK6 并不是 Sun JDK6 的分支,而是将 OpenJDK7 中 JDK7 的特性删掉,使之符合 JDK6 的规范,因而 OpenJDK6 实际上是 OpenJDK7 的分支,OpenJDK6 可以通过 TCK 兼容测试。

Oracle 从 2012 年 7 月以来,就打算结束对 JDK6 的支持,在 2013 年 2 月时宣布 JDK6 Update 43 时,宣布这是最后一个免费更新版本(实际上后来还有 Update 45 ),希望大家赶快升级至 JDK7。

由于 JDK6 在企业间仍广泛应用,Red Hat 于 2013 年 3 月时宣布持有 OpenJDK6 领导权,以能持续对 OpenJDK6 发现的漏洞与安全问题进行修补。

JDK和OpenJDK的区别

摘自百度知道 https://zhidao.baidu.com/question/1048621530086451499.html

关于JDK和OpenJDK的区别,可以归纳为以下几点:

授权协议的不同:
openjdk采用GPL V2协议放出,而JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL
V2允许在商业上使用,而JRL只允许个人研究使用。
OpenJDK不包含Deployment(部署)功能:
部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,这些功能在Openjdk中是找不到的。
OpenJDK源代码不完整:
这个很容易想到,在采用GPL协议的Openjdk中,sun jdk的一部分源代码因为产权的问题无法开放openjdk使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码。因此这些不能开放的源代码
将它作成plug,以供OpenJDK编译时使用,你也可以选择不要使用plug。而Icedtea则为这些不完整的部分开发了相同功能的源代码 (OpenJDK6),促使OpenJDK更加完整。
部分源代码用开源代码替换:
由于产权的问题,很多产权不是SUN的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用Free
Type代替。
openjdk只包含最精简的JDK:
OpenJDK不包含其他的软件包,比如Rhino Java DB JAXP……,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。
不能使用Java商标:
这个很容易理解,在安装openjdk的机器上,输入“java -version”显示的是openjdk,但是如果是使用Icedtea补丁的openjdk,显示的是java。(未验证)



猜你喜欢

转载自blog.csdn.net/u010425839/article/details/52025887