我們先來了解一下什麼是 J2SE。
J2SE 的定義
J2SE
,全稱爲Java 2 Standard Edition
。Java 2 平臺包括:標準版(J2SE)、企業版(J2EE)和微縮版(J2ME)三個版本。J2SE 即 Java 2 的標準版,主要用於桌面應用軟件的開發。
下面這段話是 ORACLE 對於 Java SE 的官方描述:
Java Platform, Standard Edition (Java SE) 可以讓您在桌面和服務器以及目前要求較高的嵌入式環境中開發和部署 Java 應用程序。 Java 提供了當今應用程序所需要的豐富的用戶界面、良好的性能、多功能性、可移植性和安全性。
J2SE 與 J2EE、J2ME 之間的關係可以通過下圖來表示:
J2SE 的架構
J2SE 的架構如下圖所示,它主要包含了 UI、集成庫、語言和工具基礎庫、其他基礎庫、Java 虛擬機等組件。
綜上所述,將 J2SE 壓縮一點再加上一些CLDC等方面的特性就是 J2ME;將其擴充一點再增加一些 EJB 等企業應用方面的特性就是 J2EE。因此 J2SE 是 J2EE 的基礎,建議從事 Java 的開發人員從 J2SE 開始學習。
面對對象——鞏固與提高
在前面 Java 基礎語法的學習中,你應該接觸了一些面向對象的基礎知識。面向對象的概念在 Java 的開發體系中無處不在,在今後的開發過程中,你也應該以面向對象的思想來看待和解決問題。
既然是面向對象,就會談論到類和對象的概念,以及它們之間的關係:
類是現實世界或思維世界中的實體在計算機中的反映,它將數據以及這些數據上的操作封裝在一起。對象是具有類類型的變量。
類是對象的抽象,而對象是類的具體實例。類是抽象的,不佔用內存,而對象是具體的,佔用存儲空間。類是用於創建對象的藍圖,它是一個定義包括在特定類型的對象中的方法和變量的軟件模板。
下面,我們通過一些例子來鞏固面向對象的相關知識。
自定義圖書類
我們首先在 Eclipse 中創建一個名爲HelloJ2SE
的 Java Project,這裏我們選用 Java 1.8,再在 src 文件夾下新建一個名爲com.shiyanlou.course
的包。
注意:我們建議你在之後的項目創建中都使用 1.8 版本
然後我們在這個包裏添加一個Book
類。
對於一個圖書類,一般有書名、作者和編碼等屬性。我們利用這些常見屬性來自定義這個圖書類,創建的Book.java
文件中主要代碼如下:
特別說明: 在實驗樓的實驗環境中,暫不支持輸入中文,因此你不必將代碼片段中的註釋也輸入開發環境。該說明同樣適用於本課程後續的章節。
package com.shiyanlou.course;
//此爲包名,如果你在創建包時已自動生成了該行,請忽略
public class Book {
private String name; // 書名
private String author; // 作者
private String ISBN; // 編碼
//Tips: ISBN是國際標準書號,每本書背面的條形碼即爲此物
public Book(String name, String author, String ISBN) {
// 利用構造方法初始化域
this.name = name;
this.author = author;
this.ISBN = ISBN;
//Q:你清楚this的用法嗎?
}
public String getName() { // 獲得書名
return name;
}
public String getAuthor() { // 獲得作者
return author;
}
public String getISBN() { // 獲得編碼
return ISBN;
}
}
爲了測試我們剛剛自定義的圖書類,我們在com.shiyanlou.course
這個包中再創建一個名爲Test
的類文件,並在main()
方法中創建一個Book
對象。最後,我們在控制檯輸出這個Book
對象的屬性。
創建的Test.java
文件中,主要的代碼如下:
package com.shiyanlou.course;
public class Test {
public static void main(String[] args) {
Book book = new Book("This is my 1st book", "Peter", "1234567890");
// 創建Book對象並設定其各個屬性
System.out.println("Book Name: " + book.getName());
// 輸出這本書的名字
System.out.println("Book Author: " + book.getAuthor());
// 輸出這本書的作者
System.out.println("ISBN: " + book.getISBN());
// 輸出這本書的編碼
}
}
點擊編譯並運行。
如果在控制檯中可以看到下圖這樣的信息,那麼祝賀你,一個自定義的圖書類就成功完成了。
當然,你也可以爲Book
類添加更多的屬性,併爲每個屬性編寫get
方法。
動態化實例類
在面向對象的編程中,把用類創建對象的過程稱爲實例化。通常是使用有參數或無參數的構造方法來創建對象。其格式如下:
//有參數的情形
CLASS_NAME OBJECT_NAME = new CLASS_NAME(parameter_1,...parameter_n);
//例如下面這個例子
Person peter = new Person("Peter","boy");
//無參數的情形
CLASS_NAME OBJECT_NAME = new CLASS_NAME();
//例如下面這個例子
Dog dog_1 = new Dog();
你可以仿照自定義圖書類的例子,通過自己創建相關的Person
類和Dog
類以及測試的方法來驗證上述過程。
但是在 Java 中,類的實例化方法一共有四種途徑:
- 使用
new
操作符 - 調用 Class 對象的
newInstance()
方法 - 調用
clone()
方法,對現有實例的拷貝 - 通過
ObjectInputStream
的readObject()
方法反序列化類
我們在自定義圖書類這個例子中,編寫了有參數的構造方法public Book(String name, String author, String ISBN)
。但如果類中沒有定義構造方法,編譯器便會自動添加一個無參數的構造方法。使用構造方法創建對象雖然常用,但並不靈活。因此,我們再來了解一下動態化實例類,也就是調用 Class 對象的newInstance()
方法,通過反射創建對象。
瞭解一下反射的概念:
JAVA 反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取信息以及動態調用對象的方法的功能稱爲 java 語言的反射機制。
那麼我們就開始來學習如何動態化實例類:
請在 Eclipse 中創建一個項目DynamicClass
,並在該項目中創建com.shiyanlou.course
包。在該包中創建Test
類,並編寫main()
方法。
在main()
方法中創建一個 File 對象(你只需要知道 File 對象也是一個對象即可,進一步瞭解 File 對象)。
最後,使用該對象在桌面創建一個文本文件。
主要的代碼如下:
package com.shiyanlou.course;
import java.io.File;
import java.lang.reflect.Constructor;
//需要引用上述兩個包
public class Test {
public static void main(String[] args) {
try {
Constructor<File> constructor = File.class.getDeclaredConstructor(String.class);
//獲得File類的Constructor對象
System.out.println("Create File Object with reflection.");
//使用反射創建File對象
File file = constructor.newInstance("/home/shiyanlou/Desktop/MyFile.txt");
System.out.println("Use File Object to create MyFile.txt on desktop.");
//指定了創建的路徑爲桌面,名稱爲“MyFile.txt”
file.createNewFile(); //創建新的文件
System.out.println("File is created ?" + file.exists());
//驗證文件是否創建成功
} catch (Exception e) {
e.printStackTrace();
}
}
}
你可能會問爲什麼會用到try
、catch
以及Exception
之類的奇怪的東西,這是由於上述代碼會拋出大量的異常。我們通常不推薦這樣寫。不用擔心,我們將在錯誤處理一章爲你詳細介紹他們的原理和用法。
點擊編譯並運行,如果在控制檯可以看到下列信息則表示你成功了。
同時,你也應該可以在桌面上發現自己創建的這個MyFile.txt
文件。
實驗總結
前面我們講了 J2SE 的基本概念和架構,複習了面向對象中類和對象、動態實例化類的相關知識。如果想要學號 J2SE,建議大家再積累一些數據結構相關知識,以便更好地投入到後續的學習中。
J2SE 的整個體系還是很龐大的,實驗樓的新課《J2SE 基礎入門實戰》會力所能及地涵蓋其核心的知識點,如果你想更加深入地學習 Java 知識,我們還推薦你去閱讀《Java 2 核心技術》等書籍。