历史(建议了解即可)
一、1990年,美国Sun公司的“Stealth计划”(后改名为“Green计划”)目标设置在家用电器等小型系统的程序语言,准备应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信
二、1996年5月23日,JDK1.0开始发行(前期Java的版本只有两个)
三、2005年6月,Java One大会中,J2SE正式更名为JavaSE(其余二者也更名)
版本 | 应用场景 | 支持操作 | 特性 |
JavaSE | 开发和部署在桌面、服务器、嵌入式环境、实时环境 | 支持Javaweb服务开发的类 | 为JavaEE,JavaME提供基础,其中包含Java的核心应用编程接口API(Application Programming Interface) |
JavaEE | 开发和部署在服务器端Java应用程序 | 可以实现企业级的面向服务体系结构(SOA)、web2.0应用程序 | 提供web服务、组件模型、管理和通信API |
JavaME | 为移动设备、嵌入式设备(手机、PDA、电视机顶盒、打印机)上运行的应用程序提供环境 | 其中包括用户界面、安全模型、内置的网络协议、对动态下载的连网和离线应用程序的丰富支持 |
四、2009年4月20日,Oracle(甲骨文)公司以74亿美元价格收购Sun公司
详细:Java(计算机编程语言)_百度百科 (baidu.com)
API + JVM = JRE + 开发工具 = JDK (建议后期深入学习时学习更深层的内容)
一、Java应用的运行环境下会执行的代码安全性检查机制
1、加载代码:类加载器
2、检查代码:字节码检验器
(1)4遍检查后未出现报错后保护
- 类符合JVM规范的类文件格式
- 无访问限制违例
- 代码未引起操作栈上溢或下溢
- 所有操作代码的参数类型将总是正确
- 无非法数据转换发生
- 对象域访问是合法的
3、执行代码:运行时的解释器(采用沙箱模式:Java程序的的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存外的内存(Applet程序:还不允许程序访问客户端机器的文件系统
JVM
Java Virtual Machine:Java虚拟机,即软件模拟的计算机
包含Java编译器(Javac.exe)和Java解释器(Java.exe)(Java解释器只是一个基于JVM平台的程序,不能单独执行,必须依赖于JVM)
一、包含及生成
1、本身具有的机器码:部分常用的代码,是CPU可直接解读的数据,保存在.class文件中
2、字节码文件(扩展名为.class的文件):Java源码经过编译器编译后产生的文件
(1)在一定程度上解决了解释性语言执行效率低的问题,又保留了解释性语言可移植的特点
(2)Java程序运行高效的原因:“一次编译,多次运行”,即可以在任何具有JVM的计算机或者电子设备上运行(不同的平台有适合自己平台的虚拟机)
3、字节码:与平台无关的二进制码,不面向特定的处理器,只面向虚拟机
(1)机器码与字节码加载的前后顺序:先编译器将Java源码编译成字节码,后解释器将字节码转译为机器码(本文JVM三中有详解)
二、解释器
1、编译与解释并存的解释(Java的特点之一):
(1)运行过程
- Java源文件经编译器编译后形成JVM可运行的字节码文件
- 运行解释器将JVM上运行的字节码解释为具体平台的机器码,就可以运行该Java源文件形成的程序
(2)可移植性:由运行过程可知任何一台终端只要配备了Java解释器,就可以跨平台运行这个程序,不管这种字节码是在何种平台上生成的
2、执行操作:.Java(源文件)—编译—>.class(字节码文件)
JRE
Java Runtime Environment:Java运行环境,即运行Java程序所必须的环境的集合
包含JVM标准实现、Java核心类库(API)及支持文件,不包含开发工具(编译器、调试器等)
JDK
Java Development Kit:Java程序开发的工具包,是整个Java的核心,即Java的SDK
Java Software Development Kit:Java软件开发包,是厂商提供的集成封装的库(library),辅助开发Java及其相关软件的相关文档、范例和工具的集合
可以认为JDK是SDK的一个子集(JDK是开发Java程序的一个平台,开发其他程序的SDK可以不使用JDK)
包括了Java的开发环境和运行环境(JRE)以及一堆Java工具(tools.jar等)和Java基础的类库(rt.jar等)等
区别 | 联系 | |
JDK | 开发工具包,用来开发Java程序,是面对Java的程序开发人员 | 参考Java源文件的编译和执行过程 |
JER | 运行环境,面向的是Java程序的使用者(也就是说,要使用Java开发程序,则必须安装JDK,只想运行Java程序,那只需安装JRE |
一、安装后的目录结构:
1、JDK安装目录及其子目录分析
(1)如:JDK根目录为:C:/Program Files/java/jdk1.6.0_16(下面以jdk代替)
介绍相关目录:
- jdk:jdk根目录,包含版权、许可及 README 文件以及Java核心平台API的源文件归档(src.zip)
- —jdk/bin:jdk开发工具可执行文件目录,里面包含有Javac.exe(编译器)、Java.exe等可执行程序
- —jdk/lib:jdk开发工具使用的类库目录,主要包括tools.jar和dt.jar
- —jdk/Jre:jdk开发工具所使用的Java运行时环境的根目录,除了文档外,它与可部署的JRE完全相同
- —jdk/demo:jdk自带的一些例子,含有源代码的程序示例
- —jdk/include:c的头文件,用与支持native-code库使用JVM Debugger接口
- —jdk/src.zip:jdk所提供的的类库的源代码文件
注:tar.exe(打包器)
(2)jdk/jre/下的一些子目录:
- jdk/jre/:Java运行环境存放目录
- —jdk/jre/bin:jre执行文件及DLL库,可执行文件与jdk/bin相同,不必将该目录放在PATH环境变量中
- —jdk/jre/bin/client:Java client VM and DLL
- —jdk/jre/bin/server:Java servlet VM and DLL
- —jdk/jre/lib: Java程序运行时环境使用的代码库、属性设置和资源文件,主要包括:
- * rt.jar:系统引导库(构成Java平台核心API的RunTime 类)
- * charsets.jar:字符转换类及其它与国际化和本地化有关的类
- —jdk/jre/lib/ext:Java平台扩展类库的缺省安装目录,如JavaHelp jar 就可以放在此目录下
- —jdk/jre/lib/security:包含用于安全管理的文件,这些文件包括安全策略 (Java.policy) 和安全属性 (Java.security) 文件
- —jdk/jre/lib/applet:对applet支持的一些资源文件
- —jdk/jre/lib/fonts:TrueType 字体文件
3、Java目录中存在两个Jre目录以及三个lib目录
(1)、两个Jre目录,分别为:
- C:/Program Files/java/jre6:可部署的JRE,执行Java程序
- C:/Program Files/java/jdk1.6.0_16/jre:JDK中自带并使用的JRE,开发Java程序
总体来说,两个JRE文件夹内容基本相同,区别主要体现在工作职责上,也就是不同的JRE负责不同的工作范围
如:使用Javac.exe来编译Java程序时,系统会优先使用jdk/bin下的可执行文件,使用的运行环境也是jdk下的jre
(2)、三个lib目录,分别为:
- C:/Program Files/Java/jre6/lib:jre下的,只是运行Java程序的jar包,是为JVM运行时候用的,包括所有的标准类库和扩展类等
- C:/Program Files/Java/jdk1.6.0_16/lib:jdk下的,包括Java开发环境的jar包,是给JDK用的,例如JDK下有一些工具,可能要用该目录中的文件,如编译器等
- C:/Program Files/Java/jdk1.6.0_16/jre/lib:jdk/jre下的,是开发环境中运行时需要的Jar包,最典型的是导入的外部驱动Jar包,因为编译时,系统找的是Jdk下的Jre,而不是最外层的Jre
原创文章,作者:254126420,如若转载,请注明出处:https://blog.ytso.com/244373.html