java 命令行参数与类加载机制

1 有用的命令行

java -cp 类搜索路径 主类名

java -cp ".;a.jar" org.docshare.Haha

应该是先搜索系统默认路径。
然后在先在当前目录下查找 org/docshare/Haha.class
如果找不到,会在a.jar中查找。再找不到,

java -jar a.jar
根据META-INF找到主类并执行。

java -Djava.ext.dirs=你放jar的路径

如果想加一个路径,则可以加一个系统变量 java.ext.dirs指向你自己的lib目录。
该系统太麻烦,也没必要,所以加一个-D参数就可以添加一个只作用于当前运行的系统变量。
如 java -Dfoo="some string" A

class A{
  ..main..{
    System.out.println(System.getProperty("foo"));
  }
}

2 类加载机制

每当JVM启动,

JVM启动后生成三个ClassLoader BootstrapLoader, ExtClassLoader 和AppClassLoader。前面的类加载器是后面的父加载器。

默认的类加载器为AppClassLoader, 加载类执行一下流程:

1 查看自己是否已经加载过此类,如果是,则直接返回加载过的。
2 如果没有加载,则请求父加载器加载,父加载器如果无法,则自行加载。
3 父加载器如果没有加载,就找他的父亲进行加载。

所以说,如果你自己定义一个java.util.Scanner类。使用默认的类加载器来加载Scanner肯定会得到系统定义的Scanner类,而不是你自己定义的。
那么实在是想改变这种加载机制怎么办? 使用自己的类加载器。

参考
[1] https://www.cnblogs.com/ahudyan-forever/p/6007458.html
[2] http://blog.csdn.net/briblue/article/details/54973413

你可能感兴趣的:(java 命令行参数与类加载机制)