声明了包的类Java命令找不到或无法加载主类

首先你需要配置环境变量:
 CLASSPATH=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
   java 命令会在 CLASSPATH 目录下找相应的 class 文件。

 java HelloWorld
    如果你输入上面的命令,那么会在 CLASSPATH 下寻找 HelloWorld.class 文件。

 java tee.Test
    如果你输入上面的命令,那么会先在 CLASSPATH 找 tee 目录,然后在 tee 目录里找 Test.class 文件。

    所以说如果你的环境变量配置错误,例如漏了".;",那么就不会在当前目录寻找了。
   (.代表当前目录,..代表上级目录)。

 java -cp . HelloWorld
   如果你输入上面的命令,那么必然会在当前目录找 HelloWorld.class 文件。
 
 
关于包的问题,我再补充以下几点(以我自己写的socket发送端的代码作为例子)
 1 package WebProgramingDemo;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.InetAddress;
 7 
 8 public class UDPSendDemo {
 9 
10     /**
11      * @param args
12      * @throws IOException 
13      */
14     /*
15      * 创建UDP传输的发送端的步骤;
16      * 1.建立UDP的socket服务
17      * 2.明确要发送的数据
18      * 3.将数据封装成数据包
19      * 4.用socket服务的send方法将数据包发送出去
20      * 5.关闭资源
21      */
22     public static void main(String[] args) throws IOException {
23 
24         System.out.println("发送端启动。。。");
25         /*
26          * 创建UDP传输的发送端的步骤:
27          */
28         //1.建立UDP的socket服务
29         DatagramSocket ds = new DatagramSocket(8888);
30 
31         // 2.明确要发送的数据
32         String s1 = "UDP 传输显示!";
33         // 3.将数据封装成数据包
34         byte buf[] = s1.getBytes();
35         DatagramPacket dp = new DatagramPacket(buf, buf.length,
36                 InetAddress.getByName("192.168.2.103"), 10000);
37         // 4.用socket服务的send方法将数据包发送出去
38         ds.send(dp);
39         // 5.关闭资源
40         ds.close();
41         
42     }
43 
44 }

很明显,UDPSendDemo属于WebProgramingDemo包,
我们cmd命令行进入到包所在的目录对该java文件进行编译和运行,会出现这样的错误:

这个类的全名应该是WebProgramingDemo.UDPSendDemo,而我们输入的是UDPSendDemo.

接着,我们退回到上层目录,因为编译已经通过,所以我们直接运行:

原文地址:https://www.cnblogs.com/ysw-go/p/5321106.html