public static void main ( String [ ] args ) { Set < String > set = new HashSet < > ( ) ; set . add ( "jack" ) ; System . out . println ( set ) ; System . out . println ( jarTest ( "one" ) ) ; private static String jarTest ( String a ) { if ( StringUtils . isBlank ( a ) ) { return null ; return a . toUpperCase ( ) ;

使用 javac 命令编译:
在这里插入图片描述
这里指定了 classpath,不然编译器没法找到 StringUtils 类。
在 test 目录下:
在这里插入图片描述
这什么鬼,居然报 找不到或无法加载主类 。我多方查询资料也无果,依赖的 jar 包目录指定了: ~/test/jar/commons-lang3-3.4.jar ,编译后的 class 文件目录也指定了: ~/test

经过一轮测试,原来是目录指定的有问题:
在这里插入图片描述
当我将 ~/test 换成绝对路径: /Users/jackchou/test 就正常了,原来 classpath 指定的目录中,第二个目录不能是使用 ~ ,第一个目录可以。为了避免错误,classpath 都指定绝对路径 java -classpath /Users/jackchou/test/jar/commons-lang3-3.4.jar:/Users/jackchou/test com.jiaobuchong.ClassPathDemo ,可以在任何目录运行这个 Java 类。
在这里插入图片描述
上面这个命令要正常运行的话,需要保证 java 命令的执行是在所编译的类的目录中。

默认的 classpath 是当前目录,当自定义 classpath 的时候就会把默认的给覆盖掉,要在 classpath 中加入当前目录,直接用 . 就行。

参考: Setting the Class Path
classpath的理解及其使用方式
关于JAVA项目中CLASSPATH路径详解
JAVA和JAVAC 命令行;java 带有包名编译并运行,附带外部依赖jar包运行

我使用的 Java 版本是:java version "1.8.0_191"代码目录结构:ClassPathDemo.java:package com.jiaobuchong;import java.util.HashSet;import java.util.Set;import org.apache.commons.lang3.StringUtils;public cla...
前言:虽然学习 Java 语言约有两年多,但在最近需要使用 命令 行工具编译并运行 Java 程序时,还是 报错 了。花费了一些时间,解决了该问题,发现解决方法在初学 Java 时使用过。一则,为了避免以后再出现同样的问题而浪费不必要的时间;二则,作为使用该语言的程序员,对于该语言的一些基本问题,应该有清晰的理解和认识;三则,网上的一些解决方案,不够完备。有的没有解释问题原因,直接给出答案;有的,未列举出某些常见情况的解决方案。因此,写此文章,让读者可以举一反三,深入理解问题。 一、 问题分析 不到 无法 加载 主类 ,主要原因有
2.可能是因为你的 java 文件带了package包,但是你还在 java 文件所在目录运行:返回包的前一目录进行运行; 小编就是因为 java 文件里带了package word.project2_0;导致的错误。。。 错误原因是:我们在包里运行文... 一般情况下,我们都使用工具进行代码的编辑和调试,例如eclipse 、Manven、Android Studio、sublime、vim、notepad、记事本等。 当我们用eclipse android studio等创建的project和 java 类文件,都是有包名的,用工具正常编译和运行,但此时切换到 命令 行执行的时候: java c xxx. java java xxx 的时候 极有可能出现 不到 热爱编程的大忽悠: [code=java] private static void task(Runnable r, Condition wait, Condition signal, int expectNum) { lock.lock(); try { for (int i = 0; i < count; i++) { if (num != expectNum) { wait.await(); r.run(); signal.signalAll(); } catch (InterruptedException e) { } finally { lock.unlock(); [/code] 面试题:多线程按顺序输出 热爱编程的大忽悠: 可以这样写: [code=java] public class Main { private static final int count = 10; private static final ReentrantLock lock = new ReentrantLock(); private static final Condition aOver = lock.newCondition(); private static final Condition bOver = lock.newCondition(); private static final Condition cOver = lock.newCondition(); private static int num = 1; public static void main(String[] args) throws InterruptedException, ExecutionException { Thread t1 = new Thread(() -> { task(() -> {System.out.print("A");num=2;}, cOver, aOver, 1); },"A"); Thread t2 = new Thread(() -> { task(() -> {System.out.print("B");num=3;}, aOver, bOver, 2); },"B"); Thread t3 = new Thread(() -> { task(() -> {System.out.print("C");num=1;}, bOver, cOver, 3); },"C"); t1.start(); t2.start(); t3.start(); private static void task(Runnable r, Condition wait, Condition signal, i [/code]