命令行cmd使用javac編譯java程序


1.1 編譯選項

在cmd中執行javac -help可以看到幫助信息

D:\temp>javac -help
用法: javac <options> <source files>
其中, 可能的選項包括:
  -g                         生成所有調試信息
  -g:none                    不生成任何調試信息
  -g:{lines,vars,source}     只生成某些調試信息
  -nowarn                    不生成任何警告
  -verbose                   輸出有關編譯器正在執行的操作的消息
  -deprecation               輸出使用已過時的 API 的源位置
  -classpath <路徑>            指定查找用戶類文件和注釋處理程序的位置
  -cp <路徑>                   指定查找用戶類文件和注釋處理程序的位置
  -sourcepath <路徑>           指定查找輸入源文件的位置
  -bootclasspath <路徑>        覆蓋引導類文件的位置
  -extdirs <目錄>              覆蓋所安裝擴展的位置
  -endorseddirs <目錄>         覆蓋簽名的標准路徑的位置
  -proc:{none,only}          控制是否執行注釋處理和/或編譯。
  -processor <class1>[,<class2>,<class3>...] 要運行的注釋處理程序的名稱; 繞過默認的搜索進程
  -processorpath <路徑>        指定查找注釋處理程序的位置
  -parameters                生成元數據以用於方法參數的反射
  -d <目錄>                    指定放置生成的類文件的位置
  -s <目錄>                    指定放置生成的源文件的位置
  -h <目錄>                    指定放置生成的本機標頭文件的位置
  -implicit:{none,class}     指定是否為隱式引用文件生成類文件
  -encoding <編碼>             指定源文件使用的字符編碼
  -source <發行版>              提供與指定發行版的源兼容性
  -target <發行版>              生成特定 VM 版本的類文件
  -profile <配置文件>            請確保使用的 API 在指定的配置文件中可用
  -version                   版本信息
  -help                      輸出標准選項的提要
  -A關鍵字[=值]                  傳遞給注釋處理程序的選項
  -X                         輸出非標准選項的提要
  -J<標記>                     直接將 <標記> 傳遞給運行時系統
  -Werror                    出現警告時終止編譯
  @<文件名>                     從文件讀取選項和文件名

1.2 編譯Java程序

1.2.1 直接編譯當前目錄下文件

編寫以下代碼並保存成Date2.java:

import java.util.Calendar;
import java.util.Locale;

public class Date2 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        System.out.println("獲取時間: " + calendar.getTime());
    }
}

然后在命令行執行javac Date2.java即可編譯,
接着執行java Date2即可運行程序:

1.2.2 帶有包路徑的編譯

我們在當前文件夾下新建com/amnotgcs文件目錄,
並在里面創建Num3.java,即com/amnotgcs/Num3.java
輸入下面代碼:

package com.amnotgcs;

import java.util.Scanner;
import java.text.NumberFormat;
import java.text.ParseException;

public class Num3 {
    public static void main(String[] args) throws ParseException {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("Please input a num: ");
        String input = scanner.next();
        
        NumberFormat nf = NumberFormat.getInstance();
        System.out.println(nf.parse(input));
    }
}

然后我們在當前文件夾下執行javac com/amnotgcs/Num3.java編譯程序,
接着執行java com.amnotgcs.Num3java com/amnotgcs/Num3來運行程序:

我們這樣編譯時因為代碼中有了包路徑,直接編譯會報找不到類錯誤,
當然我們也可以使用另一種編譯方式。
我們在Num3.java所在目錄執行javac -d . Num3.java來編譯程序,
這樣編譯會在當前目錄產生pacage所指定的目錄,並編譯程序。

1.2.3 指定編碼編譯

我們仍使用1.2.1的代碼,
在編譯后后運行可能會出現亂碼的情況:

這是由於編碼不統一導致的錯誤,
這涉及到了兩個編碼:一個時命令行所使用的編碼,一個是你.java文件使用的編碼。
只有你輸出時cmd的編碼和你編譯時.java文件的編碼一樣才能正常輸出。

所以要想正確輸出:
1、你可以更改.java文件的編碼和你cmd編碼一致
2、或者你可以更改cmd編碼和你.java文件編碼一致
3、編譯時指定編碼

在cmd中執行chcp可以查看編碼,也可以執行chcp xxxx臨時設置編碼,
比如chcp 65001設置為UTF-8編碼,
chcp 936設置為GBK編碼。

文件的編碼可以在保存或另存為時選擇編碼,
或在其他文本編輯器中直接指定編碼,
比如在notepad3中直接指定編碼:

編譯時指定編碼:
用法:-encoding <編碼> 指定源文件使用的字符編碼
下圖編譯時文件使用的是UTF-8編碼,所以我用-encoding UTF-8指定了UTF-8編碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM