ava基礎知識小總結
在獨立的原始程式裡,只能有一個 public 類,卻可以有許多 non-public 類別。
此外,若是在一個 Java 程式中沒有一個類別是 public,那麼該 Java 程式的檔案名稱就可以隨意命名了。
文件註釋,是以單斜線加兩個星形標記( /**)開頭,並以一個星形標記加單斜線(*/)結束。用這種方法註釋的內容會被解釋成程序的正式文檔,並能包含進如 javadoc之類的工俱生成的文檔裡,用以說明該程序的層次結構及其方法。
Java 把整數常數的資料型別都視為int 型,因此,如果在程式中使用了超過2147483647 這個大小的常數,編譯時將會發生錯誤
要解決這個問題,只要在整數常數後面加上一個大寫的「 L」即可,此舉代表該常數是long 類型的整數常數。
最大值的程式碼是 MAX_VALUE,最小值是 MIN_VALUE。如果要取用某個類型的最大值或最小值,只要在這些程式碼之前,加上它們所屬的類別的全名即可。
f 換頁\ 反斜線
b 倒退一格' 單引號
r 歸位" 雙引號
在程式中已經定義好了資料型別的變量,若是想用另一種資料型別表示時, Java
會在下列的條件皆成立時,自動做資料型別的轉換:
1、 轉換前的資料型態與轉換後的型別相容。
若是將一個超出該變數可表示範圍的值賦值給這個變數時,這種轉換稱為縮小轉換。 ,此時就必須要做強制性的轉換。由左至右
1 [] 方括號運算子由左至右
2 !、 +(正號)、 -(負號) 一元運算子由右至左
2 ~ 位元邏輯運算子由右至左
2 ++、 -- 遞增與遞減運算子由右至左
3 *、 /、 % 算術運算子由左至右
4 +、 - 算術運算子由左至右
5 > 位元左移、右移運算子由左至右
6 >、 >=、 7 ==、 != 關係運算子由左至右
8 &(位元運算子AND ) 位元邏輯運算子由左至右
9 ^(位元運算符號XOR) 位元邏輯運算子由左至右
10 |(位元運算符號OR) 位元邏輯運算子由左至右
11 && 邏輯運算子由左至右
12 || 邏輯運算子由左至右
13 ?: 條件運算子由右至左
14 = 賦值運算子由右至左
1、 佔用位元組較少的型別轉換成佔用字節較多的型別。會轉換成double
型別。變數賦起始值。 ,則會跳出循
環,執行其他語句。是否繼續執行循環。
System.arrayCopy(source,0,dest,0,x):語句的意思是:複製來源數組從下標0 開始
的x 個元素到目標數組,從目標數組的下標0 所對應的位置開始訪問。
Arrays.sort(數組名 )為數組排序的操作
值得一提的是 Java 允許二維數組中每行的元素個數均不相同,這點與一般的程式
語言是不同的。
“匿名對象”,顧名思義,就是沒有明確的聲明的對象。讀者也可以簡單的理解
為只使用一次的對象,即沒有任何一個特定的對象名稱引用它。
有兩種方式可用於物件間的比較,它們是「 = =」運算子與equals()方法,「 = =」
運算元用於比較兩個物件的記憶體位址值是否相等, equals()方法用於比較兩個物件的內
容是否一致。
this 表示當前對象,而
所謂的當前對象就是指調用類別中方法或屬性的那個對象。
如果在程式中想用某一構造方法呼叫另一個構造方法,可以用 this 來實現,具體的
調用形式如下:
this() ;
在類別中的所有方法裡,只有建構方法是被優先呼叫的,所以使用this 呼叫建構方法必須也只能放在建構方法的第一行一個類別可以使用不包含在任何方法體中的靜態程式碼區塊,當類別被載入時,靜態程式碼區塊被執行,且只執行一次,靜態程式碼區塊常用來進行類別屬性的初始化,這部分內容你可以多看一些java影片教程,可以更好的理解。
構造方法雖然被私有了,但並不一定是說此類不能產生實例化對象,只是產生這個實例化對象的位置有所變化,即只能在本類中產生實例化對象。
內部類別在聲明時,會破壞程式的結構,在開發中往往不建議讀者去使用。
用 static 也可以
聲明內部類,用 static 聲明的內部類則變成外部類,但是用 static 聲明的內部類不能訪
問非 static 的外部類屬性。
內部類別也可以透過建立物件從外部類別之外被調用,只要將內部類別聲明為 public 即
可
在java影片的第一部分已經提到過, Java 支援三種形式的註解。前兩種是// 和/*… */。
第三種方式稱為文件註解。它以“ /**”開始,以“*/”標誌結束。文件註釋提供將
程式資訊嵌入到程式中的功能。開發者可以使用 javadoc 工具將資訊取出,然後轉換
為 HTML 檔案。
子類別物件在實例化時會預設先去呼叫父類別中的建構方法,之後再
呼叫本類別中的對應建構方法。
用 super 呼叫父類別中的建構方法,只能放在程式的第一行。
在抽象
類中聲明構造方法後,在子類中 必須明確調用
如果一個類沒
有使用 extends 關鍵字明確標識繼承另外一個類,那麼這個類就默認繼承 Object 類。
介面裡的資料成員必須初始化,且資料成員均為常數。
2、 介面裡的方法必須全部宣告為 abstract,也就是說,介面不能像抽象類別一樣保有一
般的方法,而必須全部是「抽象方法」。
介面與一般類別一樣,本身也具有資料成員與方法,但資料成員一定要賦初值,且
此值將無法再變更
介面是java 實作多重繼承的一種機制,一個類別只能繼承一個父類,但如果需要一
個類別繼承多個抽象方法的話,就明顯無法實現,所以就出現了介面的概念。一個類別只
可以繼承一個父類,但卻可以實作多個介面。
同樣的,介面的擴充(或繼承)也是透過關鍵字 extends 來實現的。有趣的是,
一個介面可以繼承多個介面
父類別用其本身類別實例化自己的對
象,但它並不知道誰是自己的子類,那肯定在轉換的時候會出現錯誤
可以用instanceof 判斷一個類別是否實作了某個接口,也可以用它來判斷一個實
例物件是否屬於一個類別。
前面已經介紹過Object 是所有類別的父類,其中的toString()方法是需要被複寫的,
如果讀者去查JDK 手冊,會發現在Object 類別中有一個equals 方法,此方法用於比較
物件是否相等,而且此方法必須被複寫
介面是無法直接實例化
的,因為介面中沒有建構方法,但是卻可以根據物件多態性的概念,透過介面的子類別
對其進行實例化
異常可分為兩大類: java.lang.Exception 類別與java.lang.Error 類別。這兩個類別均繼承
自 java.lang.Throwable 類別。
如果在類別的方法中用 throws 拋出一個異常,則在
調用它的地方就必須明確地用 try-catch 來捕捉。
jar 命令是 Java 中提供的一個非常有用的命令,可以用來對大量的類別(.class 檔案)
進行壓縮,然後存為.jar 檔案。
class 類別名稱extends Thread // 從Thread 類別擴展出子類別
{
修飾符run(){ // 複寫Thread 類別裡的run()方法
// 以執行緒處理的程式;
}
}
}
用start()可以啟動
也可透過implements Runnable實作
在Runnable 介面中並沒有start()方法,所以一個類別實作了
Runnable 介面也必須用Thread 類別中的start()方法來啟動多執行緒。
Thread 類別實作了 Runnable 接口,也就是說 Thread 類別也是
Runnable 介面的一個子類別。
一個類別繼承 Thread 類別之後,這個類別的物件無論呼叫
多少次 start()方法,結果都只有一個執行緒在運作。
new Thread(t).start();//其中t是一個實作了Runnable介面的類別
這樣連續呼叫多次之後會產生多個共享資料的執行緒
任何執行緒一般具有五種狀態,即創建、就緒、運行、阻塞、終止。 🎜允許兩個 Thread 物件有相同的名字,但為了清晰,應該盡量避免這種情況的發生。
如果程式並沒有為執行緒指定名稱,則系統會自動的為執行緒分配一個名稱
可以透過 isAlive()方法來測試執行緒是否已經啟動而且仍然在啟動。
如果某個執行緒對
像在啟動(呼叫 start()方法)之前呼叫了 setDaemon(true)方法,這個執行緒就變成了後
台執行緒。
進程中只有後台執行緒執行時,進程就會結束。
join()方法用來強制某一執行緒運行(強制運行完後再運行後面的執行緒)
在Thread 類別之中可以發現有一個名為sleep(long millis)的靜態方法,此方法用於
執行緒的休眠。
當一個執行緒運行時,另一個執行緒可以呼叫對應的 Thread 物件的 interrupt()方法來
中斷它。
也可以用 Thread 物件呼叫 isInterrupted()方法來檢查每個執行緒的中斷狀態。
一旦被打上interrupt狀態以後,執行緒執行到可中斷阻塞(有些中斷是不可以被中斷的)
的時候,就會拋出異常並且結束當前的操作,然後重置狀態。
synchronized(對象)
{
需要同步的代碼;
}
需要注意的是,同步監視器一般可以由任何對象充當,只要其唯一恆定就可以,
通常推薦使用可能被並發訪問的共享資源充當同步監視器。
除了可以對程式碼區塊進行同步外,也可以對函數實現同步,只要在需要同步的函數
定義前加上 synchronized 關鍵字即可。
wait()方法使目前執行緒等待,釋放對該同步器的鎖定。
notify()方法喚醒該同步器上等待的單一線程,對於喚醒的選擇是任意的。
notifyAll()喚醒全部等待的執行緒。
控制線程生命週期的方法有很多種,如: suspend 方法、 resume 方法和 stop 方法。
雖然 stop 能夠避免死鎖的發生,但是也有其它的不足:如果一個線程正在操作共
享數據段,操作過程沒有完成就被“ stop”了的話,將會導致數據的不完整性。
圖9-11線程的生命週期
透過控制 run 方法中循環條件的方式來結束一個執行緒的方法是推薦讀取
者使用的,這也是實際中用的最多的方法。
StringBuffer 類別用於內容可以改變的字串,可以將其它各種類型的資料增加、插
入到字串中,也可以轉置字串中原來的內容。
在實際開發中,如果需要頻繁改變字串的內容就需要考慮用 StringBuffer 類別
現,因為其內容可以改變,所以執行效能會比 String 類別更高。
exit(int status)方法,提前終止虛擬機器的運作。對於發生了異常情況而想終止虛擬
機的運行,傳遞一個非零值作為參數。
CurrentTimeMillis 方法返回自 1970 年 1 月 1 日 0 點 0 分 0 秒起至今的以毫秒為單
位的時間,這是一個 long 類型的大數值。
Runtime 類別封裝了 Java 命令本身的運行進程,其中的許多方法與 System 中的方法
重複。不能直接建立 Runtime 實例,但可以透過靜態方法 Runtime.getRuntime 來取得正
在執行的 Runtime 物件的參考。
getInputStream()方法可以得到一個輸入流,客戶端的 Socket 物件上的 getInputStream()
方法得到的輸入流其實就是從伺服器端發回的資料流。 getOutputStream()方法得到一個
輸出流,客戶端 Socket 物件上的 getOutputStream()方法傳回的輸出流就是將要傳送到
伺服器端的資料流。
Sockets 有兩種主要的操作方式:面向連接的和無連接的。
無連線的操作使用資料報協定。一個資料報是一個獨立的單元,它包含了所有的
這次投遞的資訊。
面向連線的操作使用 TCP 協定。一個這個模式下的 socket 必須在發送資料之前與
目的地的 socket 取得一個連線。一旦連接建立了, sockets 就可以使用一個流接口
以上就是java基礎知識小小結的內容,更多相關內容請關注PHP中文網(www.php.cn)!