Scala基础教程(三):访问修饰符、运算符
包,類或對象的成員可以標記訪問修飾符private和protected,如果我們不使用這兩種關鍵字,那么訪問將被默認設置為public。這些修飾 限制為成員的代碼的某些區域訪問。要使用訪問修飾符,包括它的包,類或對象的成員定義的關鍵字,我們將在下一節中看到。
私有成員:
私有成員只能看到里面包含的成員定義的類或對象。下面是一個例子:
class Outer { ?? class Inner { ????? private def f() { println("f") } ????? class InnerMost { ???????? f() // OK ????? } ?? } ?? (new Inner).f() // Error: f is not accessible }在Scala中,訪問 (new Inner).f() 是非法的,因為f被聲明為private內部類并且訪問不是在內部類內。與此相反,到f第一接入類最內層是確定的,因為該訪問包含在類內的主體。 Java將允許這兩種訪問,因為它可以讓其內部類的外部類訪問私有成員。
保護成員:
受保護的成員是從該成員定義的類的子類才能訪問。下面是一個例子:
package p { ?? class Super { ????? protected def f() { println("f") } ?? } ?? class Sub extends Super { ????? f() ?? } ?? class Other { ???? (new Super).f() // Error: f is not accessible ?? } }類分給 f 訪問是正常的,因為f被聲明為受保護的超類和子類是超級的子類。相比之下,訪問 f 在其他是不允許的,因為其他沒有從超級繼承。在Java中,后者訪問將仍然允許的,因為其他的是在同一個包子。
公共成員:
未標示私有或受保護的每一個成員是公開的。不需要明確使用修飾符public。這樣的成員可以從任何地方訪問。下面是一個例子:
class Outer { ?? class Inner { ????? def f() { println("f") } ????? class InnerMost { ???????? f() // OK ????? } ?? } ?? (new Inner).f() // OK because now f() is public }保護范圍:
Scala中的訪問修飾符可以增加使用修飾符。形式:private[X]或protected[X]的修飾符意味著訪問私有或受保護“達到”X,其中X代表了一些封閉的包,類或單個對象。考慮下面的例子:
package society { ?? package professional { ????? class Executive { ???????? private[professional] var workDetails = null ???????? private[society] var friends = null ???????? private[this] var secrets = null ? ???????? def help(another : Executive) { ??????????? println(another.workDetails) ??????????? println(another.secrets) //ERROR ???????? } ????? } ?? } }注意,上面的例子中以下幾點:
·????????變量workDetails將可對任何一類封閉包professional范圍內。
·????????變量friends 將可對任何一類封閉包society中。
·????????變量secrets 將可只在實例方法隱含的對象(this)。
?
?
運算符是一個符號,告訴編譯器執行特定的數學或邏輯操作。 Scala有豐富的內置運算符,運算符提供了以下類型:
·????????算術運算符
·????????關系運算符
·????????邏輯運算符
·????????位運算符
·????????賦值運算符
本章將學習研究算術,關系,邏輯,按位,分配賦值和其他運算符。
算術運算符:
Scala語言支持以下算術運算符:
假設變量A=10和變量B=20,則:
查看例子
| 運算符 | 描述 | 示例 |
| + | 兩個操作數相加 | A + B = 30 |
| - | 從第一操作減去第二操作數 | A - B = -10 |
| * | 兩個操作數相乘 | A * B = 200 |
| / | 通過分子除以分子 | B / A = 2 |
| % | 模運算,整數除法后的余數 | B % A = 0 |
關系運算符:
Scala語言支持以下關系運算符
假設變量A=10和變量B=20,則:
查看示例
| 運算符 | 描述 | 示例 |
| == | 檢查兩個操作數的值是否相等,如果是的話那么條件為真。 | (A == B) 不為?true. |
| != | 檢查兩個操作數的值是否相等,如果值不相等,則條件變為真。 | (A != B) 為?true. |
| >? | 檢查左邊的操作數的值是否大于右操作數的值,如果是的話那么條件為真。 | (A > B)?不為?true. |
| <? | 檢查左邊的操作數的值是否小于右操作數的值,如果是的話那么條件為真。 | (A < B) 為 true. |
| >= | 檢查左邊的操作數的值是否大于或等于右操作數的值,如果是的話那么條件為真。 | (A >= B)?不為?true. |
| <= | 檢查左邊的操作數的值是否小于或等于右操作數的值,如果是的話那么條件為真。 | (A <= B) 為 true. |
邏輯運算符:
Scala語言支持以下邏輯運算符
假設變量A=1和變量B=0,則:
查看示例
| 運算符 | 描述 | 示例 |
| && | 所謂邏輯與操作。如果兩個操作數為非零則條件為真。 | (A && B) 為?false. |
| || | 所謂的邏輯或操作。如果任何兩個操作數是非零則條件變為真。 | (A || B) 為 true. |
| ! | 所謂邏輯非運算符。使用反轉操作數的邏輯狀態。如果條件為真,那么邏輯非操作符作出結果為假。 | !(A && B) 為 ?true. |
位運算符:
位運算符適用于位和位操作進行一下。 :&, |, 和^ 其真值表如下:
| p | q | p & q | p | q | p ^ q |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
假設,如果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
Scala語言支持位運算符列在下表中。假設變量A=60和變量B=13,則:
查看示例
| 運算符 | 描述 | 示例 |
| & | 二進制和運算符副本位的結果,如果它存在于兩個操作數。 | (A & B) = 12, 也就是?0000 1100 |
| | | 二進制或操作拷貝,如果它存在一個操作數。 | (A | B) = 61,?也就是?0011 1101 |
| ^ | 二進制異或運算符的副本,如果它被設置在一個操作數而不是兩個比特。 | (A ^ B) = 49,?也就是?0011 0001 |
| ~ | 二進制的補運算符是一元的,具有“翻轉”位的效應。 | (~A ) = -61,?也就是?1100 0011在2補碼形式,由于一個帶符號二進制數。 |
| <<? | 二進制左移位運算符。左邊的操作數的值向左移動由右操作數指定的位數。 | A << 2 = 240, 也就是 1111 0000 |
| >>? | 二進制向右移位運算符。左邊的操作數的值由右操作數指定的位數向右移動。 | A >> 2 = 15,?也就是?1111 |
| >>>? | 右移補零操作。左邊的操作數的值由右操作數指定的位數向右移動,并轉移值以零填充。 | A >>>2 = 15?也就是?0000 1111 |
賦值運算符:
Scala語言支持以下賦值運算符:
查看示例
| 運算符 | 描述 | 示例 |
| = | 簡單的賦值操作符,分配值從右邊的操作數左側的操作數 | 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 相當于 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 |
Scala的運算符優先級:
運算符優先級決定術語的表達式分組。這會影響一個表達式是如何進行計算。某些運算符的優先級高于其他;例如,乘法運算符的優先級比所述加法運算符優先級更高:
例如X =7 + 3* 2;這里,x 被賦值13,而不是20,因為運算符* 優先級高于+,所以它首先做乘法3 * 2,然后加上7。
這里,具有最高優先級的運算符在表的頂部,那些優先低級排在底部。在一個表達式,優先級高的運算符將首先計算。
| 分類? | 運算符 | 關聯 |
| Postfix? | () [] | 從左到右 |
| Unary? | ! ~ | 從右到左 |
| Multiplicative ? | * / %? | 從左到右 |
| Additive ? | + -? | 從左到右 |
| Shift ? | >> >>> << ? | 從左到右 |
| Relational ? | > >= < <= ? | 從左到右 |
| Equality ? | == !=? | 從左到右 |
| Bitwise AND? | &? | 從左到右 |
| Bitwise XOR? | ^? | 從左到右 |
| Bitwise OR? | |? | 從左到右 |
| Logical AND? | &&? | 從左到右 |
| Logical OR? | ||? | 從左到右 |
| Assignment? | = += -= *= /= %= >>= <<= &= ^= |=? | 從右到左 |
| Comma? | ,? | 從左到右
from: http://www.yiibai.com/scala/scala_basic_syntax.html |
總結
以上是生活随笔為你收集整理的Scala基础教程(三):访问修饰符、运算符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scala基础教程(二):数据类型、变量
- 下一篇: Scala基础教程(四):if语句、循环