通用

  • Java Runtime下,java program *表示将当前目录下的所有文件作为参数传递给程序 program

cmd命令行

一、运行一个类

  • 在运行前确定该类是主类,且该主类存在(已通过同名.java文件编译)

1.运行主类的典型语法

java [ <options> ] <class-name> [<arg> ...]

  • options是命令行选项(以“-”字符开头);
  • class-name通常,特别是声明了类的包所属关系时,必须是 完全限定名称(fully-qualified-name),即:packagename.packagename2.ClassName;有些版本也可以写作 packagename2/packagename3/ClassName,但这不是目录

2.无法找到该主类的原因

  • 类名输入有误
    • 只输入类名,没有其包所属关系;
    • 类的完全限定名称混入了包外的目录
    • 带上了.class后缀
    • 类名的大小写不正确
    • 运行的是 .java文件 (java 11及后版本没有此问题)

3. 该类参数的格式

  • 如果要以一个文件及其路径名作为字符串参数(例如需要传递该字符串进而创建File对象),要注意IDEA和cmd命令行的工作目录是不同,导致传递的路径名也不同
    • 对于IDEA,工作目录是 /IDEA-workspace,因此建立 File所需要的字符串路径是 src/../file.txt
    • 对于cmd命令行,工作目录取决于当前进入的目录

      如果.class在编译前声明了包所属关系,那当运行在src/packagename/文件夹下的 .class文件,需要退出到这个包文件夹外,例如 src/.. 但接下来,若把文本文件放在 packagename/文件夹下,即和该 .class文件同目录,传递 text.txt作为参数时,提示无法找到该文本;如果把文本文件放到 packagename/外,即cmd的工作目录 src/下,传递 packagename/text.txt作为参数,依然无法找到该文本。 又尝试没有包所属关系的 .class文件,纯粹将其和文本文件放在一起,且仅以文件名 text.txt作为参数,可以运行。 因此,目前遇到需要cmd命令行运行的情况,撇清包所属关系,并把文本文件放在一起。