面向對象
平臺獨立
簡單
安全
中立
可移植的
強健
多線程
可翻譯的
高效
分布式的
讓我們看看一個簡單的能打印出單詞 Hello World 的代碼。
public class MyFirstJavaProgram{
/* This is my first java program.
* This will print 'Hello World' as the output
*/
public static void main(String []args){
System.out.println("Hello World"); // prints Hello World
}
}
關于 Java 程序,記住下面幾點很重要。
所有的 Java 成分需要名字。類,變量和方法的名字叫做標識符。
在 Java 中有關標識符有幾點需要記住。它們是以下幾點:
像其他語言,使用修飾符修改類、方法等是有可能的。有兩種修飾符。
我們將在下一節(jié)尋找更多有關修飾符的細節(jié)。
我們將看到在 Java 中變量的以下類型:
數(shù)組是存儲同一類型的多個變量的對象。然而一個數(shù)組自身是堆上的一個對象。我們將在下一章調查如何聲明,構建和初始化。
枚舉是在 Java 5.0 中被引進的。枚舉限制了一個變量擁有幾個預先定義的值中的一個。在枚舉列表中的值被稱為枚舉。
使用枚舉可能減少你代碼中的 bug。
例如如果我們?yōu)橐粋€新鮮果汁商店考慮一個應用程序,限制杯子的形狀小,中,大是有可能的。這將確保沒有任何人可以點出了小,中,大之外的型號。
class FreshJuice{
enum FreshJuiceSize{ SMALL, MEDIUM, LARGE }
FreshJuiceSize size;
}
public class FreshJuiceTest{
public static void main(String args[]){
FreshJuice juice = new FreshJuice();
juice.size = FreshJuice. FreshJuiceSize.MEDIUM ;
System.out.println("Size :" + juice.size);
}
}
注意: 枚舉能被自身聲明或者在一個類中。方法,變量,構造函數(shù)也能在枚舉中被定義。
以下的列表展示了 Java 中的保留字。這些保留字可能不會被作為常量或者變量或者任何其他標識符的名字而使用。
關鍵字 | 關鍵字 | 關鍵字 | 關鍵字 |
---|---|---|---|
abstract | assert | boolean | break |
byte | case | catch | char |
class | const | continue | default |
do | double | else | enum |
extends | final | finally | float |
for | goto | if | implements |
import | instanceof | int | interface |
long | native | new | package |
private | protected | public | return |
short | static | strictfp | super |
switch | synchronized | this | throw |
throws | transient | try | void |
volatile | while |
Java 像 C 和 C++ 一樣支持單行和多行注釋。所有的在注釋中的字符都會被 Java 編譯器忽略。
public class MyFirstJavaProgram{
/* This is my first java program.
* This will print 'Hello World' as the output
* This is an example of multi-line comments.
*/
public static void main(String []args){
// This is an example of single line comment
/* This is also an example of single line comment. */
System.out.println("Hello World");
}
}
在 Java 中有兩種數(shù)據(jù)類型:
Java 支持的總共有 8 種原始數(shù)據(jù)類型。原始數(shù)據(jù)類型是由語言預定義的并且由關鍵字命名。讓我們現(xiàn)在仔細看看有關 8 種原始數(shù)據(jù)類型的細節(jié)。
一個字面量是由固定值表示的源代碼。它們用代碼直接表示而沒有任何計算。
字面值可以被賦給任何原始數(shù)據(jù)類型。例如:
byte a = 68;
char a = 'A'
Java 中的 String 字面值是指定的,就像它們在大部分其他的語言中通過在一對雙引號間包含一系列的字符。String 字面值的例子如下:
"Hello World"
"two\nlines"
"\"This is in quotes\""
Java 語言給 String 和 char 字面值支持很少的特殊的換碼序列。它們是:
記號 | 符號表示 |
---|---|
\n | 新的一行(0x0a) |
\r | 回車(0x0d) |
\f | 進紙(0x0c) |
\b | 退格(0x08) |
\s | 空格(0x20) |
\t | 制表符 |
\" | 雙引號 |
\' | 點引號 |
\|反斜線 | |
\ddd | 八進制字符 |
\uxxxx | 十六進制 UNICODE 字符 |
Java 提供許多訪問修飾符來為類,變量,方法和構造函數(shù)設置訪問等級。四個訪問等級如下:
Java 給操作變量提供了一組豐富的操作符。我們可以將所有的 Java 操作符區(qū)分成以下幾組:
運算符 | 描述 | 例子 |
---|---|---|
+ | 加-在操作符的每一側加值 | A + B 將得出30 |
- | 減-從左邊的操作數(shù)中減去右邊的操作數(shù) | A - B 將得出 -10 |
* | 乘-在操作符的每一側倍增值 | A * B 將得出 200 |
/ | 除-用右邊的操作數(shù)除左邊的操作數(shù) | B \ A 將得出2 |
% | 模-用右邊的操作數(shù)除左邊的操作數(shù)并返回余數(shù) | B % A 將得出0 |
++ | 增值-操作數(shù)的值增加 1 | B++ 得出21 |
-- | 減量-操作數(shù)的值減少 1 | B-- 得出19 |
運算符 | 描述 | 例子 |
---|---|---|
== | 查看兩個操作數(shù)的值是否相等,如果是的話,情況就是真。 | (A == B)不為真 |
!= | 查看兩個操作數(shù)的值是否相等,如果值不相等,情況就是真。 | (A != B)為真 |
> | 查看左邊操作數(shù)的值是否大于右邊的操作數(shù),如果是的話,情況就是真。 | (A > B)不為真 |
< | 查看左邊操作數(shù)的值是否小于右邊的操作數(shù),如果是的話,情況就是真。 | (A < B)為真 |
>= | 查看左邊操作數(shù)的值是否大于或等于右邊的操作數(shù),如果是的話,情況就是真。 | (A >= B)不為true. |
<= | 查看左邊操作數(shù)的值是否小于或等于右邊的操作數(shù),如果是的話,情況就是真。 | (A <= B)為true. |
運算符 | 描述 | 例子 |
---|---|---|
& | 二進制的與操作符將一個位復制到結果中如果它存在于兩個操作數(shù)中 | (A & B)將得出 12 即 0000 1100 |
| | 二進制的或操作符復制一個位如果它存在在兩個操作數(shù)中的一個 | (A | B)將得出 61 即 0011 1101 |
^ | 二進制的異或操作符復制一個位如果它在一個而不是兩個操作數(shù)中被設置。 | (A ^ B)將得出 49 即 0011 0001 |
~ | 二進制補運算符是一元的,并有”烙位”的影響 | (~A )將得出 -61 即 2 的補碼形式 1100 0011,因為一個有符號的二進制數(shù)。 |
<< | 二進制左移運算符。左邊操作數(shù)的值按右邊操作數(shù)指定的位數(shù)向左移動。 | A << 2 將得出 240 即 1111 0000 |
>> | 二進制右移運算符。左邊操作數(shù)的值按右邊操作數(shù)指定的位數(shù)向右移動。 | A >> 2 將得出 15 即 1111 |
>>> | 右移填零運算符。左邊操作數(shù)的值按右邊操作數(shù)指定的位數(shù)向右移動并且值用 0 填充 | A >>>2 將得出 15 即 0000 1111 |
運算符 | 描述 | 例子 |
---|---|---|
&& | 叫做邏輯與運算符。如果兩個操作數(shù)都不為 0,那么情況為真 | (A && B) 為假 |
|| | 叫做邏輯或運算符。如果兩個操作數(shù)中一個任何一個不為0那么情況為真。 | (A || B) 為真 |
! | 叫做邏輯非運算符。用來顛倒操作數(shù)的邏輯狀態(tài)。如果情況為真那么邏輯非運算符將是假。 | !(A && B) 為真 |
運算符 | 描述 | 例子 |
---|---|---|
= | 簡單的賦值運算符,將值從右邊的操作數(shù)賦給左邊的操作數(shù)。 | C = A + B 將把 A + B 的值賦給 C |
+= | 加后賦值運算符,它將右邊操作數(shù)加上左邊的操作數(shù)并將結果賦給左邊的操作數(shù) | C += A 和 C = C + A 相等 |
-= | 減后賦值運算符,它將左邊操作數(shù)減去右邊的操作數(shù)并將結果賦給左邊的操作數(shù) | C -= A 和 C = C - A 相等 |
*= | 乘后賦值運算符,它用左邊操作數(shù)倍增右邊的操作數(shù)并將結果賦給左邊的操作數(shù) | C = A 和 C = C A 相等 |
/= | 除后賦值運算符,它用右邊操作數(shù)去除左邊的操作數(shù)并將結果賦給左邊的操作數(shù) | C /= A 和 C = C / A 相等 |
%= | 取模后賦值運算符,它使用兩個操作數(shù)取模并將結果賦給左邊的操作數(shù) | C %= A 和 C = C % A 相等 |
<<= | 左移后賦值運算符 | C <<= 2 和 C = C << 2 相同 |
>>= | 右移后賦值運算符 | C >>= 2 和 C = C >> 2 相同 |
&= | 按位與后賦值運算符 | C &= 2 和 C = C & 2 相同 |
^= | 按位異或后賦值運算符 | C ^= 2 和 C = C ^ 2 相同 |
|= | 按位或后賦值運算符 | C |= 2 和 C = C | 2 相同 |
很少有其它的操作符被 Java 語言支持。
條件操作符也以三元操作符為人所知。這個操作符由三個操作數(shù)組成并且被用來估計布爾表達式。操作符的目的是決定哪個值應該被賦給變量。操作符這樣寫:
variable x = (expression) ? value if true : value if false
這個操作符僅用于對象引用變量。操作符檢查對象是否是一種特別類型的(class 類型或者 interface 類型)。instanceOf 操作符這樣寫:
( Object reference variable ) instanceOf (class/interface type)
種類 | 運算符 | 關聯(lián)性 |
---|---|---|
后綴 | () [] . (點操作符) | 左到右 |
一元 | ++ - - ! ~ | 右到左 |
乘法 | * / % | 左到右 |
加法 | + - | 左到右 |
移動 | >> >>> << | 左到右 |
關系 | > >= < <= | 左到右 |
等式 | == != | 左到右 |
按位與 | & | 左到右 |
按位異或 | ^ | 左到右 |
按位或 | | | 左到右 |
邏輯與 | && | 左到右 |
邏輯或 | || | 左到右 |
條件 | ?: | 右到左 |
賦值 | = += -= *= /= %= >>= <<= &= ^= |= | 右到左 |
逗號 | , | 左到右 |
一個 while 循環(huán)是一個允許你重復一個任務一定次數(shù)的控制結構。
一個 while 循環(huán)的語法像這樣:
while(Boolean_expression)
{
//Statements
}
do...while 循環(huán)和 while 循環(huán)是類似的,除了 do...while 循環(huán)保證執(zhí)行至少一次。
do...while 的語法像這樣:
do
{
//Statements
}while(Boolean_expression);
for 循環(huán)是一個重復控制結構,允許你有效地寫一個需要執(zhí)行指定次數(shù)的循環(huán)。
當你知道一個任務需要被重復多少次時,for 循環(huán)是有用的。
for 循環(huán)的語法像這樣:
for(initialization; Boolean_expression; update)
{
//Statements
}
Java 5 中增強的 for 循環(huán)被引進。這主要是為數(shù)組而用的。
增強的 for 循環(huán)像這樣:
for(declaration : expression)
{
//Statements
}
break 關鍵字被用來停止整個循環(huán)。break 關鍵字必須在任何循環(huán)中或者一個 switch 語句中使用。
break 關鍵字將停止最內層的循環(huán)執(zhí)行和開始執(zhí)行在塊后代碼的下一行。
continue 關鍵字可以在任何控制結構的循環(huán)中被使用。它使循環(huán)立即跳轉到循環(huán)的下一個迭代。
continue 的語法在任何循環(huán)中是一條單獨的語句:
continue;
if 語句由一個有一條或多條語句伴隨的布爾表達式組成。
if 語句的語法像這樣:
if(Boolean_expression)
{
//Statements will execute if the Boolean expression is true
}
if 語句可以后接一個可選的 else 語句,它當布爾表達式是錯誤時執(zhí)行。
if...else 的語法像這樣:
if(Boolean_expression){
//Executes when the Boolean expression is true
}else{
//Executes when the Boolean expression is false
}
if 語句后可以跟一個可選的 else if...else 語句,它對于測試使用單獨的 if...else if 語句的不同狀況是很有用的。
if...else 的語法像這樣:
if(Boolean_expression 1){
//Executes when the Boolean expression 1 is true
}else if(Boolean_expression 2){
//Executes when the Boolean expression 2 is true
}else if(Boolean_expression 3){
//Executes when the Boolean expression 3 is true
}else {
//Executes when the one of the above condition is true.
}
嵌入 if...else 語句總是合法的。當使用 if,else if, else 語句時需要記住這幾點:
一個嵌入的 if...else 語法像以下這樣:
if(Boolean_expression 1){
//Executes when the Boolean expression 1 is true
if(Boolean_expression 2){
//Executes when the Boolean expression 2 is true
}
}
switch 語句允許一個變量平等地用一系列的值進行測試。每一個值成為一個 case,進行 switch 的變量和每個 case 值比較是否相等。
增強的 for 循環(huán)的語法像這樣:
switch(expression){
case value :
//Statements
break; //optional
case value :
//Statements
break; //optional
//You can have any number of case statements.
default : //Optional
//Statements
}
一個 Java 方法是組合到一起來執(zhí)行一個操作的語句的集合。比如,當你調用 System.out.println 方法,系統(tǒng)確實為在控制臺顯示一條信息而執(zhí)行了幾條語句。
總體來說,方法由以下語法:
modifier returnValueType methodName(list of parameters) {
// Method body;
}
一個類像以下這樣:
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
一個類能含有任何以下的變量類型。
方法使用 try 和 catch 關鍵字的組合捕獲異常。try/catch 塊被放置在可能會生成異常的代碼周圍。有 try/catch 塊的代碼被稱作受保護的代碼,使用 try/catch 的語法像以下這樣:
try
{
//Protected code
}catch(ExceptionName e1)
{
//Catch block
}
一個 try 塊后能跟多個 catch 塊。多個 catch 塊的語法像這樣:
try
{
//Protected code
}catch(ExceptionType1 e1)
{
//Catch block
}catch(ExceptionType2 e2)
{
//Catch block
}catch(ExceptionType3 e3)
{
//Catch block
}
如果方法不處理檢查異常,方法必須用 throws 關鍵字聲明它。throws 關鍵字在方法簽名的最后出現(xiàn)。
你可以通過使用 throw 關鍵字拋出一個異常,可以是新實例化的或者剛剛捕獲到的。盡量理解 throws 和 throw 關鍵字間的不同。
finally 關鍵字被用來創(chuàng)建跟在 try 塊后的代碼。finally 代碼塊總是執(zhí)行,無論一個異常是否發(fā)生。
使用 finally 塊允許你運行你想要執(zhí)行的任何 clean-type 語句,無論在受保護的代碼中發(fā)生了什么。
finally 塊在 catch 塊的末尾出現(xiàn)并有以下語法:
try
{
//Protected code
}catch(ExceptionType1 e1)
{
//Catch block
}catch(ExceptionType2 e2)
{
//Catch block
}catch(ExceptionType3 e3)
{
//Catch block
}finally
{
//The finally block always executes.
}