classpath、jar、模块

classpath

  1. classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class。
  2. JVM不依赖classpath加载核心库!(classpath指向的为自己所创建的class 或 jar包,核心库(如ArrayList,Scanner等JVM本身知道))
  3. 运行代码:
    java -cp 路径 com.Main(当前路径 路径为 . )
    java -cp test.jar com.Main(jar未指定主方法时候)

jar

  1. 如果有很多.class文件,散落在各层目录中,肯定不便于管理。如果能把目录打一个包,变成一个文件,就方便多了。
  2. jar包还可以包含一个特殊的/META-INF/MANIFEST.MF文件,MANIFEST.MF是纯文本,可以指定Main-Class和其它信息。JVM会自动读取这个MANIFEST.MF文件,如果存在Main-Class,我们就不必在命令行指定启动的类名
  3. 打包项目为jar包后直接运行代码为:java -jar test.jar

模块

  1. 产生原因:.class文件是JVM看到的最小可执行文件,而一个大型程序需要编写很多Class,并生成一堆.class文件,很不便于管理,虽然有jar可以将Class文件打包,但jar只是用于存放class的容器,它并不关心class之间的依赖。从Java 9开始引入的模块,主要是为了解决“依赖”这个问题。如果a.jar必须依赖另一个b.jar才能运行,那我们应该给a.jar加点说明啥的,让程序在编译和运行的时候能自动定位到b.jar,这种自带“依赖关系”的class容器就是模块。

  2. Java 9引入的模块目的是为了管理依赖;

  3. 使用模块可以按需打包JRE;

  4. 使用模块对类的访问权限有了进一步限制。

你可能感兴趣的:(JAVA)