描述符
描述符是你添加到那些定義中來改變他們的意思的關鍵詞。Java 語言有很多描述符,包括以下這些:
- 可訪問描述符
- 不可訪問描述符
- 應用描述符,你可以在類、方法、變量中加入相應關鍵字。描述符要先于聲明,如下面的例子所示(斜體):
public class className { // ... } private boolean myFlag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42; public static void main(String[] arguments) { // body of method }
可訪問描述符
Java 提供一系列可訪問描述符來設定類,變量,方法和構造器的訪問級別。四種訪問級別如下:
默認的,對封裝可見。不需要描述符。
- 僅對類可見(private)
- 全部可見(public)
- 對封裝和子類可見(protected)
不可訪問描述符
Java 提供一些不可訪問描述符來滿足其他功能。
- Static 描述符是用來創造類方法和變量的。
- Final 描述符用來最終確定和實施類、方法和變量的。
- Abstract 描述符用來創造不允許實例化的類和方法。
- synchronized 和 volatile 描述符用來當做線的。
基本運算符
Java 針對操控變量提供了一組豐富的運算符。我們可以將所有的 Java 運算符分為如下幾組:
- 算數運算符
- 關系運算符
- 位運算符
- 邏輯運算符
- 賦值運算符
- 其他運算符
- 算數運算符
算術運算符在數學表達中的使用和它們在代數中的使用是相同的。下面的表格列舉了算數運算符:
假設整體變量 A 有 10 個,變量 B 有 20 個,那么:
示例
運算符 | 描述 | 例子 |
---|---|---|
+ | 加法 – 在運算符的另一端增加 | A+B 為 30 |
- | 減法 – 將右側的操作數從左側的操作數中減去 | A - B 為-10 |
* | 乘法 – 將運算符兩端的值相乘 | A * B 為200 |
/ | 除法 – 用右側操作數除左側操作數 | B / A 為2 |
% | 系數 - 用右側操作數除左側操作數并返回馀數 | B % A 為0 |
++ | 增量 – 給操作數的值增加1 | B++ 為21 |
-- | 減量 – 給操作數的值減去1 | B—為19 |
關系運算符
以下是 Java 語言可支持的關系運算符。
假設變量 A 有 10,變量 B 有 20,那么:
示例
運算符 | 描述 | 例子 |
---|---|---|
== | 檢查雙方操作數的值是否相等,如果相等那么條件為真 | (A == B) 不為真。 |
!= | 檢查雙方操作數的值是否相等,如果不相等那么條件為真 | (A != B) 為真。 |
> | 檢查左側的操作數是否大于右側的操作數,如果大于那么條件為真 | (A > B) 不為真。 |
< | 檢查左側的操作數是否小于右側的操作數,如果小于那么條件為真 | (A < B) 為真。 |
>= | 檢查左側的操作數是夠大于等于右側的操作數,如果是那么條件為真 | (A >= B) 不為真。 |
<= | 檢查左側的操作數是否小于等于右側的操作數,如果是那么條件為真 | (A <= B) 為真。 |
位運算符
Java 定義了幾種運算符,這類運算符可被運用于整數型式,long, int,short,字符型和字節型。
位運算符作用于二進制系統間傳輸標準,并執行按位操作。假設如果 a 等于 60;b 等于 13;現在在二進制型式下它們就如下所示:
a = 0011 1100 b = 0000 1101 ----------------- a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
以下表格列舉了位運算符:
假設整數變量 A 有 60 個,B 有 13 個那么:
示例
運算符 | 描述 | 例子 |
---|---|---|
& | 二進制AND運算符在結果上復制一位如果在雙方操作數同時存在 | (A & B) 為12,即 0000 1100 |
| | 二進制OR運算符在結果上復制一位如果在任何一個操作數上存在 | (A | B) 為61,即0011 1101 |
^ | 二進制XOR 運算符復制位,如果它是設置在一個操作數上而不是兩個。 | (A ^ B) 為49, 即0011 0001 |
~ | 二進制補充運算符是一元的,b并有“翻轉”位的影響 | (~A ) 為 -61,由于是帶符號的二進制數,那2的補位形式為1100 0011 |
<< | 二進制左移運算符。左側操作數的值根據右側操作數指定的位的數量移至左側。 | A << 2 為240 ,即1111 0000 |
>> | 二進制右移運算符。左側操作數的值根據右側操作數指定的位的數量移至右側。 | A >> 2 為 15即1111 |
>>> | 右移補零運算符。左側操作數的值根據右側操作數指定的位的數量移至右,并且轉移的值用零補滿。 | A >>>2 為15 ,即0000 1111 |
邏輯運算符
下表格列舉了邏輯運算符:
假設布爾數學體系變量 A 為真,B 為假,那么:
示例
運算符 | 描述 | 例子 |
---|---|---|
&& | 稱為邏輯與運算符。如果雙方操作數都不為零,那么條件為真。 | (A && B) 為真. |
|| | 稱為邏輯或運算符. 如果雙方操作數其中的任何一個都不為零,那么條件為真。 | (A || B) 為真. |
! | 稱為邏輯非運算符. 用作翻轉操作數的邏輯狀態。如果一個條件為真,那么邏輯非運算符為假。 | !(A && B) 為真. |
賦值運算符
以下是由 Java 語言所支持的賦值運算符:
示例
運算符 | 描述 | 例子 |
---|---|---|
= | 簡單及運算符, 將右側操作數的值賦給左側操作數 | C = A + B 會將 A + B 的值賦給 C |
+= | 增加及賦值運算符, 它將右側的操作數增加到左側的操作數并且結果賦給左側操作數 | C += A 同等于 C = C + A |
-= | 減去及賦值運算符,它將右側操作數從左側操作數中減去并將結果賦給左側操作數 | C -= A 同等于C = C - A |
*= | 乘以及賦值運算符,它將右側操作數與左側相乘并將結果賦給左側操作數 | C = A 同等于 C = C A |
/= | 除以及賦值運算符,它將右側操作數除左側操作數并將結果賦給左側操作數 | C /= A 同等于 C = C / A |
%= | 系數及賦值運算符 需要系數運用兩個操作數并且將結果賦給左側操作數 | C %= A is 同等于 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 語言所支持的一些其他的運算符:
條件運算符(?:)
條件運算符同樣也被稱作為三元運算符。這種運算符由三個操作數組成,被用作評估布爾數學體系表達。這種運算符的目的是來決定哪些值應被賦予到變量上。這個運算符被寫作如下:
variable x = (expression) ? value if true : value if false
以下是示例:
public class Test { public static void main(String args[]){ int a , b; a = 10; b = (a == 1) ? 20: 30; System.out.println( "Value of b is : " + b ); b = (a == 10) ? 20: 30; System.out.println( "Value of b is : " + b ); } }
這樣就會有如下結果:
Value of b is : 30 Value of b is : 20
Instanceof 符
這種操作符只用于對象引用變量。這種操作符檢查對象是否是獨特類型(類型或接口類型)。Instanceof 運算符寫為:
( Object reference variable ) instanceof (class/interface type)
如果在運算符左側的由變量所指代的對象為右側的類型或接口類型通過 IS-A 檢查,那么結果為真。以下是示例:
public class Test { public static void main(String args[]){ String name = "James"; // following will return true since name is type of String boolean result = name instanceof String; System.out.println( result ); } }
這就會產出如下結果:
class Vehicle {} public class Car extends Vehicle { public static void main(String args[]){ Vehicle a = new Car(); boolean result = a instanceof Car; System.out.println( result ); } }
這樣將會產生以下的結果:
true
Java 運算符的優先級
運算符優先級決定一個表達式里術語的分組。它影響著一個表達式如何求值。一定的運算符比其他運算符擁有更高的優先級;例如:乘法運算符比加法運算符有更高的優先級:
例如,x=7+3 2; 這里x 被賦值為13,不是20,是因為運算符 比運算符+由更高的優先級, 所以它首先運算乘法 3*2, 然后再加7。
這里,有著最高優先級的運算符在這個表格的最高一層,最低優先權的則出現在最底部。在一個表達式中,越高等級的優先權的運算符會最先被求值。
類 | 運算符 | 關聯性 |
---|---|---|
后綴 | () [] . (dot operator) | 從左到右 |
一元 | ++ - - ! ~ | 從右到左 |
乘法的 | * / % | 從左到右 |
加法的 | + - | 從左到右 |
移位 | >> >>> << | 從左到右 |
關系的 | > >= < <= | 從左到右 |
相等 | == != | 從左到右 |
位與 | & | 從左到右 |
位異或 | ^ | 從左到右 |
位或 | | | 從左到右 |
邏輯與 | && | 從左到右 |
邏輯或 | || | 從左到右 |
有條件的 | ?: | 從右到左 |
賦值 | = += -= *= /= %= >>= <<= &= ^== | 從右到左 |
逗號 | , | 從左到右 |