1.classpath

1.1classpath定义

  • classpath是一个环境变量
  • classpath指示JVM如何搜索class
  • classpath设置的搜索路径与操作系统相关

    * window使用分号分割的,Mac、Linux使用冒号分割的

    • C:\work\project1\bin;C:\shared;"D:\My Document\project2\bin"
    • /usr/shared:/usr/local/bin:/home/csj/bin

1.2classpath用途

假设classpath是 .;C:\work\project1\bin;C:\shared

jvm在加载com.feiyangedu.Main这个类时,依次查找:

当前目录\com\feiyangedu\Hello.class

C:\work\project1\bin\com\feiyangedu\Hello.class

C:\shared\com\feiyangedu\Hello.class

  • 在某个路径下找到了,就不再继续搜索
  • 如果没有找到,报错

1.3classpath的设定方法

  • 直接在系统变量中设置classpath环境变量(不推荐)
  • 在启动JVM时设置classpath变量(推荐)
java -classpath C:\work\bin;C:\shared com.feiyangedu.Hello
java -cp C:\work\bin;C:\shared com.feiyangedu.Hello
  • 没有设置环境变量,也没有设置-cp参数,默认当前目录为classpath
  • 在eclipse中运行Java程序,eclipse自动传入的-cp参数是当前工程的bin目录和引入的.jar

2.jar包

2.1jar包的组成

  • jar包是zip格式的压缩文件,包含若干.class文件
  • jar包相当于目录
  • classpath可以包含jar文件: C:\work\bin\all.jar
  • com.feiyangedu.Hello类将在classpath给予的目录中搜索com/feiyangedu/Hello.class
  • 使用jar包可以避免大量的目录和.class文件

2.2jar包的创建

  • 使用jdk自带的jar命令
  • 使用构建工具如maven等
  • 直接压缩

2.3jar包的其他功能

2.4jdk的class

  • jvm运行时会自动加载jdk自带的class
  • jdk自带的class被打包在rt.jar
  • 不需要在classpath中引用rt.jar

3.实例

Hello.java

package com.feiyang;
public class Hello {
private final String name;
public Hello(String name){
this.name = name;
}
public String hello(){
return "Hello, " + name + "!";
}
}

Main.java

package com.feiyang;
public class Main {
public static void main(String[] args){
Hello h = new Hello("World");
System.out.println(h.hello());
}
}

3.1指定运行文件

运行Main文件,生成class文件。将class所在目录压缩为jar包

以IDEA为例,class文件在其项目路径下的target/classes里

cd target/classes/
zip -q -r test.jar *
java -cp test.jar com.feiyang.Main


## 3.2直接运行jar包
新建META-INF/MANIFEST.MF文件,重新执行main文件,在classes目录下会生成META_INF文件,将classes下的所有文件打包
```#xml
Manifest-Version: 1.0
Main-Class: com.feiyang.Main
X-Copyright: blablabla
X-Build-Version: 1.0
```
```#shell
zip -q -r main.jar *
java -jar main.jar

<img src="https://img2018.cnblogs.com/blog/1418970/201901/1418970-20190118190321398-60545465.png" width="500" />

#    4.总结:
* JVM通过环境变量classpath决定搜索class的路径和顺序
* 不推荐设置系统环境变量classpath,始终建议通过-cp命令传入
* jar包相当于目录,可以包含很多class文件,方便下载和使用
* META-INF/MANIFEST.MF可以提供jar包的信息,如Main.Class
* 不需要在classpath中引用包含Java核心类的rt.jar

最新文章

  1. Fedora 21 安装 Nvidia 驱动以及失败后的补救方法
  2. bzoj 1305 dance跳舞
  3. .net 下载文件几种方式
  4. EditPlus 3.1
  5. IOS第八天(7:UITableViewController新浪微博,cell 复用的简单写法优化和cell高度从模型中获取)
  6. Android Activity生命周期以及Fragment生命周期的区别与分析
  7. MVC中SelectList和@Html.DropDownList(&quot;MainDuty_UserId&quot;,&quot;请选择&quot;)的运用
  8. python中实现多线程的几种方式
  9. 动手写个数字输入框1:input[type=number]的遗憾
  10. eclipse快捷注释生成方法
  11. 在wamp中添加php新版本
  12. notes for python简明学习教程(1)
  13. HDU1730 Northcott Game 尼姆博弈
  14. Python——ipython(python programming)
  15. hibernate数据库操作基础
  16. flask获取传入参数的两种方式
  17. SpringCloud之Eureka 服务注册和服务发现基础篇2
  18. Java远程执行Shell命令
  19. 单位转换类UnitUtil2
  20. Php 中如何将内容写入log日志中

热门文章

  1. 浅谈log4j-5-读取properties文件(转自godtrue)
  2. Python知识点整理,基础3 - 字典操作
  3. webpack中hash、chunkhash、contenthash区别
  4. java中的Object类和其clone()
  5. TypeScript 之 三斜线指令
  6. linux应用之gcc环境的安装
  7. Firedac 数据连接池的应用
  8. subversion与TortoiseSVN的使用
  9. C语言中基本的数据类型
  10. 100M双绞线接头的标准接法