[英]Using Java application launcher
我上课Hello
。 我已经从中成功编译了.class文件,并将其放入dir / subdir目录,并在其代码中为其指定了dir.subdir包。 我想用java
命令从命令行运行它。
我已经使用命令运行它: java dir / subdir / Hello ,它运行成功! 但是我在文档中读到,应该使用完全合格的类名来完成。 我试图执行: java dir.subdir.Hello ,它也成功运行了!
哪种方法更合理? 他们每个人具体意味着什么? 他们的根本区别是什么?
您应该使用点分形式,但不是因为平台兼容性。
参数dir/subdir/Hello
在此处有效,因为Java的默认ClassLoader
实现正确处理了它。 但是,并非所有的ClassLoader
实现都支持此功能。 您应该使用点分形式,因为根据ClassLoader.loadClass
的文档,名称应该是二进制名称 。 JLS在JLS 13.1的第 1项中定义了二进制名称:
该类或接口必须使用其二进制名称来命名,该二进制名称必须满足以下约束:
顶级类型的二进制名称是其规范名称。
成员类型的二进制名称由其立即封闭类型的二进制名称组成,后跟
$
,后跟成员的简单名称。本地类的二进制名称由其立即封闭类型的二进制名称组成,后跟
$
,后跟一个非空数字序列,后跟本地类的简单名称。匿名类的二进制名称由其立即封闭类型的二进制名称组成,后跟
$
,后跟一个非空数字序列。泛型类或接口声明的类型变量的二进制名称是其立即封闭类型的二进制名称,其后是
$
,后跟该类型变量的简单名称。泛型方法声明的类型变量的二进制名称是声明该方法的类型的二进制名称,其后是
$
,其后是Java SE 7 Edition Java虚拟机规范中定义的方法的描述符,其后是$
,后跟类型变量的简单名称。通用构造函数声明的类型变量的二进制名称是声明构造函数的类型的二进制名称,其后是
$
,其后是Java SE 7 Edition Java虚拟机规范中定义的构造函数的描述符,然后是$
,后跟类型变量的简单名称。
使用包名(带点)会更好,因为它是跨平台的(请记住Windows使用\\
),并且更接近于您的程序位于jar文件(必须将Main-Class
指定为类名)。
您应该始终使用点,因为这适用于所有操作系统(win / unix / mac)。 包只不过是目录结构,在Windows中使用斜杠(/)对其进行处理,因此java能够运行您的程序而不会出现任何错误。
绝对可以使用点,因为它可以跨平台运行。 Mac / WIndows / Linux
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.