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反编译工具


<<:  NetSuite Reporting - Saved Search

>>:  Day11 远端共同协作 - 使用 GitHub

Day11-Database——效能的储备足够吗?-N+1 query

标题参考来源 大家好~ 今天来简单认识一下 N+1 query 吧! 什麽是 N+1 query 呢...

【Day19】SPI 状态机的实现

SPI是什麽? SPI(Serial Peripheral Interface),是一种同步的传输协...

JavaScript Day03 - 变数(2)

变数(variable)-Number Day05 - 变数(02):说明变数的计算与跟字串搭配的结...

ASP.NET MVC 从入门到放弃(Day9) -C# nwe 建构子 static 介绍

接着来讲讲new 建构值部分.... public class Yaowen { public Ya...

Day 18 - Isomorphic Strings

大家好,我是毛毛。ヾ(´∀ ˋ)ノ 废话不多说开始今天的解题Day~ 205. Isomorphic...