iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
自我挑戰組

展開JDK工具的30天應用之旅系列 第 5

Day5- Java語言編譯器:javac & 運行工具:java (下)

接續著上篇的內容,這篇要介紹情境二、三~

情境二:引用到其他的java檔

Step1.先創建資料夾及相關檔案,目錄結構如下:

javac_practice
|-Controller
    |--LinkPersonal.java
|-Model
    |--Personal.java

Step2.撰寫檔案內容如下:

Personal.java

package Model;

public class Personal{

	private String name;
	private String age;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
}

LinkPersonal.java

package Controller;
import Model.Personal;

public class LinkPersonal {

  public static void main(String[] args){
      Personal personal = new Personal();
      personal.setName("王小明");
      System.out.print("名字:"+personal.getName());
  }
}

Step3.進行編譯

javac Controller/LinkPersonal.java

注意!!在LinkPersonal檔案中有使用到import
在編譯(javac)/運行(java)檔案時,務必在程式碼中可讀取import路徑的位置進行編譯

以我示範的案例中,我要在javac_practice那層資料夾,才可以進行編譯。
若我在不對的位置進行編譯,便會出現以下錯誤訊息:
https://ithelp.ithome.com.tw/upload/images/20210919/20140481jhvOrUeWSs.png

Step4.檔案中有使用到import還有個重點,直接執行編譯LinkPersonal這檔案時,便會將程式中有引用到的相關檔案都進行編譯

範例:
https://ithelp.ithome.com.tw/upload/images/20210919/20140481bjSUATaTtR.png
Personal.class便是一起被編譯出來的檔案

Step5.使用java指令運行

java Controller/LinkPersonal

java Controller.LinkPersonal

以上兩種寫法皆可運行
https://ithelp.ithome.com.tw/upload/images/20210919/20140481hqaRjK6BQj.png

正常執行後,會出現在程式碼中賦予給Personal.name屬性的值打印出來

情境三:引用外部jar

Step1.沿用情境二的目錄結構,新增一個檔案:UseJson.java,以及加入Json.jar

javac_practice
|-json.jar
|-Controller
    |--LinkPersonal.java
    |--UseJson.java
|-Model
    |--Personal.java

json.jar,我是從mvnrepository搜尋JSON後下載的,載下來後更改檔名。

Step2.撰寫檔案內容如下:

UseJson.java

package Controller;

import Model.Personal;
import org.json.JSONObject;

public class UseJson{

  public static void main(String[] args) {
    Personal personal = new Personal();
    personal.setName("王小明");
    personal.setAge("18");
    JSONObject jsonObjectPersonal = new JSONObject(personal);
    System.out.println("personal物件內容為:"+jsonObjectPersonal);
  }
}

Step3.進行編譯

javac -cp .:json.jar Controller/UseJson.java

javac -classpath .:json.jar Controller/UseJson.java

在UseJson程式碼中引用到了第三方的jar,編譯(javac)時需加入-cp(-classpath)參數
官網的解釋如下
classpath:Specifies where to find user class files, and (optionally) annotation processors and source files. This class path overrides the user class path in the CLASSPATH environment variable. If neither CLASSPATH, -cp nor -classpath is specified, then the user class path is the current directory.

注意!!使用 cp 選項 一定要加 . 符號,這個表示當前路徑也在classpath 中,多個classpath 路徑 使用:符號分隔(windows環境 用;分隔);如果不加 . 當前路徑需要編譯的java檔案是尋找不到的會報錯。

我在這個地方也是踩了好大的一個坑,我一直沒有加上./images/emoticon/emoticon17.gif
就一直出現下圖的畫面...

https://ithelp.ithome.com.tw/upload/images/20210919/20140481pd63qE5gMH.png

Step4.使用java指令運行,也需要帶上cp參數

java -cp .:json.jar Controller/UseJson

java -classpath .:json.jar Controller/UseJson

https://ithelp.ithome.com.tw/upload/images/20210919/20140481oF27yITrRD.png

心得

javacjava這兩個指令真的要好好學起來,當遇到需要原始程式碼丟失,又必須要維運code 的時候,這兩個指令就派上用場啦!!
下篇接著要來介紹的是javap反編譯工具


上一篇
Day4- Java語言編譯器:javac & 運行工具:java (上)
下一篇
Day6-Java反編譯工具:javap
系列文
展開JDK工具的30天應用之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言