Java概述
Java简介
什么是Java
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概
念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了
面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
诞生背景
任职于Sun公司(Stanford University Network斯坦福网络公司)的詹姆斯·高斯林和麦克·舍林丹等人于1990年代初开发
Java语言的雏形,最初被命名为Oak,Oak的目标是作为家用电器等小型系统的编程语言,用于电视机、电话、闹
钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计
划。随着1990年代互联网的发展,Sun公司发现Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java
的名称正式发布。伴随着互联网的迅猛发展,Java逐渐成为重要的网络编程语言
Java简史
1991年 Green项目,开发语言最初命名为Oak (橡树)
1994年,开发组意识到Oak 非常适合于互联网
1996年,发布JDK 1.0,约8.3万个网页应用Java技术来制作
1997年,发布JDK 1.1,JavaOne会议召开,创当时全球同类会议规模之最
1998年,发布JDK 1.2,同年发布企业平台J2EE
1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技术诞生
2004年,发布里程碑式版本:JDK 1.5,为突出此版本的重要性,更名为JDK 5.0
2005年,J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME
2009年,Oracle公司收购SUN,交易价格74亿美元
2011年,发布JDK 7.0
2014年,发布JDK 8.0,是继JDK 5.0以来变化最大的版本
2017年,发布JDK 9.0,最大限度实现模块化
2018年3月,发布JDK 10.0,版本号也称为18.3
2018年9月,发布JDK 11.0,版本号也称为18.9
三大版本
1.Java SE(J2SE,Java 2 Platform Standard Edition,标准版)
Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。
Java SE 包含了支持 Java Web 服务开发的类,并为Java EE和Java ME提供基础。
2.Java EE(J2EE,Java 2 Platform Enterprise Edition,企业版)
Java EE 以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java 应用程序。Java
EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服
务体系结构(service-oriented architecture,SOA)和 Web2.0应用程序。2018年2月,Eclipse 宣布正式将 JavaEE 更
名为 JakartaEE
3.Java ME(J2ME,Java 2 Platform Micro Edition,微型版)
Java技术体系
JVM、JRE和JDK的关系
Java语言特点
Java语言是面向对象的
面向对象就是Java语言的基础,也是Java语言的重要特性。面向对象是指以对象为基本单元,包含属性和方
法。对 象的状态用属性表达,对象的行为用方法表达。面向对象技术使得应用程序的开发变得简单易用,节
省代码。总之,Java语言是一个纯面向对象的程序设计语言。
Java语言是分布式的
分布性主要包括两大方面,分别是操作分布和数据分布,其中操作分布指的是在多个不同的主机上布置相关操
作,数据分布是将数据分别存放在多个网络中不同的主机上,借助的是URL(统一资源定位符)访问网络对象,访
问方式和访问本地系统相似。
Java语言具有一个强大的,易于使用的网络能力,这是非常适合于分布式计算程序的。
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用
于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是
开发分布式应用的重要手段。
Java语言是多线程的
多线程机制使应用程序在同一时间并行执行多项任务,Java语言提供多线程之间的同步机制,这些相应的同步机制
可以很好的保证不同线程,能够正确的共享数据。多线程机制使程序具有更好的交互性和实时性。
Java语言是高性能的
1.Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些
情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代
码,也就是实现全编译了。Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相
当简单,它能产生相当好的代码
2.与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译
器技术的发展越来越接近于C++。
Java语言是跨平台的
1.所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。这是软件发
展的趋势和编程人员追求的目标。之所以这样说,是因为计算机硬件的种类繁多,操作系统也各不相同,不同的用
户和公司有自己不同的计算机环境偏好,而软件为了能在这些不同的环境里正常运行,就需要独立于这些平台。
2.在Java语言中,Java自带的虚拟机很好地实现了跨平台性。Java源代码经过编译后生成二进制的字节码是与平台
无关的,Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够Write once,
run anywhere(一次编译,到处运行)的原因。Java虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使
得Java语言具备跨平台性。
Java语言是可移植的
可移植性来源于跨平台性性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移
植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
Java语言是安全的
在Java语言中删除了类似于C语言中的指针和内容释放等语法,有效的避免了非法操作内存,代码要经过校验之后
才能够运行,所以未经允许的Java程序不可能出现损害系统平台的行为,最大的好处就是,Java可以编写防病毒和
可修复的系统,Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击,从而可以提高
系统的安全性。
Java语言是健壮的
Java语言的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智
选择。Java的安全检查机制使得Java更具健壮性。
Java语言是动态的
1.Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通
过网络来载入所需要的类,这也有利于软件的升级。
2.Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
JDK安装与环境变量配置
下载JDK
官网地址:https://www.oracle.com/java/technologies/javase-downloads.html
安装JDK
安装JDK时,除了修改安装目录,其他的一路【下一步】,傻瓜式安装。
注:当提示安装JRE时,可以选择不要安装。因为JDK已经自带了JRE。
安装JDK
配置环境变量
1.单击"计算机-属性-高级系统设置",单击"环境变量"。
2.新建->变量名"JAVA_HOME",变量值"C:\develop\Java\jdk1.8.0_191"(即JDK的安装路径)
3.编辑->变量名"Path",点击"新建",然后输入上"%JAVA_HOME%\bin",点击"确定",再次点击"新建",然后输入
上"%JAVA_HOME%\jre\bin",点击确定
4.新建->变量名"CLASSPATH",变量值".;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar"
测试JDK是否安装成功
进入cmd中检查Java是否安装正确,检查的命令为 java -version
环境变量详解
JAVA_HOME
变量名:JAVA_HOME
变量值:C:\develop\Java\jdk1.8.0_191
作用:定义一个变量,供其他地方使用
PATH
变量名:PATH
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
用途:让系统在任何路径下都可以识别java、javac、javap等命令
CLASSPATH
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
用途:告诉jvm要使用或执行的class放在什么路径上,便于JVM加载class文件,.;表示当前路径,tools.jar和dt.jar为
类库路径
JDK1.8目录介绍
安装好的JDK路径下目录如下:有bin、db、include、jre、lib、COPYRIGHT、javafx-src.zip、LICENSE、
README.html、release、src.zip、THIRDPARTYLICENSEREADME.txt、THIRDPARTYLICENSEREADME-JAVAFX.txt
bin目录
其中bin目录里面存放了JDK的各种工具命令,即JDK开发工具的可执行文件。其中这些可执行文件都是二进制的,
其中包括编译器、解释器以及其他一些工具,比如我们刚开始用的Javac、Java命令去检查JDK是否安装配置正确就
是在这个目录下面的命令。
javac.exe | 基本工具 - Java语言编译器, 将Java源代码转换成字节码 |
---|---|
java.exe | 基本工具 - Java应用程序启动器,直接从类文件执行Java应用程序字节代码 |
javadoc.exe | 基本工具 - Java API 文档生成器,从源码注释中提取文档 |
apt.exe | 基本工具 - java 注释处理器 |
appletviewer.exe | 基本工具 - java applet 小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器 |
jar.exe | 基本工具 - java文件压缩打包工具 |
jdb.exe | 基本工具 - Java 调试器,debugger,查错工具 |
javah.exe | 基本工具 - C 头文件和stub生成器,用于写本地化方法,例如生产JNI样式的头文件。产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件 |
javap.exe | 基本工具 - class文件反编译工具,显示编译类文件中的可访问功能和数据,同时显示字节代码含义 |
jvisualvm.exe | Java 故障检修,程序概要分析,监视和管理工具 |
---|---|
jconsole.exe | Java 故障检修,程序概要分析,监视和管理工具 -java监视台和管理控制台 |
keytool.exe | 安全工具 - 管理密钥库和证书. |
---|---|
jarsigner.exe | 安全工具 - 生产和校验JAR签名 |
policytool.exe | 安全工具 - 有用户界面的规则管理工具 |
kinit.exe.exe | 安全工具 - 用于获得和缓存网络认证协议Kerberos 票证的授予票证 |
klist.exe.exe | 安全工具 - 凭据高速缓存和密钥表中的 Kerberos 显示条目 |
ktab.exe.exe | 安全工具 - 密钥和证书管理工具 |
rmic.exe | 远程方法调用工具 - 生成远程对象的stubs and skeletons(存根和框架) |
---|---|
rmid.exe | 远程方法调用工具 - Java 远程方法调用(RMI:Remote Method Invocation) 活化系统守护进程 |
rmiregistry.exe | 远程方法调用工具 - Java 远程对象注册表 |
serialver.exe | 远程方法调用工具 - 返回类的 serialVersionUID |
tnameserv.exe | Java IDL and RMI-IIOP 工具 - Provides access to the naming service |
---|---|
idlj.exe | Java IDL and RMI-IIOP 工具 - 生产映射到OMG IDL接口可以使Java应用程序使用CORBA的.java文件 |
servertool.exe | Java IDL and RMI-IIOP 工具 - 为应用程序提供易于使用的接口用于注册,注销,启动,关闭服务器 |
pack200.exe | Java 部署工具 - 使用java gzip压缩工具将JAR文件转换为压缩的pack200文件,生产打包文件是高度压缩的JAR包,可以直接部署,减少下载时间 |
---|---|
unpack200.exe | Java 部署工具 - 解包pack200文件为JARs |
htmlconverter.exe | Java 插件工具 - Java Plug-in HTML转换器 htmlconverter -gui 可以启动图形界面 |
---|---|
javaws.exe | Java web 启动工具 - Java web 启动命令行工具 |
native2ascii.exe | Java国际化工具 - 将文本转化为 Unicode Latin-1 |
schemagen.exe | Java web 服务工具 - Java构架的XML Schema生成器 |
---|---|
wsgen.exe | Java web 服务工具 - 生成 JAX-WS |
wsimport.exe | Java web 服务工具 - 生成 JAX-WS |
xjc.exe | Java web 服务工具 - 绑定编译器 |
jps.exe | 监视工具 - JVM Process Status 进程状态工具。列出目标系统的HotSpot JJVM , 监视Java虚拟机的性能,不支持Windows 98 和Windows ME 平台 |
---|---|
jstat.exe | 监视工具 - 按照命令行的具体要求记录和收集一个JVM的性能数据 |
jstatd.exe | 监视工具 - JVM jstat 的守护进程 |
jinfo.exe | 故障检测和修理工具 - 配置或打印某个Java进程VM flag |
jinfo.exe | 故障检测和修理工具 - 配置或打印某个Java进程VM flag |
---|---|
jhat.exe | 故障检测和修理工具 - 堆储存查看器 |
jmap.exe | 故障检测和修理工具 - Java内存图 |
jsadebugd.exe | 故障检测和修理工具 - Java 的 Serviceability Agent Debug的守护进程 |
jstack.exe | 故障检测和修理工具 - Java堆栈跟踪 |
jrunscript.exe | Java脚本工具 - 运行脚本 |
---|---|
include目录
其中include目录里面是一些供C语言使用的标题文件,其中C语言的头文件支持Java本地接口和Java虚拟机调试程
序接口的本地编程技术。这里头文件的作用是让Java调用C/C++实现的函数功能。include目录下的内容如下:
lib目录
其中lib目录:该路径下存放的是JDK工具命令的实际执行程序。lib目录下的内容如下:
jre目录
其中jre(Java runtime environment即Java运行时环境)目录路径下安装的就是运行Java程序所必须的JRE环境。我们
可以看到在jre目录下的bin里面有java.exe、javaws.exe,但没有javac.exe。jre目录下的内容如下:
src目录
其中src.zip目录:该压缩文件里面存放的就是Java所有核心类库的源代码。src.zip目录解压内容如下:
JavaFX-src.zip
存放JavaFX源代码
其他
COPYRIGHT和LICENSE为版权和签证的说明性文档
类库
tools.jar
工具类库(编译和运行等),它跟我们程序中用到的基础类库没有关系。我们注意到在Path中变量值bin目录下的各个
exe工具的大小都很小,一般都在27KB左右,这是因为它们实际上仅仅相当于是一层代码的包装,这些工具的实现
所要用到的类库都在tools.jar中,用压缩软件打开tools.jar,你会发现有很多文件是和bin目录下的exe工具相对性
的。当然,如果tools.jar的功能只有这些的话,那么我们根本不用把它加入到CLASSPATH变量中,因为bin目录下的
工具自己可以完成对这些类库的调用,因此tools.jar应该还有其他的功能。在里面还可以看到有Applet和RMI等相关
的文件,因此tools.jar应该还是远程调用等必须的jar包。tools.jar的其他作用可以查看其他资料。
dt.jar
运行环境类库,主要是Swing包,这一点通过用压缩软件打开dt.jar也可以看到。如果在开发时候没有用到Swing
包,那么可以不用将dt.jar添加到CLASSPATH变量中。
基本类库和扩展类库rt.jar
基本类库是所有的 import java.* 开头的类,在 %JAVA_HOME%\jre\lib 目录下(如其中的 rt.jar、resource.jar ),类
加载机制提到,该目录下的类会由 Bootstrap ClassLoader 自动加载,并通过亲委派模型保证了基础类库只会被
Bootstrap ClassLoader加载,这也就保证了基础类的唯一性。
扩展类库是所有的 import javax.* 开头的类,在 %JAVA_HOME%\jre\lib\ext 目录下,该目录下的类是由Extension
ClassLoader 自动加载,不需要我们指定。
rt.jar 默认就在根ClassLoader的加载路径里面,放在CLASSPATH也是多此一举
开发初体验——HelloWorld
步骤:
-
将 Java 代码编写到扩展名为 .java 的文件中。
-
通过 javac 命令对该 java 文件进行编译。
-
通过 java 命令对生成的 class 文件进行运行
编写代码:
public class Test{
public static void main(String[] args) {
System.out.println(“Hello World!”);
} }
编译:
- 有了java源文件,通过编译器将其编译成JVM可以识别的字节码文件。
- 在该源文件目录下,通过javac编译工具对Test.java文件进行编译。
- 如果程序没有错误,没有任何提示,但在当前目录下会出现一个Test.class文件,该文件称为字节码文件,也是可以执行的java的程序。
运行:
Java API文档
API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口
下载API: http://www.oracle.com/technetwork/java/javase/downloads/index.html
Java API的文档结构