Java編程思想是學習Java必讀之書,此書的內容跟名字一樣,主要是以思想為主,如果沒有編程經驗,此書確實有點不太適合你,如果你有C/C++編程經驗那這書正適合你,因為作者在內容中是以C/C++與Java作對比來學習的。如果你是直接學習Java可以先選擇Java核心技術來學習,這本書主要是以技術入門為主,雖然里面也同樣與C/C++作對比,但是學習起來會比Java編程思想要簡單的多。當你運用Java有一段時間后,一定要回過頭來學習Java編程這本書,因為它會讓你更進一步。
在此次我的blog計劃中,會把Java編程思想每一張的筆記都記錄在blog中,我在經常在網上看到有人說Java編程思想講得有點啰嗦,確實我讀此書也有這種想法,所以在我的blog中我會盡量減少,只會出現有關Java和內容,會把作者描述的C/C++對比方面省略掉,當然這只是做一個參考,建議大家一定要去學習完整的Java編程思想。
1.用引用操縱對象
Java中一切都視為對象,但實際操作對象是一個“引用”(reference)標識符。
這就如果,遙控器(引用)操作電視(對象)一樣,我們拿著遙控器就能與電視機保持連接。如果想要調整音量大小或者更換頻道時,我們實際上是操作的遙控器,再由控制器調控電視機。我們可以帶著控制器在房間四處走動,同樣也可以操作電視機。
控制器和電視機是同時可以單獨存在的,沒有電視機,遙控器也可單獨存在。
String s;
在上面我們創建了一個String的引用,但它只是一樣引用,并未與任何一個對象相關聯,如果你嘗試向s發送消息,則會得到一個運行時異常,所以一種安全的做法是,在我們創建一個引用同時便為進行初始化。
String s = "init";
上面的String是Java中的一種特殊類型,所以可以直接使用帶引號的文本進行初始化,通常,必須對Java中的對象采用一種更通用的初始化方法。
2.必須由自己創建所有的對象
通常我們使用new操作符來創建一個對象。
String s = new String("init");
上面是創建一個String對象同時初始化并把該對象的引用賦值給s,此時s便是一個對象的引用(s并非是一個對象,只是一個引用)。
2.1.存儲位置
Java中有5個不同的數據存儲區:
1).寄存器:它位于處理器內部是最快的存儲區。但寄存器極其有限,它是根據需求進行分配,我們不能直接操作也不能在程序中感覺到它的存在。
2).堆棧:位于通用RAM(隨機訪問存儲器)中通過堆棧指針可以處理器哪里操作堆棧。指針向下移動則分配新的內存;若向上移動則釋放那些內存,速度公次于存儲器,但Java必須知道存儲在堆棧內所有項的確切生命周期,以便上下移動指針。這限制了程序的靈活性,所以只有某些Java數據存儲于堆棧中(對象的引用),Java對象并不存放于其中。
3).堆:通用的內存池,用于存放所有的Java對象。存儲在堆里的數據編譯器不需要知道存活多長時間。當使用new創建一個對象時,會自動在堆里存儲分配。為了這種靈活性也犧牲更多的時間。
4).常量存儲:常量通過直接存放于代碼的內部,因為他們永遠不會被改變。
5).非RAM存儲:該存儲于程序之外,即使程序停止依然保持自己的狀態如(流對象,持久化對象)。對象轉化為字節流,發送給另一臺機器,“持久化對象”即對象被存儲于磁盤或者其他媒介上,在需要時可恢復常規對象。
2.2.基本數據類型
在Java中經常用到這樣一系列特殊對象的“基本類型”,new創建對象會存儲在“堆”里,如果是一些特別小的、簡單的類型,往往不是那么有效,在Java中提供一些不需要使用new創建變量,而是創建一個
并非引用的“自動”變量。這個變量直接存儲“值”并存放于堆棧中。
Java中的所有基本類型所占的存儲空間大小是固定的,不會因為硬件架構變化而變化。
3.第一個Java程序
package com.onlyeffort.java.concurrency;
// 可替換為:import java.util.*;
import java.util.Random;
//定義一個公共類名為:HelloWorld
public class HelloWorld {
// main方法,程序的入口,結構不可變,主體可變
public static void main(String[] args) {
// body start..大括號開始
// 創建一個對象
HelloWorld hw = new HelloWorld();
// 使用hw引用調用say方法
System.out.println(hw.say());
// body end..大括號結束
}
/**
*
* @return 返回一個字符串,并打出出值.
*/
public String say() {
Random rand = new Random();
return "Hello,World!" + rand.nextInt();
}
}
第一行為包聲明語句,包名全為小寫,一般為域名的反轉形式,防止出現沖突,因為域名在全球是唯一的。
當我們需要使用其它公共的類組件時需要使用import語句引入類。但java編譯器在每個Java文件編譯時會自動引用java.lang.*;下面的所有類,只是lang包下面的所有,但并不包含lang下面的子包,如果我們需要使用java.lang.reflect.Array;時,還需要我們手動引用。
main方法是Java運行時程序的入口,結構單一不可改變。在main方法中我們創建了一個HelloWorld對象,并把它賦值給hw,此時hw是一個HelloWorld對象的一個引用,hw并非是一個對象。在后面我們調用了HelloWorld的say方法,此方法返回一個字符串,在say方法中,我們創建了一個隨機數,并把它與一個字符串相連接。rand.nextInt()方法會返回一個int類型的整數,這里Java編譯器會執行類型轉換,把int類型轉換為String類型并執行字符串連接。在最后我們使用了return語句返回這個方法的返回值。
return在Java程序中有兩種作用,一:會結束當前方法(return;);二:返回某個方法的返回值(return value;)。
在這個HelloWorld中出現了“//”、“/***/”這都是Java當中的注釋。Java編譯器編譯時會忽略注釋后面的所有內容。
轉載時請注明轉載地址,onlyeffort.QQ:501276913
posted on 2010-06-02 15:24
Aidan 閱讀(379)
評論(0) 編輯 收藏 所屬分類:
JavaSE