不論使用何種語言,最終都是為了實現業務邏輯。在面向對象的編程語言中 ,業務邏輯都在方法中實現。因此,對於初學者來說,了解完成Java類方法體的 基本知識點是非常必要的。本文中,將介紹編寫方法體必須了解的兩個方面:運 算符,流程控制。
Java中的運算符根據其功能,可以分成4類。首先需要注意的是,Java中的運 算符是不能重載的。下面分別對4類運算符進行介紹。
1、 算術運算符:+,-,*,/,%,++,--
算術運算符是對基本數據類型進行運算的操作符,其中容易混淆的是/表示除 ,而%表示取余。另外需要注意的是++,--兩個自加自減運算符的區別,如下程序 。
package com.csst.test; public class Test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int i=0; System.out.println(i++); System.out.println(++i); int j=0; System.out.println(j--); System.out.println(--j); } }
++,--在變量後,是先取變量沒有運算前的值,當作表達式的返回值,然後進 行運算。而++,--如果在變量前,是先對變量進行運算,然後將運算結果作為表 達式的返回值。需要注意的是,不管在前還是在後,對於參與運算的變量本身, 都是進行了一次加1或者減1的操作,沒有區別,有區別的是返回值的值。
算術運算符都是針對基本數據類型進行運算的,只有+除外,可以使用+連 接兩個字符串。如:
String s=”Hello”+” World”;//String的值是Hello World
2、 位運算符:&,|,^,~,<<,>>,>>>
位運算符是針對二進制的數進行運算的操作符。與操作&的運算規則是兩 個都是1才是1,或操作 | 的規則是一個是1就是1,異或 ^ 的規則是不同的是1 ,相同的為0。取反操作~是1變0,0變1。
<<:左移運算符,規則為,拋掉相應位數的高位,在對應的空位補0。 如:
0110 1001 << 2 =1010 0100
>>:有符號右移,規則為,拋掉相應位數的低位,如果移位前,最高 一位是0,則在對應的高位都補0,如果移位前,最高一位是1,則在對應的高位 都補1。
0110 1001 >> 2 =0001 1010
1110 1001 >> 2 =1101 1010
>>>:無符號右移,規則為,拋掉相應位數的低位,在對應的空位 補0:
0110 1001 >>> 2 =0001 1010
1110 1001 >>> 2 =0001 1010
注意:右移運算符分有符號和無符號,而左移沒有這個區別。另外左移一位 相當於乘2,右移一位相當於除以2,速度比較快。
3、 比較運算符:>,<,>=,<=,= =,!=
比較運算符是對基本數據類型的二進制進行比較。需要注意的是==表示比 較,=表示賦值。另外,==和!=可以對引用類型比較,比較的是虛地址。如:
String s1=”Hello”;
String s2=”Hello”;
String s3=new String(“Hello”);
System.out.println(s1==s2);//輸出true
System.out.println(s1==s3);//輸出false
4、 邏輯運算符:&,|,^,!,&&,||
在Java語言中,邏輯值使用true和false進行表示,而1和0不表示邏輯,表示 二進制的數。比如:T1&T2,只有當T1和T2都是true時,才返回true
T1|T2:T1和T2只要有一個是true,返回值就是true。
T1^T2:T1和T2不同的時候,返回ftrue,相同的時候返回false。
!T1:T1是true,返回false,T1是false,返回true。
&&,||被稱為雙與及雙或。
T1&&T2: 只有當T1和T2都是true時,才返回true。但是與單與& 不同的是,雙&
會發生短路問題,如T1是false,則不會判斷T2的值,直接返回false。而單 與不同,不論T1的值是true還是false,都會判斷T2的值。
T1||T2:與雙與類似,雙或當T1為true時,也會發生短路,直接返回true, 而不判斷T2。
在運算符這個知識點,有以下幾點需要注意:
1、 記清楚每種運算符是針對什麼類型進行運算。比如不能對兩個字符串使 用>比較,因為>只比較基本類型。
2、 移位運算符中的右移分有無符號兩種。
3、 比較運算符幾乎都用來比較基本數據類型,只有==,!=除外。
4、 &&,||的短路問題。
了解了Java語言中常用的運算符後,再來看看方法的流程控制。程序的流程 無非3種:
1. 順序的:順序的流程就是一條一條語句執行。
2. 分支流程:分支是常見的流程,Java語言對分支控制和其他語言類似, 可以使用if,else以及switch case控制,如下代碼:
package com.csst.test; public class Test2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int x=1; int y=2; if(x==1){ System.out.println("x==1"); }else{ System.out.println("x!=1"); } switch(y){ case 1:System.out.println("1"); case 2:System.out.println("2"); case 3:System.out.println("3");break; default:System.out.println("default"); } } }
該程序運行結果:
x==1
2
3
需要注意的是,if後的括號中,一定是一個布爾值的表達式。而switch的括 號中,可以是byte,short,int,char,enum(Java5以後有的新類型,枚舉),其他 類型不可以。另外,y的值是2,打印結果卻是2,3。因為case 2後邊的語句沒有 break來跳出,所以會繼續運行,直到遇到第一個break為止。可以說,case後邊 的開關值,只是決定了switch流程的入口,但是出口完全取決於break的出現位 置。
3、循環邏輯
循環邏輯即重復執行某段代碼,Java中有三種循環,如for,while,do while, 如下:
package com.csst.test; public class Test3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub for(int i=0;i<3;i++){ System.out.println("i="+i); } int x=4; while(x>0){ System.out.println("x="+x); x--; } int y=5; do{ System.out.println("y="+y); y--; }while(y>0); } }
程序運行結果如下:
i=0
i=1
i=2
x=4
x=3
x=2
x=1
y=5
y=4
y=3
y=2
y=1
Java類中,可以在循環邏輯中,使用標簽來標記循環,通過 break,continue關鍵字控制循環,以for循環為例。
package com.csst.test; public class Test4 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub loop1: for(int i=0;i<4;i++){ loop2: for(int j=0;j<3;j++){ if(i==j){ break; } if(i<j){ continue loop1; } System.out.println("i="+i+" j="+j); } } }
該類中,有兩層for循環,分別以loop1,loop2進行標記,如 果break或者continue後沒有出現標記,表示控制的是最近的一層循環,即 loop2,如果出現標記,則控制的是標記名所表示的循環。break表示中斷循環, continue表示繼續循環。
該類運行結果如下:
i=1 j=0
i=2 j=0
i=2 j=1
i=3 j=0
i=3 j=1
i=3 j=2
通過學習運算符和流程控制,初學者可以很容易開始寫一些小程序,熟悉 Java語法。