為什麼會想學習Java呢,一句話: 書到用時方恨少。 要不是現場現在需要用到Java,我估計就不會學習這個了,現在才深刻的體會到
:技不壓身這句話的含義。學習的時候不要想到立竿見影的求效果,也許某一天她就用到了,而這個時候,也許你就比別人的路更寬廣了。
所以不要糾結這個東西有沒有用了,學吧,騷年(本來是少年的,結果出現了這個詞)..........,
上兩次說了一點Java的入門的東西,到這個程度,我們是否想要幹點別的事情呢?因此我們需要來認識一下Java中結構化程式設計的部分:
流程式控制制;以及資料的操作結構:運算子。
【Java 賦值運算子】
為什麼要說這個運算子呢? 因為太簡單了,簡單到必須說。賦值是什麼意思呢? 我們通過執行個體來說明:
/*This program test the oprator*/public class OprTest{ public static void main(String[] args) { //asign value int IntTest; System.out.print("The value of IntTest is:"+IntTest); }}
上面的程式執行結果是:
拋出異常了,我們可以看到,編譯的過程報錯,為什麼呢? 這個各位童鞋們可以自己想一下,就不多說了。
下面我們對代碼進行一下修改:
/*This program test the oprator*/public class OprTest{ public static void main(String[] args) { //asign value int IntTest; IntTest=100; //初始設定變數值 System.out.print("The value of IntTest is:"+IntTest); }}
執行結果是:
我們看到這個時候程式已經成功執行。為什麼要在這裡說這個問題呢? 因為我們在C語言中,有些時候不給變數賦值也能編譯通過(沒有啟用ALL Alarm模式),而且運行過程中
有時候也正常,而在Java中,如果變數沒有進行初始化賦值,那麼就不能編譯通過。同時我們也看到,我沒有在定義變數的時候給變數賦初值,而是再起語句初始設定變數,這個地方是與
C語言的叫法不一致的,需要注意。
賦值運行符,還有一些複合的用法,在下面我們會介紹。
【Java 四則運算】
知道數數後,我們接受的教育應當就是四則運算了,加、減、乘、除;一切簡單而自然,但是在電腦的世界裡面,簡單卻不自然了。我們通過執行個體來認識一下四則運算:
/*This program test the oprator*/public class OprTest{ public static void main(String[] args) { //asign value int IntTest; IntTest=100; //初始設定變數值 System.out.println("The value of IntTest is:"+IntTest); //add int Sum; Sum=IntTest + 20121221; System.out.println("Sum=IntTest+20121221="+Sum); //sub int Dif; Dif=Sum - 300; System.out.println("Dif="+Dif); //Multiplication long Mul; Mul=Sum * Dif; System.out.println("Sum*Dif="+Mul); //overflow, but can execute,so you need pay atention to this double DoubleMul; DoubleMul=1.0*Sum* Dif; //here why we need to muliply with 1.0 ?? System.out.println("1.0*Sum*Dif="+DoubleMul); //Division int Div; Div=Dif/789; System.out.println("Dif/789="+Div); //Normally 20121021/20121321 = 0.999985;how can the result be ? double DoubleDiv; DoubleDiv=1.0*Dif/789; System.out.println("1.0*Dif/789="+DoubleDiv); //IS the same wiht the statement Div=Dif/Sum; ?? //Mod int Mod; Mod=Sum % 2; //Is this equal to Sum / 2 ?? System.out.println("Sum % 2 ="+Mod); System.out.println("Sum / 2 ="+Sum/2); //Multiply plus and sub int PostPlus; int PrePlus; int PostSub; int PreSub; System.out.println("Mod="+Mod+";"+" Dif="+Dif); PostPlus=Mod++; System.out.println("Mod++ is:"+PostPlus); PostPlus=++PostPlus; System.out.println("++Mod++ is:"+PostPlus); PostSub=Dif--; System.out.println("Dif-- is:"+PostSub); PreSub=--PostSub; System.out.println("--Dif-- is:"+PreSub); }}
上面程式啟動並執行結果是:
四則運算需要說明的是: 在進行計算的時候,會進行類型轉換。對於 / 運算子,如果運算元都是整型,則結果是整型;如果運算元有浮點類型,則結果
是浮點類型。對於 ++ 和 —— 運算子,則和C語言一樣。
【Java關係運算子】
Java提供了功能豐富的關係運算子: == 、 != 、 <、<=、>、>=
這些運算子的效果和C語言中是一樣的;這裡就不進行具體的介紹了,但是有一點需要說明,在判斷兩個浮點數相等的時候,不能簡單的用==符號進行比較。
我們就做一個簡答的測試。
//Equal to float fNum1=1.0F; float fNum2=0.99999999F; if(fNum1!=fNum2) System.out.println("1.0 != 0.9999999");
這段程式的輸出是什麼呢?輸出結果如下所示:
這裡可以看到,什麼也沒有輸出,那麼就表示Java在判斷if條件的時候,將 fNum1 判斷為與fNum2相等了。
【Java 邏輯運算子】
在Java中也提供了邏輯運算子: 與、或、非;並且沿用了C語言的符號,與用 && 表示; 或用 || 表示;非用 ! 表示。
具體的與或非邏輯我們就舉例了。
值得一提的是: 與或非邏輯運算過程中,有一個“短路”的求值過程,當可以判斷出結果的時候就不會計算後面的數值了。這個有時候會影響參數的傳遞過程。
具體的執行個體我們等到討論方法的時候再舉例。
Java中還提供了一個三元運算子;那就是 “:?”。 這個運算子的計算規則與C語言一樣,我們就不再舉例了。
【Java 位元運算符】
Java提供了與C語言類似的位元運算符,這些位元運算符應用非常廣泛,通常用於“屏蔽技術”(怎麼感覺像PLC中的屏蔽,不過兩者還是有區別的)。位元運算符有:
按位與、按位或、按位異或、按位非。
具體的執行個體我們就不舉例了,有一個簡單的應用就是求byte類型的溢出值: 300&0XFF; 具體執行個體見:http://www.cnblogs.com/volcanol/archive/2012/12/18/2824169.html
這裡還有一個有趣的事情就是: & 和 | 可以對boolean的進行求值,其計算規則和用法和邏輯運算子一樣, & 對應 &&,而| 對應||; 我們可以看一個執行個體:
//Bit oprator boolean bTest1=true; boolean bTest2=false; if(bTest1 & bTest2) System.out.println("True & True is ture"); if(bTest1 | bTest2) System.out.println("True | True is ture");
執行結果如下所示:
【Java 移位元運算符】
在Java中也C語言一樣,也提供了移位元運算符,同樣移位元運算符適合於整型數的計算。Java提供了: 右移>>、左移<<兩種運算子。其具體的用法和C語言的移位
運算子一致。
我們知道在C語言中右移運算子>>,最高位的補齊規則由編譯器決定,標準並沒有規定,為了消除這個歧義,Java特別設計一個右移運算子 ">>>" ; 並且規定
>> 運算子是符號位填充,即>> 不會改變數值的正負; 而>>> 則規定用0補齊最高位。
【Java中的常量】
我們知道在C語言中提供了define機制來定義符號常量,或者說符號字面值;而在C++中則另外提供了const這一機制補充“符號字面值”的使用,那麼在Java中有沒有
提供一種類似的機制呢?
很顯然,提供這樣一種機制,將有利於編程人員的程式編寫和閱讀;在Java中也提供了這樣的機制。那如何?呢?
在Java中我們可以通過 final 關鍵字來定義符號常量。其定義文法為:
final datatype VaribleName=常量字面值;
下面我們通過一個執行個體來說明這個問題:
我們在看下一個例子:
類中可以定義類常量,就像上面的定義,但是這樣定義是預設為私人的呢?還是public的呢? 這裡留下一個疑問,等到以後我們學到修飾符的時候再來解答。
下面是這次測試代碼:
/*This program test the oprator*/public class OprTest{ public static void main(String[] args) { /********* //asign value int IntTest; IntTest=100; //初始設定變數值 System.out.println("The value of IntTest is:"+IntTest); //add int Sum; Sum=IntTest + 20121221; System.out.println("Sum=IntTest+20121221="+Sum); //sub int Dif; Dif=Sum - 300; System.out.println("Dif="+Dif); //Multiplication long Mul; Mul=Sum * Dif; System.out.println("Sum*Dif="+Mul); //overflow, but can execute,so you need pay atention to this double DoubleMul; DoubleMul=1.0*Sum* Dif; //here why we need to muliply with 1.0 ?? System.out.println("1.0*Sum*Dif="+DoubleMul); //Division int Div; Div=Dif/789; System.out.println("Dif/789="+Div); //Normally 20121021/20121321 = 0.999985;how can the result be ? double DoubleDiv; DoubleDiv=1.0*Dif/789; System.out.println("1.0*Dif/789="+DoubleDiv); //IS the same wiht the statement Div=Dif/Sum; ?? //Mod int Mod; Mod=Sum % 2; //Is this equal to Sum / 2 ?? System.out.println("Sum % 2 ="+Mod); System.out.println("Sum / 2 ="+Sum/2); //Multiply plus and sub int PostPlus; int PrePlus; int PostSub; int PreSub; System.out.println("Mod="+Mod+";"+" Dif="+Dif); PostPlus=Mod++; System.out.println("Mod++ is:"+PostPlus); PostPlus=++PostPlus; System.out.println("++Mod++ is:"+PostPlus); PostSub=Dif--; System.out.println("Dif-- is:"+PostSub); PreSub=--PostSub; System.out.println("--Dif-- is:"+PreSub); *********/ /******************** //Equal to float fNum1=1.0F; float fNum2=0.99999999F; if(fNum1!=fNum2) System.out.println("1.0 != 0.9999999"); ***********************/ /****************** //Bit oprator boolean bTest1=true; boolean bTest2=false; if(bTest1 & bTest2) System.out.println("True & True is ture"); if(bTest1 | bTest2) System.out.println("True | True is ture"); ************/ final int finalIntTest=100; System.out.println("finalIntTest is:"+finalIntTest); }}
發現Java是一種類C的語言,很多的機制和規則與C語言非常相似,但是需要細心的區別兩者存在的區別。