文檔都是基於 實驗樓 線上環境制作的,因此文檔敘述和截圖均與其有關。使用其他實驗環境也沒有太大影響,知識點的操作是類似的。該系列的課程是在 實驗樓 實習所原創的第一個課程,歡迎大家多提意見。
一、實驗簡介
在本章學習開始前,你應該具備一些Java的基礎知識。我們將在本章來認識J2SE,並復習一下前面學過的面向對象的相關知識。
注:所有的藍色文字都是帶超鏈接的,這些鏈接是本課程為你提供的擴展知識點,一定不要錯過。
本章知識點
- J2SE的定義和架構
- 面向對象
二、什么是J2SE
1. 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之間的關系可以通過下圖來表示:
2. J2SE的架構
J2SE的架構如下圖所示,它主要包含了UI、集成庫、語言和工具基礎庫、其他基礎庫、Java虛擬機等組件。
綜上所述,將J2SE壓縮一點再加上一些CLDC等方面的特性就是J2ME;將其擴充一點再增加一些EJB等企業應用方面的特性就是J2EE。因此J2SE是J2EE的基礎,建議從事Java的開發人員從J2SE開始學習。
三、面向對象——鞏固與提高
在前面Java基礎語法的學習中,你應該接觸了一些面向對象的基礎知識。面向對象的概念在Java的開發體系中無處不在,在今后的開發過程中,你也應該以面向對象的思想來看待和解決問題。
既然是面向對象,就會始終談論到類和對象的概念,以及它們之間的關系:
類
是現實世界或思維世界中的實體在計算機中的反映,它將數據以及這些數據上的操作封裝在一起。對象
是具有類類型的變量。
類
是對象
的抽象,而對象
是類
的具體實例。類
是抽象的,不占用內存,而對象
是具體的,占用存儲空間。類
是用於創建對象
的藍圖,它是一個定義包括在特定類型的對象中的方法和變量的軟件模板。
下面,我們通過一些例子來鞏固面向對象的相關知識。
1. 自定義圖書類
首先在Eclipse中創建一個項目HelloJ2SE
,新建一個名為com.shiyanlou.course
的包。
然后在這個包里面添加一個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
方法。
2. 動態化實例類
在面向對象的編程中,把用類創建對象的過程稱為實例化。通常是使用有參數或無參數的構造方法來創建對象。其格式如下:
//有參數的情形
類名 對象名 = new 類名(參數1,參數2...參數n);
//例如下面這個例子
Person peter = new Person("Peter","boy");
//無參數的情形
類名 對象名 = new 類名();
//例如下面這個例子
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的整個體系還是很龐大的,本課程會力所能及地涵蓋其核心的知識點,如果你想更加深入地學習Java知識,我們還推薦你去閱讀《Java 2核心技術》等書籍。
五、作業
好了,我們今天的認識J2SE課程就講完了,你對Java這個大家庭又了解了多少?
不妨通過解決下面的問題來鞏固今日所學吧。
一個學校里面有老師和學生,他們具有一些相同的屬性,例如姓名
、生日
、性別
等。但老師還有一個特別的工齡
屬性,請嘗試利用學生類來編寫老師類,利用繼承技術讓老師類使用學生類中定義的屬性和方法,並且為老師類創建新的工齡
屬性。
為什么要這樣做?因為繼承技術可以讓你少寫很多代碼啊…