第三章 控製程序流程
在java的世界中,對象和資料的處理是通過運算子,而選擇和判斷則是靠控制語句來實現的
使用java運算子
運算子的2個用處,1、運算子接受引數,並且產生新值,例如 int a=1+1;2、運算子也可以改變運算元的值 例如 i++;
大多數的運算子都是可以作用與基礎資料型別 (Elementary Data Type)之上的,但是=、==、!=是例外,他們可以作用於任何對象之上。
優先順序
這個其實我自己也很頭疼的!所以我向來不記什麼運算子的優先順序,在搞不清楚的地方就加上括弧,這樣不但你自己看起來很明了,出錯率也低,別人來看你的代碼也是能清楚明白的
賦值和指派
賦值的意義是取得運算子右邊的值(任何常量、變數、能產生數值的運算式),並將該值傳遞給左邊,使用運算子=號因為基礎資料型別 (Elementary Data Type)儲存的是實際的數值,並非控制代碼(也可以理解我c++中的指標),a=b;這句是把b這個具體數值傳遞給a這個變數,當你改變a的時候,b這個數值並不會隨著你的a的改變而改變,但是當你操作對象的時候就容易出現和上述現象相反的事情。當你在操作對象的時候,實際上操作的是對象的控制代碼,當你把某個對象指派給另一個對象時,
實際指派的是控制代碼,例如
class one
{
int i=0;
}
class two
{
public static void main(String args[])
{
one o1=new one();
one o2=new one();
o1.i=10;
o2.i=20;
System.out.print("o2.i="+o1.i);
System.out.println("o2.i="+o2.i);
o1=o2;
System.out.print("o2.i="+o1.i);
System.out.println("o2.i="+o2.i);
o1.i=30;
System.out.print("o2.i="+o1.i);
System.out.println("o2.i="+o2.i);
}
}
class one在two中被建立2個對象,並且分別回被賦值為10 和20。輸出當然就是10和20,接著把o2指派給o1,輸出肯定是20 和20,但是奇妙的事情在第3次賦值的時候產生了,當我們把o1.i的值改為30的時候,發現為什麼我們的o2.i也變成30了?我們並沒有改變他的值啊!這是因為o1和o2中都含有同一個控制代碼,原先的o1所儲存的控制代碼被覆寫了,地址指到了和o2一樣的記憶體空間,而他原先的指向的那個記憶體空間在適當的時候回被記憶體回收機制給回收了,其實這個過程就發生在我們以為不會有問題的第2次賦值中!以上的現象就叫做別名現象,這個在Thinking in Java的附錄a中有專題講到!如果我們不想發生這樣的事情,我們可以使用o1.i=o2.i這句話來進行第2步,這樣的寫法可以保證2個對象的相互獨立,但是這個並不是一個好方法,這樣直接操作對象內的資料會導致混亂,並且和oop的思想相違背,更好的方法在附錄a中有。
調用函數時的別名問題
class one
{
int i=10;
}
class two
{
static void hello(one o)
{
o.i=20;
}
public static void main(String args[])
{
one someone=new one();
System.out.println(someone.i);
hello(someone);
System.out.println(someone.i);
}
}
我們的java程式會在hello()函數的生存空間之內為我們建立一個名字叫個o的one的執行個體對象,用於接受外界傳遞進來的引數,但是我們使用上面的方法,傳遞進去的其實也只是一個someone的控制代碼,而hello()之內的那個名字叫個o的對象的i的更改也會影響到超出hello生存空間之外的someone中的i,真是鬱悶啊!
數學運算子
這裡我們要注意一個問題就是整數的除法運算所得結果會把小數部分忽略,注意不是四捨五入!什麼是簡略運算子?簡略運算子是在運算子之後緊跟一個=號,這個方法使用於java中的所有運算子,,例如 把x+10的值從新賦值給x,你就可以用x+=10這種簡略形式。具體的數學運算子的例子我就不給大家舉了,因為這個很簡單,和我們小學學習的數學運算沒有什麼差別
一元運算子
負號(-)和正號(+)都是一元運算子
遞增和遞減
遞增(++)和遞減(--)他們都有2中形式,一個是首碼(++i),一個是尾碼(i++)需要注意的是,這2個方法是有差別的,在使用首碼的時候,是先進行首碼的運算,然後把值傳遞給i,然後i再參與後面的運算,而使用尾碼時候,是先把i參與運算,再將i 進行尾碼的運算,例如
public class test
{
public static void main(String args[])
{
int i=0;
System.out.println(++i);
System.out.println(i++);
System.out.println(i);
}
}
答案是1、1、2 先進行自加,然後把值顯示(1)第二次顯示是先把i的值顯示(1),在自加(2),但是自加的沒顯示因為自加的值參加下次的運算,也就是第三次顯示2的原因。
關係運算子
注意,我在我的blog中已經寫了一篇關於運算子的文章(http://blog.csdn.com/maoerzuozuo)裡面有關於運算子
經常出錯的地方和解答,如果你能全部的答對,那麼你在數學運算子這一塊基本上沒問題了!
邏輯運算子
這個其實是我最鬱悶的地方,因為我本身就記不住什麼and or not 代表什麼意思
大家就再等等吧!今天晚上我就回去補習一下!明天給大家發表文章~呵呵大家如果在學習的過程中,有什麼問題,可以這樣聯絡我
E-mail molmd@163.net /163.com QQ:31349283 我們可以共同學習進步!
歡迎訪問我的blog,http://blog.csdn.com/maoerzuozuo 裡面有更多學習內容!