Scala基础教程(三):访问修饰符、运算符
包,類或?qū)ο蟮某蓡T可以標(biāo)記訪問(wèn)修飾符private和protected,如果我們不使用這兩種關(guān)鍵字,那么訪問(wèn)將被默認(rèn)設(shè)置為public。這些修飾 限制為成員的代碼的某些區(qū)域訪問(wèn)。要使用訪問(wèn)修飾符,包括它的包,類或?qū)ο蟮某蓡T定義的關(guān)鍵字,我們將在下一節(jié)中看到。
私有成員:
私有成員只能看到里面包含的成員定義的類或?qū)ο蟆O旅媸且粋€(gè)例子:
class Outer { ?? class Inner { ????? private def f() { println("f") } ????? class InnerMost { ???????? f() // OK ????? } ?? } ?? (new Inner).f() // Error: f is not accessible }在Scala中,訪問(wèn) (new Inner).f() 是非法的,因?yàn)閒被聲明為private內(nèi)部類并且訪問(wèn)不是在內(nèi)部類內(nèi)。與此相反,到f第一接入類最內(nèi)層是確定的,因?yàn)樵撛L問(wèn)包含在類內(nèi)的主體。 Java將允許這兩種訪問(wèn),因?yàn)樗梢宰屍鋬?nèi)部類的外部類訪問(wèn)私有成員。
保護(hù)成員:
受保護(hù)的成員是從該成員定義的類的子類才能訪問(wèn)。下面是一個(gè)例子:
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 訪問(wèn)是正常的,因?yàn)閒被聲明為受保護(hù)的超類和子類是超級(jí)的子類。相比之下,訪問(wèn) f 在其他是不允許的,因?yàn)槠渌麤](méi)有從超級(jí)繼承。在Java中,后者訪問(wèn)將仍然允許的,因?yàn)槠渌氖窃谕粋€(gè)包子。
公共成員:
未標(biāo)示私有或受保護(hù)的每一個(gè)成員是公開(kāi)的。不需要明確使用修飾符public。這樣的成員可以從任何地方訪問(wèn)。下面是一個(gè)例子:
class Outer { ?? class Inner { ????? def f() { println("f") } ????? class InnerMost { ???????? f() // OK ????? } ?? } ?? (new Inner).f() // OK because now f() is public }保護(hù)范圍:
Scala中的訪問(wèn)修飾符可以增加使用修飾符。形式:private[X]或protected[X]的修飾符意味著訪問(wèn)私有或受保護(hù)“達(dá)到”X,其中X代表了一些封閉的包,類或單個(gè)對(duì)象。考慮下面的例子:
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 ???????? } ????? } ?? } }注意,上面的例子中以下幾點(diǎn):
·????????變量workDetails將可對(duì)任何一類封閉包professional范圍內(nèi)。
·????????變量friends 將可對(duì)任何一類封閉包society中。
·????????變量secrets 將可只在實(shí)例方法隱含的對(duì)象(this)。
?
?
運(yùn)算符是一個(gè)符號(hào),告訴編譯器執(zhí)行特定的數(shù)學(xué)或邏輯操作。 Scala有豐富的內(nèi)置運(yùn)算符,運(yùn)算符提供了以下類型:
·????????算術(shù)運(yùn)算符
·????????關(guān)系運(yùn)算符
·????????邏輯運(yùn)算符
·????????位運(yùn)算符
·????????賦值運(yùn)算符
本章將學(xué)習(xí)研究算術(shù),關(guān)系,邏輯,按位,分配賦值和其他運(yùn)算符。
算術(shù)運(yùn)算符:
Scala語(yǔ)言支持以下算術(shù)運(yùn)算符:
假設(shè)變量A=10和變量B=20,則:
查看例子
| 運(yùn)算符 | 描述 | 示例 |
| + | 兩個(gè)操作數(shù)相加 | A + B = 30 |
| - | 從第一操作減去第二操作數(shù) | A - B = -10 |
| * | 兩個(gè)操作數(shù)相乘 | A * B = 200 |
| / | 通過(guò)分子除以分子 | B / A = 2 |
| % | 模運(yùn)算,整數(shù)除法后的余數(shù) | B % A = 0 |
關(guān)系運(yùn)算符:
Scala語(yǔ)言支持以下關(guān)系運(yùn)算符
假設(shè)變量A=10和變量B=20,則:
查看示例
| 運(yùn)算符 | 描述 | 示例 |
| == | 檢查兩個(gè)操作數(shù)的值是否相等,如果是的話那么條件為真。 | (A == B) 不為?true. |
| != | 檢查兩個(gè)操作數(shù)的值是否相等,如果值不相等,則條件變?yōu)檎妗?/span> | (A != B) 為?true. |
| >? | 檢查左邊的操作數(shù)的值是否大于右操作數(shù)的值,如果是的話那么條件為真。 | (A > B)?不為?true. |
| <? | 檢查左邊的操作數(shù)的值是否小于右操作數(shù)的值,如果是的話那么條件為真。 | (A < B) 為 true. |
| >= | 檢查左邊的操作數(shù)的值是否大于或等于右操作數(shù)的值,如果是的話那么條件為真。 | (A >= B)?不為?true. |
| <= | 檢查左邊的操作數(shù)的值是否小于或等于右操作數(shù)的值,如果是的話那么條件為真。 | (A <= B) 為 true. |
邏輯運(yùn)算符:
Scala語(yǔ)言支持以下邏輯運(yùn)算符
假設(shè)變量A=1和變量B=0,則:
查看示例
| 運(yùn)算符 | 描述 | 示例 |
| && | 所謂邏輯與操作。如果兩個(gè)操作數(shù)為非零則條件為真。 | (A && B) 為?false. |
| || | 所謂的邏輯或操作。如果任何兩個(gè)操作數(shù)是非零則條件變?yōu)檎妗?/span> | (A || B) 為 true. |
| ! | 所謂邏輯非運(yùn)算符。使用反轉(zhuǎn)操作數(shù)的邏輯狀態(tài)。如果條件為真,那么邏輯非操作符作出結(jié)果為假。 | !(A && B) 為 ?true. |
位運(yùn)算符:
位運(yùn)算符適用于位和位操作進(jìn)行一下。 :&, |, 和^ 其真值表如下:
| 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 |
假設(shè),如果A =60;B =13;現(xiàn)在以二進(jìn)制格式它們將如下:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A? = 1100 0011
Scala語(yǔ)言支持位運(yùn)算符列在下表中。假設(shè)變量A=60和變量B=13,則:
查看示例
| 運(yùn)算符 | 描述 | 示例 |
| & | 二進(jìn)制和運(yùn)算符副本位的結(jié)果,如果它存在于兩個(gè)操作數(shù)。 | (A & B) = 12, 也就是?0000 1100 |
| | | 二進(jìn)制或操作拷貝,如果它存在一個(gè)操作數(shù)。 | (A | B) = 61,?也就是?0011 1101 |
| ^ | 二進(jìn)制異或運(yùn)算符的副本,如果它被設(shè)置在一個(gè)操作數(shù)而不是兩個(gè)比特。 | (A ^ B) = 49,?也就是?0011 0001 |
| ~ | 二進(jìn)制的補(bǔ)運(yùn)算符是一元的,具有“翻轉(zhuǎn)”位的效應(yīng)。 | (~A ) = -61,?也就是?1100 0011在2補(bǔ)碼形式,由于一個(gè)帶符號(hào)二進(jìn)制數(shù)。 |
| <<? | 二進(jìn)制左移位運(yùn)算符。左邊的操作數(shù)的值向左移動(dòng)由右操作數(shù)指定的位數(shù)。 | A << 2 = 240, 也就是 1111 0000 |
| >>? | 二進(jìn)制向右移位運(yùn)算符。左邊的操作數(shù)的值由右操作數(shù)指定的位數(shù)向右移動(dòng)。 | A >> 2 = 15,?也就是?1111 |
| >>>? | 右移補(bǔ)零操作。左邊的操作數(shù)的值由右操作數(shù)指定的位數(shù)向右移動(dòng),并轉(zhuǎn)移值以零填充。 | A >>>2 = 15?也就是?0000 1111 |
賦值運(yùn)算符:
Scala語(yǔ)言支持以下賦值運(yùn)算符:
查看示例
| 運(yùn)算符 | 描述 | 示例 |
| = | 簡(jiǎn)單的賦值操作符,分配值從右邊的操作數(shù)左側(cè)的操作數(shù) | C = A + B 將分配?A + B 的值到?C |
| += | 加法和賦值運(yùn)算符,它增加了右操作數(shù)左操作數(shù)和分配結(jié)果左操作數(shù) | C += A 相當(dāng)于 C = C + A |
| -= | 減和賦值運(yùn)算符,它減去右操作數(shù)從左側(cè)的操作數(shù)和分配結(jié)果左操作數(shù) | C -= A 相當(dāng)于 C = C - A |
| *= | 乘法和賦值運(yùn)算符,它乘以右邊的操作數(shù)與左操作數(shù)和分配結(jié)果左操作數(shù) | C *= A 相當(dāng)于 C = C * A |
| /= | 除法和賦值運(yùn)算符,它把左操作數(shù)與右操作數(shù)和分配結(jié)果左操作數(shù) | C /= A 相當(dāng)于 C = C / A |
| %= | 模量和賦值運(yùn)算符,它需要使用兩個(gè)操作數(shù)的模量和分配結(jié)果左操作數(shù) | C %= A 相當(dāng)于 C = C % A |
| <<= | 左移位并賦值運(yùn)算符 | C <<= 2 等同于?C = C << 2 |
| >>= | 向右移位并賦值運(yùn)算符 | C >>= 2?等同于?C = C >> 2 |
| &= | 按位與賦值運(yùn)算符 | C &= 2?等同于C = C & 2 |
| ^= | 按位異或并賦值運(yùn)算符 | C ^= 2?等同于?C = C ^ 2 |
| |= | 按位或并賦值運(yùn)算符 | C |= 2?等同于?C = C | 2 |
Scala的運(yùn)算符優(yōu)先級(jí):
運(yùn)算符優(yōu)先級(jí)決定術(shù)語(yǔ)的表達(dá)式分組。這會(huì)影響一個(gè)表達(dá)式是如何進(jìn)行計(jì)算。某些運(yùn)算符的優(yōu)先級(jí)高于其他;例如,乘法運(yùn)算符的優(yōu)先級(jí)比所述加法運(yùn)算符優(yōu)先級(jí)更高:
例如X =7 + 3* 2;這里,x 被賦值13,而不是20,因?yàn)檫\(yùn)算符* 優(yōu)先級(jí)高于+,所以它首先做乘法3 * 2,然后加上7。
這里,具有最高優(yōu)先級(jí)的運(yùn)算符在表的頂部,那些優(yōu)先低級(jí)排在底部。在一個(gè)表達(dá)式,優(yōu)先級(jí)高的運(yùn)算符將首先計(jì)算。
| 分類? | 運(yùn)算符 | 關(guān)聯(lián) |
| 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 |
總結(jié)
以上是生活随笔為你收集整理的Scala基础教程(三):访问修饰符、运算符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Scala基础教程(二):数据类型、变量
- 下一篇: Scala基础教程(四):if语句、循环