Java程序运行机制及cmd编译运行探究(一)准备工作
平时太依赖开发工具了,对Java的一些比较底层的东西不明白,现在脱离开发工具,在命令行写个小程序研究下整个流程。
1. 基本流程
Java是一种高级语言,它既具有编译型语言的特征,也具有解释型语言的特征。
它的运行过程一般要经过以下两个步骤:
(1) 编译
把源代码翻译成与平台无关的字节码(.class)文件,用的是javac命令
(2) 运行
解释执行与平台无关的字节码文件,用的是java命令。
2. 常用命令
要运用命令行进行Java程序的编译和运行需要一些基础的预备知识,先做个整理。
1. cmd基本用法
进入方式:win+R打开"运行",输入cmd,进入命令行。
常用命令:
常用格式 | 含义 | 经典举例 | 含义 |
cd+空格+目录 | 进入某个目录 | cd d:\test\utils | 进入d:\test\utils目录 |
cd .. | 返回上一级 | ||
cd ../.. | 返回上两级,以此类推 | ||
盘符名+冒号 | 切换盘符 | d: | 切换到d盘 |
dir | 列出当前目录下所有文件 | ||
cls | 清屏 |
2. java基本命令
javac srcFile(以.java结尾) | 编译srcFile,把生成的字节码文件放srcFile的相同路径 |
举例:
javac d:\cmdtest\Test.java
意义:编译d:\cmdtest目录下的Test文件,生成的字节码文件同样存在d:\cmdtest下
javac -d destdir srcFile(以.java结尾) | 编译srcFile,把生成的字节码文件放destdir的路径下 |
举例:
javac -d d:\cmdtest e:\Test.java
意义:编译e盘下的Test文件,生成的字节码文件存在d盘的cmdtest目录下
注意:这里的destdir可以是.,代表是当前目录,
例:javac -d . e:\Test.java意思是编译e盘下的Test文件,生成的字节码文件存在命令行的当前目录下
(就是你命令行停在C盘的时候去编译E盘的Test文件,生成的字节码文件放在C盘下,而不是E盘)
javac -classpath filepath srcFile(以.java结尾) | 从filepath路径下找编译所需要用到所有相关字节码文件,再编译srcFile |
举例:
javac -classpath d:\classpackage e:\Test.java
意义:e盘下的Test文件编译过程中需要用到一些字节码文件,这些文件去从d盘下的classpackage目录下去找,找到后完成Test文件的编译
java ClassName(类名) | 运行名字叫ClassName的类 |
举例:
java People
意义:运行People类的字节码文件
举个特殊情况:d:\javaclass\com\test\People.class,People类第一句package com.test;
这种情况比较复杂,有两点要注意:
1. 运行People字节码文件要在com路径下,命令为:java com.test.People(注意不是进入People字节码文件路径去运行java People)
2. javac命令srcFile可以是地址+文件名的组合,而java命令的类名部分只能是类名或者包加类名,不能加上地址,而第一点的com.test.People指的不是地址,
指的是全类名。
所以这种情况下在d盘根目录运行java javaclass\com.test.People是不行的,java javaclass\com\test\People就更不对了。
java -classpath filepath ClassName(类名) | filepath路径下找运行所需要的所有相关字节码文件,再运行ClassName类 |
举例:参考java Classname(类名),就多提供一个寻找运行ClassName类时候其他相关字节码文件存放路径的参数
备注:
1. 以上我举的例子基本都是绝对路径,在实际情况下,javac命令还可以用相对路径来编译,例如.,..,../..等,但java不行,必须进入对应路径进行执行。
2. Window下原来斜杠/表示DOS参数,反斜杠\表示路径分隔符,现在的Windows内核在处理路径时确实可以同时支持斜杠和反斜杠,所以基本可以互用。