目录
Java概述
1.简史
历史需要追溯到1991年,sun公司想要在未来家电领域大显身手,于是成立了有James Goaling(Java之父)领导的“Green”计划。最初sun公司打算用c++,但是由于c++的API存在某些问题,并且c++太复杂,容易导致错误。而且c++缺少可移植性,垃圾回收系统,分布式,多线程。于是他开发了一种新的语言,并命名为Oak,这就是Java的前身。
1994年对Oak进行了一次小规模的改进,并完成了第一个Java语言的网页浏览器:WebRunner.
1995年发布Java。
1996年发布JDK1.0.(包括运行环境(JRE)和开发环境(JDK))。JDK(Java Development Kit)
1997年发布JDK1.1,增加了JIT(即时编译)编译器。JIT不同于传统编译器的是他编译完之后保存在内存中,下次调用时就不需要重新编译了。而传统的编译器是编译完一条就扔掉。、
1998年发布最重要的版本JDK1.2。改进之后使得Java更接近于“一次编译,随处运行”。伴随JDK1.2的发布,还发布了JSP/Servelt、EJB等规范。并将Java分成了三个版本:J2ME,J2EE,J2SE。
- J2ME(Mico Edition):适用于手机家和用信息家用等有限存储设备。
- J2EE(Enterprise Edition):企业开发应用。
- J2SE(Standard Edition):Java的核心类库,包括J2ME,J2EE的编程基础。
JDK1.2还把API分成了3类:
- 核心API:这就是我们常说的核心类库。
- 可选API:为JDK拓展的API,因平台而异。
- 特殊API:满足特殊需求,如JCA和JCE的第三方加密类库。
2.运行机制
2.1高级语言的运行机制
高级语言按程序运行方式可以分为编译型和解释型。什么是编译型?什么是解释型?
编译型
编译型:是指使用专门的编译器针对不同的平台将源代码编译成该平台硬件所能执行机器码,并且生成该平台所能识别的可执行程序。
- 优点:
1.因为代码会一次性编译,所以编译完成之后程序可以脱离开发环境独立运行。
2.程序的运行效率高。- 缺点:因为编译完成之后,生成的程序是针对于该平台的,所以跨平台很难,也是就是可移植性降低了。
- 常见的编译型语言:c、c++、Pascal(结构化编程语言)、FORTRAN(Formula Translation的缩写)等。
解释型
解释型:解释型语言是指使用专门的解释器将源代码编译成逐行解释成特定平台的机器码,并立即执行的语言。在java中的解释器就是JVM(Java虚拟机)。
- 优点:解释型语言只需要在相应平台安装对应的解析器就可以执行,因此解释性语言具有较好的跨平台性。
- 缺点:与编译性语言不同的是,解释性语言每次执行都需进行一次编译,因此效率大大降低。
- 常见解释性语言:Ruby,Python等
2.2简叙程序的运行机制和JVM
Java语言是一种特殊的高级语言,什么这么说呢?Java既具有编译型语言的特点,也具有解释型语言的特点。也就是说java既不是一种纯粹的解释型语言,也不是一种纯粹的编译型语言。
######Java程序执行的两个步骤:
1.将Java源文件也就是后缀名为(.java)的文件使用javac编译成字节码文件(.class)
2.JVM(java虚拟机 )将字节码文件(.class)文件解释执行,生成该平台所能识别的机器码。
与一般的编译型语言不同的是Java是将源文件编译成JVM(Java Virtual Machine)所能识别的字节码文件,而一般的编译型语言是编译成该平台所能识别的机器码,这样提高了执行效率。
而JVM是一个解释器将字节码转为该平台所能识别的机器码。正因为这样,只需要在不同的平台安装JVM就可以执行Java程序,因此JVM是Java跨平台的一个重要部分。
3.安装
3.1 安装JDK
JDK的全称是Java Development Kit,即Java标准版开发包。
说到JDK又设计到衣柜概念JRE(Java Runtime Environment),是Java运行时所需要的环境。 如果你仅仅是运行Java程序那么只需要安装JRE即可。如果是开发者则需要安装JDK,JDK包含了JRE。
前面我们有讲到JDK的3 种分类J2ME、J2EE和J2SE。Sun公司为JavaSE和JavaEE分别提供JDK和Java EE SDK(Software Development Kit)两个开发包。如果是学习JavaSE的编程知识就只需要安装JDK就可以了。如果是Java EE就可以使用Java EE SDK。有一个Java EE SDK已经包含了最新版的JDK。
3.2JVM是运行Java程序的虚拟机,那JRE与JVM是什么关系呢?
答:简单的说JRE包含JVM。JVM是运行Java程序的核心虚拟机,但是运行Java程序需要的不仅仅是虚拟机还需要其他的类加载器,字节码校验器以及大量的基础类库。JRE除了Java虚拟机还包含其他运行java环境所需要的东西。
下载安装(这里不详细说)
JDK目录
- bin:该路径下存放了JDK的各种工具命令,常用的有javac、java等就是在改路径下。
- db:如果安装的时候没有选择安装Java DB(Derby)这个目录就是空的。Java DB 是完全事务型、安全且基于标准的数据库服务器,它全部采用 Java 编写,并且完全支持 SQL、JDBC API 和 Java EE 技术。Java DB 数据库与 GlassFish 应用服务器打包在一起,也包含在 JDK 6 中。
- demo:该路径下存档了JDK提供的演示代码,初学者可以参考这些代码。
- include:用于编译本地方法的文件。
- jre:运行Java程序所需的环境。
- lib:存放类库文件,就是JDK工具命令的实际执行程序。
- sample:存放JDK提供的一些简单事例代码。(我这边没有安装)
- src.zip:java所有的核心类库。(我这边没有安装)
其他的README和LICENSE等说明性文档。
安装了公共JRE目录图
3.3为什么不安装公共的JRE呢?
答:公共的JRE是一个独立的JRE系统,会单独安装在其他目录下,如上图。公共的JRE会向Internet Explorer浏览器和系统中注册Java运行时环境。通过这种方式,系统中人格应用程序都可以使用公用的JRE。由于现在在网页上执行Applet的机会越来越少,而且完全可以使用JDK下的JRE来运行Java程序,因此没有太大的必要安装公共的JRE。
当我们安装好之后运行cmd输入命令java
javac
命令时输出
当我们打开cmd运行切换到jdk安装路径下的bin目录下输入java
命令是会出现下面的结果。
然而当我们的目录不是在bin目录下是时会出现下面结果
'java’不是内部或外部命令,也不是课运行的程序或者批处理文件。
我的JDK明明安装好了,难道每次都要在bin目录下才能运行java程序吗?显然这样是很不方便的。为解决这个问题我们可以配置环境变量,告诉系统路径在哪。
找到环境变量,在配置JAVA_HOME和Path”值。
变量名:JAVA_HOME
变量值:C:\Program Files (x86)\Java\jdk1.8.0_91 // 要根据自己的实际路径配置
变量名:Path
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
注意:
1.值得注意的一点是在Windows操作系统中设置Path和PATH是没有区别的,也就是不区分大小写;而在Linux下是区分大小写的,因此我们使用PATH。
2.不管是Linux还是Windows我们只需要把java和javac的命令所在的路径添加到PATH即可。
3.4 CLASSPATH环境变量定位类
对于学过Java的来说CLASSPATH并不陌生,CLASSPATH是干什么用的呢?当我们在使用java命令运行程序是,JRE到哪去搜索Java类呢?有人可能会回答在当前路径下呀。实际上,在包括JDK1.4一下的版本,即使在当前目录下运行java命令还是找不到。我们刚刚可以运行时因为在JDK1.5以后,可以完全不需要配置CLASSPATH。但是我们为了版本的兼容,建议还是要配置一下的。
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; //记得前面有个"."
- 注意:
1.前面要添加一个点,强制java解释器在当前路径下搜索java类。
2.所有路径不要带空格。
编译命令:javac HelloWorld.java 生成字节码文件
运行命令:java HelloWorld 运行java程序