java在cmd运行"-d"和"-cp"参数解读
作者:百学成瘾
1. “-d"和”-cp"参数的用法
“-d” 参数
javac 有一个’-d’参数,后跟一个目录路径,其指定编译的字节码(xx.class)文件放到什么目录下,特别当类定义在一个包中时,javac会在参数指定目录下产生包名子目录并将类字节码文件放入其中。
“-cp” 参数
javac 还有一个’-cp’参数,后跟一个或多个 带有分隔的 目录路径或库文件(.jar 或 .zip),其 指定import代码指令表达的字节码文件放在什么地方 (可以理解为’-cp’用来寻找import导入的或者本 身编译成功后的字节码文件),此参数可以在classpath环境变量中设置。
java 也有一个’-cp’参数,意义同javac
2. 一个java程序的编译
首先我在E盘下的my_test文件夹下建了两个Java程序,class为空文件夹
Person的编译
Person.java代码如下:
//命名为 Person.java package lib; //package说明此类(Person)在说明lib包下 public class Person{ public static int m=10; public static void main(String[] args){ System.out.println("hello,this is Person"); } }
一、编译字节文件到当前目录
1.编译Person.java,生成java.class到当前目录下, 运行 javac -d . Person.java (注意 '-d’后面有个 ‘空格’ 然后才有 ‘.’)
自动生成lib文件夹,并且将编译的Person.class放在lib下
2.因为Person.class在当前目录下的lib文件夹中
所以运行java lib.Person 执行Person.class
输出结果 hello,this is Person
二、编译字节文件到当前目录的子文件夹
1.编译Person.java,生成java.class到class文件夹下
运行 javac -d ./class Person.java 在class文件夹下自动产生lib文件夹,并生成Person.class文件
2.运行 java -cp ./class lib.Person 输出结果
注:生成的字节码文件Person.class在文件夹class下面,所以要用 “-cp” 来找到 Person.class 注意有空格,不能忽略
3. 两个java程序间的调用编译
My.java 中需要调用Person的成员,为了更好的理解参数意义,我们把My.java 和 Person.java 都放在class文件夹下运行
My.java 代码如下:(调用Person中的成员)
//命名为 My.java package longpf; //说明此类(My)在longpf包下 import lib.Person; public class My{ public static void main(String[] args){ System.out.println(new Person().m)//调用输出Person中的成员m } }
注:My在包longpf下,Person在包lib下,见代码第一行package:
编译运行My.java
过程如下:
1.执行 javac -d ./class Person.java ,在class文件中产生lib包
2.执行javac -cp ./class -d ./class My.java ,因为My.java中有import Person ,所以要找到Person.class,即 -cp参数,-cp ./class 到class文件夹下 .
代表当前目录,-d ./class 表示编译生成的My.class放在当前目录的class文件夹下(代码中package longpf; 自动生成longpf包),注意不能丢掉空格
3.执行java -cp ./class longpf.My,最后找到class下的longpf包,里面的My.class运行。
输出结果 Perosn中的m成员 10;
一定要在包longpf外用 ’ . '调用My,否则的话会显示错误,如图:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。