用户晴天 發表於 2026-1-24 17:04:00

JAVA自学之路1.1:JAVA入门纠错

<h1 id="11java入门纠错">1.1、JAVA入门纠错</h1>
<p>在JAVA入门这篇文章里有些问题和错误需要纠正,懒得再改那篇文章了,直接写在这好了。</p>
<pre><code class="language-java">package test.test1;

public class HelloWorld {
    public static void main(String[] args) {
      System.out.println("Hello World");
    }
}
</code></pre>
<p>在之前的文章里,我将HelloWorld.java文件放在了E盘根目录下,然后自己创建了:<code>E:\test\test1</code>这个目录。然后执行了<code>javac -encoding utf-8 -d . HelloWorld.java</code>,.class文件也正常生成在了目标路径下。然后也能正常运行。</p>
<p><strong>但是我忘记说这个命令需要注意当前工作目录了!</strong></p>
<p>假设我的当前工作目录是:<code>E:\test\test1</code>,然后执行<code>javac -d . HelloWorld.java</code>,会发生下面的状况:</p>
<p><img src="https://gitee.com/mu-shen-yu/pic/raw/master/20260124162042937.png"></p>
<p><img src="https://gitee.com/mu-shen-yu/pic/raw/master/20260124162233718.png"></p>
<p>它在这个test1文件夹下又创建了一个<code>\test\test1</code>!因为这条命令里<code>javac</code>的执行逻辑如下:</p>
<ul>
<li>读取你的 <code>.java</code> 文件;</li>
<li>发现 <code>package test.test1;</code>,在当前目录(<code>.</code>)下创建 <code>test\test1\HelloWorld.class</code>(由 <code>-d</code> 指定)。</li>
</ul>
<p><strong><code>javac</code> 编译器在编译时,并不会强制检查源文件的物理路径是否和 <code>package</code> 声明一致</strong>,它只做上面的两件事。</p>
<p>关于<code>-d</code>指令:<code>-d</code> 是 <code>javac</code>(Java 编译器)命令中的一个<strong>非常重要且常用</strong>的选项,它的全称是 <strong>“destination”</strong>,意思是:<strong>指定编译后生成的 <code>.class</code> 文件存放的根目录</strong>。格式如下:</p>
<pre><code class="language-java">javac -d &lt;目标目录&gt; &lt;源文件&gt;.java
</code></pre>
<p>如果我在<code>E:\test\test1</code>这个目录使用命令行,然后执行<code>javac -d . HelloWorld.java</code>,因为<code>javac</code>没有在这个目录里找到<code>\test\test1</code>这个目录,那么它就会自动创建子目录:</p>
<pre><code class="language-java">E:\test\test1\test\test1\HelloWorld.class   ❌ 错了!
</code></pre>
<p>正确做法就是我之前上一篇文章的演示,在E盘根目录下执行该命令。</p>
<p>那如果你不小心将<code>.java</code>文件放在这个目标文件夹下,还想要正常执行编译的话得换个命令:</p>
<p><img src="https://gitee.com/mu-shen-yu/pic/raw/master/20260124165953168.png"></p>
<p><img src="https://gitee.com/mu-shen-yu/pic/raw/master/20260124170016390.png"></p>
<p>其实这种做法更加方便,因为当前工作目录就是package指定路径所以可以直接用<code>javac</code>编译。</p>
<p>如果源代码里有中文就改成<code>javac -encoding utf-8 HelloWorld.java</code>。</p>
<p>我个人更加推荐这种做法,把源文件放在目标路径下更符合标准,也方便文件管理,而且IDEA创建JAVA类也是这么干的。</p><br><br>
来源:https://www.cnblogs.com/Rosemary220505/p/19527058
頁: [1]
查看完整版本: JAVA自学之路1.1:JAVA入门纠错