詳細篇:https://blog.csdn.net/wk1134314305/article/details/77940147
** 凡事指定了-classpath,每個路徑尾部都必須加上;
分割,這樣可避免執行中出現一些想不到的情況。** (大概是因爲:如果不加;
分割,java默認直接在你寫的路徑加上.;
導致出錯,然後就會報:找不到當前路徑的類)。
要考慮classpath 各個路徑引用的先後順序。Java解釋器將按照它們在classpath變量中出現的順序來查找目錄中的類。
- 對於包含.class文件的.jar或.zip文件,classpath以.zip或.jar文件的名稱結尾
java -classpath xx.jar; cn.com.agree.Test
注意: -classpath 默認路徑爲 .
,代表當前路徑。
特殊情況:
假設 cn.com.agree.thread 下有三個類,ThreadDemo.java,MyThread.java,MyThreadRunnable.java 。ThreadDemo導入了其他兩個類。
(其實就是說,他們三個是同一個包名,且存在某一個類引用了其他同包名的類)
package cn.com.agree.thread;
public class ThreadDemo {
public static void main(String[] args) throws InterruptedException {
/**
* 三個線程,爲單線程,無法共享count變量,故共售出15張票
*/
MyThread myThread1 = new MyThread("窗口1");
MyThread myThread2 = new MyThread("窗口2");
MyThread myThread3 = new MyThread("窗口3");
myThread1.start();
myThread2.start();
myThread3.start();
System.out.println("========");
Thread.sleep(2000);
MyThreadRunnable myThreadRunnable1 = new MyThreadRunnable();
Thread thread1 = new Thread(myThreadRunnable1,"窗口4");
Thread thread2 = new Thread(myThreadRunnable1,"窗口5");
Thread thread3 = new Thread(myThreadRunnable1,"窗口6");
thread1.start();
thread2.start();
thread3.start();
System.out.println("========");
Thread.sleep(2000);
/**
* 同樣不會共享
*/
MyThreadRunnable myThreadRunnable4 = new MyThreadRunnable();
MyThreadRunnable myThreadRunnable5 = new MyThreadRunnable();
MyThreadRunnable myThreadRunnable6 = new MyThreadRunnable();
Thread thread4 = new Thread(myThreadRunnable4,"窗口7");
Thread thread5 = new Thread(myThreadRunnable5,"窗口8");
Thread thread6 = new Thread(myThreadRunnable6,"窗口9");
thread4.start();
thread5.start();
thread6.start();
}
}
現在將ThreadDemo.class放在 c:\users\cjf\Music\cn.com.agree.thread路徑下
其他兩個類放在另外路徑下:(對,有點操蛋)
此時想運行ThreadDemo,如果只指定其他兩個類的路徑,不加;
。它會找不到主類。
** 凡事指定了-classpath,建議加上.
,且每個路徑尾部都加上;
分割,可避免執行中出現一些想不到的情況。**