我是java新手。当我尝试在5分钟内学习Maven时,我发现这个命令
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
Run Code Online (Sandbox Code Playgroud)
工作方式与
java -cp target/my-app-1.0-SNAPSHOT.jar com/mycompany/app/App
Run Code Online (Sandbox Code Playgroud)
这让我发疯,因为第二个命令中的最后一个参数实际上是一条路径。“.” 和有什么不一样?和java类名中的“/”?
我查了一些文章,但还是没明白。
Bri*_*etz 17
这是泄露的实施细节。主要由于不相关的历史原因,语言中的类名称是点分隔的,但类文件格式中的类名称是斜杠分隔的。(https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.2。)在大多数情况下,内部名称对用户不可见,但它们确实会泄漏某些情况下。许多处理类文件的工具将使用类似 的名称从外部(点)名称转换为内部(斜线)名称replace('.', '/'),其效果是工具也接受内部名称。这就是这里发生的事情。