給新手 Java 開發(fā)者的 7 點提示
Java 是一個多功能的編程語言,在某種程度上,它用在幾乎所有可能涉及計算機(jī)的行業(yè)了里。Java 比較的大優(yōu)勢是,它運行在一個 Java 虛擬機(jī)(JVM)中,這是一個翻譯 Java 代碼為與操作系統(tǒng)兼容的字節(jié)碼的層。只要有 JVM 存在于你的操作系統(tǒng)上 —— 不管這個操作系統(tǒng)是在一個服務(wù)器(或“ 無服務(wù)器 ”,也是同樣的)、桌面電腦、筆記本電腦、移動設(shè)備,或嵌入式設(shè)備 —— 那么,Java 應(yīng)用程序就可以運行在它上面。
這使得 Java 成為程序員和用戶的一種流行語言。程序員知道,他們只需要寫一個軟件版本就能最終得到一個可以運行在任何平臺上的應(yīng)用程序;用戶知道,應(yīng)用程序可以運行在他們的計算機(jī)上,而不用管他們使用的是什么樣的操作系統(tǒng)。
很多語言和框架是跨平臺的,但是沒有實現(xiàn)同樣的抽象層。使用 Java,你針對的是 JVM,而不是操作系統(tǒng)。對于程序員,當(dāng)面對一些編程難題時,這是阻力最小的線路,但是它僅在當(dāng)你知道如何編程 Java 時有用。如果你剛開始學(xué)習(xí) Java 編程,這里有你需要知道的七個基礎(chǔ)的提示。
但是,首先,如果你不確定是否你安裝了 Java ,你可以在一個終端(例如 Bash 或 PowerShell )中找出來,通過運行:
- $ java --version
- openjdk 12.0.2 2019-07-16
- OpenJDK Runtime Environment 19.3 (build 12.0.2+9)
- OpenJDK 64-Bit Server VM 19.3 (build 12.0.2+9, mixed mode, sharing)
如果你得到一個錯誤,或未返回任何東西,那么你應(yīng)該安裝 Java 開發(fā)套件 (JDK)來開始 Java 開發(fā)?;蛘撸惭b一個 Java 運行時環(huán)境(JRE),如果你只是需要來運行 Java 應(yīng)用程序。
1、Java 軟件包
在 Java 語言中,相關(guān)的類被分組到一個軟件包中。當(dāng)你下載 JDK 時所獲得的 Java 基礎(chǔ)庫將被分組到以 java 或 javax 開頭的軟件包中。軟件包提供一種類似于計算機(jī)上的文件夾的功能:它們?yōu)橄嚓P(guān)的元素提供結(jié)構(gòu)和定義(以編程術(shù)語說,命名空間)。額外的軟件包可以從獨立開發(fā)者、開源項目和商業(yè)供應(yīng)商獲得,就像可以為任何編程語言獲得庫一樣。
當(dāng)你寫一個 Java 程序時,你應(yīng)該在你的代碼是頂部聲明一個軟件包名稱。如果你只是編寫一個簡單的應(yīng)用程序來入門 Java,你的軟件包名稱可以簡單地用你的項目名稱。如果你正在使用一個 Java 集成開發(fā)環(huán)境,如 Eclipse ,當(dāng)你啟動一個新的項目時,它為你生成一個合乎情理的軟件包名稱。
- package helloworld;
- /**
- * @author seth
- * An application written in Java.
- */
除此之外,你可以通過查找它相對于你的項目整體的路徑來確定你的軟件包名稱。例如,如果你正在寫一組類來幫助游戲開發(fā),并且該集合被稱為 jgamer,那么你可能在其中有一些唯一的類。
- package jgamer.avatar;
- /**
- * @author seth
- * An imaginary game library.
- */
你的軟件包的頂層是 jgamer,并且在其內(nèi)部中每個軟件包都是一個獨立的派生物,例如 jgamer.avatar 和 jgamer.score 等等。在你的文件系統(tǒng)里,其目錄結(jié)構(gòu)反映了這一點,jgamer 是包含文件 avatar.java 和 score.java 的頂級目錄。
2、Java 導(dǎo)入
作為一名通曉多種語言的程序員,比較大的樂趣是找出是否用 include、import、use、require,或一些其它術(shù)語來引入你不管使用何種編程語言編寫的庫。在 Java 中,順便說一句,當(dāng)導(dǎo)入你的代碼的需要的庫時,使用 import 關(guān)鍵字。
- package helloworld;
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- /**
- * @author seth
- * A GUI hello world.
- */
導(dǎo)入是基于該環(huán)境的 Java 路徑。如果 Java 不知道 Java 庫存儲在系統(tǒng)上的何處,那么,就不能成功導(dǎo)入。只要一個庫被存儲在系統(tǒng)的 Java 路徑中,那么導(dǎo)入能夠成功,并且?guī)炷軌虮挥糜跇?gòu)建和運行一個 Java 應(yīng)用程序。
如果一個庫并不在 Java 路徑中(因為,例如,你正在寫你自己的庫),那么該庫可以與你的應(yīng)用程序綁定在一起(協(xié)議許可),以便導(dǎo)入可以按預(yù)期地工作。
3、Java 類
Java 類使用關(guān)鍵字 public class 聲明,以及一個唯一的對應(yīng)于它的文件名的類名。例如,在項目 helloworld 中的一個文件 Hello.java 中:
- package helloworld;
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- /**
- * @author seth
- * A GUI hello world.
- */
- public class Hello {
- // this is an empty class
- }
你可以在一個類內(nèi)部聲明變量和函數(shù)。在 Java 中,在一個類中的變量被稱為字段。
4、Java 方法
Java 的方法本質(zhì)上是對象中的函數(shù)?;陬A(yù)期返回的數(shù)據(jù)類型(例如 void、int、float 等等),它們被定義為 public(意味著它們可以被任何其它類訪問)或 private(限制它們的使用)。
- public void helloPrompt(ActionEvent event) {
- String salutation = "Hello %s";
- string helloMessage = "World";
- message = String.format(salutation, helloMessage);
- JOptionPane.showMessageDialog(this, message);
- }
- private int someNumber (x) {
- return x*2;
- }
當(dāng)直接調(diào)用一個方法時,以其類和方法名稱來引用。例如,Hello.someNumber 指向在 Hello 類中的 someNumber 方法。
5、static
Java 中的 static 關(guān)鍵字使代碼中的成員可以獨立于包含其的對象而被訪問。
在面向?qū)ο缶幊讨?,你編寫的代碼用作“對象”的模板,這些對象在應(yīng)用程序運行時產(chǎn)生。例如,你不需要編寫一個具體的窗口,而是編寫基于 Java 中的窗口類的窗口實例(并由你的代碼修改)。由于在應(yīng)用程序生成它的實例之前,你編寫的所有代碼都不會“存在”,因此在創(chuàng)建它們所依賴的對象之前,大多數(shù)方法和變量(甚至是嵌套類)都無法使用。
然而,有時,在對象被通過應(yīng)用程序創(chuàng)建前,你需要訪問或使用其中的數(shù)據(jù)。(例如,除非事先知道球是紅色時,應(yīng)用程序無法生成一個紅色的球)。對于這些情況,請使用 static 關(guān)鍵字。
6、try 和 catch
Java 擅長捕捉錯誤,但是,只有你告訴它遇到錯誤時該做什么,它才能優(yōu)雅地恢復(fù)。在 Java 中,嘗試執(zhí)行一個動作的級聯(lián)層次結(jié)構(gòu)以 try 開頭,出現(xiàn)錯誤時回落到 catch,并以 finally 結(jié)束。如果 try 子句失敗,則將調(diào)用 catch,最后,不管結(jié)果如何,總是由 finally 來執(zhí)行一些合理的動作。這里是一個示例:
- try {
- cmd = parser.parse(opt, args);
- if(cmd.hasOption("help")) {
- HelpFormatter helper = new HelpFormatter();
- helper.printHelp("Hello <options>", opt);
- System.exit(0);
- }
- else {
- if(cmd.hasOption("shell") || cmd.hasOption("s")) {
- String target = cmd.getOptionValue("tgt");
- } // else
- } // fi
- } catch (ParseException err) {
- System.out.println(err);
- System.exit(1);
- } //catch
- finally {
- new Hello().helloWorld(opt);
- } //finally
- } //try
這是一個健壯的系統(tǒng),它試圖避免無法挽回的錯誤,或者,至少,為你提供讓用戶提交有用的反饋的選項。經(jīng)常使用它,你的用戶將會感謝你!
7、運行 Java 應(yīng)用程序
Java 文件,通常以 .java 結(jié)尾,理論上說,可以使用 java 命令運行。然而,如果一個應(yīng)用程序很復(fù)雜,運行一個單個文件是否會產(chǎn)生有意義的結(jié)果是另外一個問題。
來直接運行一個 .java 文件:
- $ java ./Hello.java
通常,Java 應(yīng)用程序以 Java 存檔(JAR)文件的形式分發(fā),以 .jar 結(jié)尾。一個 JAR 文件包含一個清單文件(可以指定主類、項目結(jié)構(gòu)的一些元數(shù)據(jù)),以及運行應(yīng)用程序所需的所有代碼部分。
要運行一個 JAR 文件,你可以雙擊它的圖標(biāo)(取決于你的操作系統(tǒng)設(shè)置),你也可以從終端中啟動它:
- $ java -jar ./Hello.jar
適合所有人的 Java
Java 是一種強(qiáng)大的語言,由于有了 OpenJDK 項目及其它的努力,它是一種開放式規(guī)范,允許像 IcedTea 、 Dalvik 和 Kotlin 項目的茁壯成長。學(xué)習(xí) Java 是一種準(zhǔn)備在各種行業(yè)中工作的好方法,而且, 使用 Java 的理由很多 。