[TOC]
1. java程序运行过程
程序员编写的java源代码,经过编译后生成与平台无关的.class字节码文件
JVM负责执行编译后的.class字节码文件,JVM实现了java跨平台的特性
image
2. 主要概念
JRE: Java运行时环境(Java Runtime Environment)
JVM: Java虚拟机(Java Virtual Machine)
负责执行字节码文件,为编译器提供相同的编程接口
JDK: Java标准版开发包(Java SE Development Kit)
一套用于开发Java程序的开发包,提供编译、运行Java程序的各种工具和资源
Java的三个版本:
Java SE: 整个Java技术的核心和基础
Java ME: 主要用于控制移动设备和信息家电等有限存储的设备
Java EE: 提供了企业应用的完整解决方案
3. 安装JDK
3.1 JDK下载
访问ORACLE官方网站下载JDK,目前最新版为JDK10
image
image
根据自己使用的操作系统,下载相应的JDK包即可。
3.2 Windows下安装JDK
下载Windows系统的JDK安装文件后,直接执行选择自己的安装路径默认安装即可。这里安装路径选为: D:\Programs\work\JDK10,这里安装路径一般不应该包含中文字符及空格,容易出一些奇怪的问题。
安装完成后需要配置环境变量:
右键我的电脑->属性->高级系统设置->环境变量
新建JAVA_HOME的环境变量,变量值设置为JDK的安装路径D:\Programs\work\JDK10
编辑系统PATH环境变量,追加变量%JAVA_HOMT%\bin
打开Windows cmd命令行,输入java -version及echo %JAVA_HOME%检查JDK安装及环境变量设置情况,如图所示
image
3.3 Linux下安装JDK
mkdir /usr/local/jdk10; cd /usr/local/jdk10
# 上传下载的jdk-10.0.2_linux-x64_bin.tar.gz文件到当前目录
tar -zxvf jdk-10.0.2_linux-x64_bin.tar.gz
rm jdk-10.0.2_linux-x64_bin.tar.gz
mv jdk-10.0.2/* ./
rmdir jdk-10.0.2
# 新建jdk10用户,并设置环境变量
useradd jdk10
cd ~jdk10; vim .bash_profile
#.bash_profile文件中追加两行
export JAVA_HOME=/usr/local/JDK10
export PATH=$JAVA_HOME/bin:$PATH
su - jdk10
java -version #检查JDK安装情况
3.4 JDK各目录详解
bin: 存放了JDK的各种工具命令,如javac、java等命令
conf: 存放了JDK的相关配置文件
include: 存放一些平台特定的头文件
jmods: 存放了JDK的各种模块
legal: 包含JDK各模块的授权文档
lib: JDK工具的一些补充jar包等
4. 编译并运行java程序
4.1 编写HelloWold程序
// D:\windows库\桌面\temp\javaStudy\HelloWorld.java
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
4.2 编译java HelloWorld程序
cd /d D:\windows库\桌面\temp\javaStudy
javac -d . HelloWorld.java
4.2.1 javac命令的基本用法
javac
-d 指定类文件的生成路径
-g 生成所有调试信息
--release 7 指定使用java7的语法进行编译
4.3 运行java HelloWorld程序
cd /d D:\windows库\桌面\temp\javaStudy
java HelloWorld
4.3.1 java命令的基本用法
执行类: java [options] [args...]
-cp或-classpath 目录和 zip/jar 文件的类搜索路径, 若没有配置-cp参数,java默认会在当前目录搜索类,若配置了-cp参数,java 只会在指定的路径下搜索需执行的类。
执行jar包: java [options] -jar [args...]
4.3.2 包含外部类依赖java程序的执行
需特别注意:
编译主类前需先编译依赖java程序为类
编译主类时需添加依赖类包所在路径添加到classpath
运行主类时需添加依赖类包及主类所在路径添加到classpath
手动编译并运行含依赖类java程序示例:
文件1: D:\windows库\桌面\temp\javaStudy\depend\DependHello.java
package work.lody;
public class DependHello{
public void depend(){
System.out.println("work.lody.DependHello: goooooooooood");
}
}
文件2: D:\windows库\桌面\temp\javaStudy\DependTest.java
import work.lody.DependHello;
public class DependTest{
public static void main(String[] args){
System.out.println("sill in DependTest..");
DependHello dh = new DependHello();
dh.depend();
}
}
针对这两个java源文件,手动编译执行过程如下:
cd /d D:\windows库\桌面\temp\javaStudy\depend
javac -d . DependHello.java
cd ..
javac -cp D:\windows库\桌面\temp\javaStudy\depend -d . DependTest.java
java -cp D:\windows库\桌面\temp\javaStudy\depend;. DependTest
5. java程序打包发布方式
5.1 jar,war,ear
java程序一般打包成jar(java archive file)后进行发布,jar文件有以下特点:
格式与zip压缩包格式完全相同
包含名为META-INF/MANIFEST.MF的清单文件
添加jar文件到CLASSPATH环境中后,java虚拟机会在内存中解压这个jar包,并将当成一个路径进行处理。即java可运行或导入jar包里的类。
另外,java web项目一般打包成war(web archive fiel)包,企业应用项目一般打包成ear(enterprise archive file)包。war包、ear包格式及约定与jar完全相同。
5.2 清单文件MANIFEST.MF
清单文件由创建jar包时的系统自动创建,其格式为:
key:value
清单文件有以下几点要求:
每行定义一个key-value对,key前不能有空格
key后必须为英文:+一个空格
文件开头不能存在空行
文件必须以空行作为结束
特别的包含key为Main-Class,且value为类的的jar包为可执行jar包。可直接通过java -jar test.jar [args]执行jar包。
若需要执行不带Main-Class的jar包,可通过java命令将jar添加到CLASSPATH路径,并指定主类执行:
java -cp test.jar test.Test [args]
5.3 jar常用命令简介
将dist路径下全部内容生成一个jar: jar cf test.jar -C dist/ .
将test目录下所有内容生成一个可执行jar: jar cvfe test.jar test.Test test
查看jar包内容: jar tf test.jar
将jar解压缩到当前目录: jar xf test.jar
更新jar文件: jar uf test.jar Hello.class