执行java时,由classpath指定java程序所在位置,如果没指出则默认为命令行当前路径,另外执行的类名是不能带路径的,JVM会把整个类名参数作为类名,如果包含路径名则路径也被当做是类名的一部分。类名部分只能带包名(如果声明了package)。并且如果声明了package,则类名必须带上包名;如果没声明package,则类名只能包含类名。JVM会检查你的包名和类中package的声明是否一致,不一致则它会认为不是同一个类(因为允许不同包中有相同名字的类)。
所以java命令行的执行时相当严格的,每个class只有一种执行命令:
有package声明的类,java -classpath 路径(该路径必须是包所在目录) 包名.类名
没有package声明的类,java -classpath 路径(该路径必须是类所在目录) 类名
当然,-classpath选项可以省略,则表示classpath为当前目录