1. 程式人生 > >Scala基礎總結(二)

Scala基礎總結(二)

Scala總結

概述

scala是一門以java虛擬機器(JVM)為目標執行環境並將面向物件函數語言程式設計的最佳特性結合在一起的靜態型別程式語言。

scala是純粹的面向物件的語言。java雖然是面向物件的語言,但是它不是純粹的,因為java的基本資料型別不是類,並且在java中還有靜態成員變數和靜態方法。相反,scala是純粹面向物件的,每個值都是物件,每個操作都是方法呼叫。

scala也是一個成熟的函式式語言。函數語言程式設計有兩個指導思想:①函式是頭等值,也就是說函式也是值,並且和其他型別(如整數、字串等)處於同一地位,函式可以被當作引數傳遞,也可以被當作返回值返回,還可以在函式中定義函式等等;

②程式的操作應該把輸入值對映為輸出值而不是就地修改,也就是說函式呼叫不應產生副作用,雖然函數語言程式設計語言鼓勵使用“無副作用”的方法,但是scala並不強制你必須這麼做。scala允許你使用指令式的程式設計風格,但是隨著你對scala的深入瞭解,你可能會更傾向於一種更為函式式的程式設計風格。向函數語言程式設計轉變,你就應該儘量去使用val、不可變物件、無副作用方法,而不是var、可變物件、有副作用方法。要明白的是,從指令式程式設計向函數語言程式設計的轉變會很困難,因此你要做好充分的準備,並不斷的努力。

scala運行於JVM之上,並且它可以訪問任何的java類庫並且與java框架進行互操作,scala

也大量重用了java型別和類庫。

第一個scala程式:

object ScalaTest {

def main(args: Array[String]) {

println("hello scala.")

}

}

scala直譯器

安裝好scala並配置好PATH環境變數之後,就可以在終端中輸入scala命令開啟scala直譯器。在其中,你可以像使用shell一樣,使用TAB補全、Ctrl+r搜尋、上下方向鍵切換歷史命令等等。退出scala直譯器,可以使用命令:“:q”或者“:quit”。

由於直譯器是輸入一句執行一句,因此也常稱為REPLREPL一次只能看到一行程式碼,因此如果你要在其中貼上程式碼段的話,可能會出現問題,這時你可以使用貼上模式,鍵入如下語句:

:paste

然後把程式碼貼上進去,再按下Ctrl+d,這樣REPL就會把程式碼段當作一個整體來分析。

scala作為指令碼執行

scala程式碼也可以作為指令碼執行,只要你設定好程式碼檔案的shell前導詞preamble),並將程式碼檔案設定為可執行。如下:

#!/usr/bin/env scala

println("這是scala指令碼")

設定程式碼檔案為可執行,即可執行之啦。

scala指令碼的命令列引數儲存在名為args的陣列中,你可以使用args獲取命令列輸入的程式引數。

scala編譯執行

scala編譯器scalac會將scala程式碼編譯為jvm可以執行的位元組碼,然後就可以在jvm上執行了。假設有一個Hello.scala 檔案,我們就可以使用 scalac Hello.scala 編譯,然後使用 scala Hello 執行。當然也可以使用java工具來執行,但需要在classpath裡指定scala-library.jar。對於classpath,在Unix家族的系統上,類路徑的各個專案由冒號“:”分隔,在MS Windows系統上,它們由分號“;”分隔。例如,在linux上你可以輸入這樣的命令來執行(注意classpath最後加一個“.”):

java -classpath /usr/local/scala-2.10.4/lib/scala-library.jar:. Hello

scala IDE開發環境

你可以使用 eclipse 或者 intellij idea 作為scalaIDE開發環境,但都需要安裝scala外掛才行。下面分別介紹這兩種方式:

eclipse開發環境配置:

scala ide for eclipse(下載地址:http://scala-ide.org)中集成了scala外掛,你可以直接使用它進行開發,不過它包含的可能不是我們想要的scala版本,因此,還是在該網站上下載對應的scala外掛,插在eclipse上,這樣更好啊。

我們先安裝eclipse juno,然後下載eclipse juno以及scala 2.10.4對應的scala sdk外掛升級包:update-site.zip。將外掛解壓縮,將 features plugins 目錄下的所有東東都複製到eclipse中的對應目錄中,重啟eclipse即可。然後就可以新建scala project了。

intellij idea開發環境配置:

我們先安裝好intellij idea,然後安裝scala外掛,自動安裝外掛有時會非常慢,尤其是在china。我們還是手動配置外掛吧。請注意外掛的版本,必須與當前idea版本相容。手動配置外掛方法如下:

(1) 進入 setting > plugins > browse repositorits 搜尋你要下載的外掛名稱,右側可以找到下載地址。

(2) 解壓外掛壓縮包,把外掛的全部檔案都複製到IntelliJ IDEA安裝程式的plugins資料夾中,注意外掛最好以一個單獨的資料夾放在plugins目錄下。

(3) 一般重啟intellij idea就會自動載入外掛,進入 setting > plugins 看看有木有。如果不自動載入的話,進入setting > plugins > install plugin from disk,找到剛才複製的外掛位置,再然後就好了。

接下來就可以新建scala project,新建時我選擇的是“Scala”(不是sbt,因為我這選擇sbt之後,等半天sbt都不會配置好,鬱悶啊)。

相關知識

什麼是SBT SBT = (not so) Simple Build Tool,是scala的構建工具,與javamaven地位相同。其設計宗旨是讓簡單的專案可以簡單的配置,而複雜的專案可以複雜的配置。

scala特點

scala中,語句之後的“;”是可選的,這根據你的喜好。當有多個語句在同一行時,必須加上分號,但不建議把多個語句放在一行。

scala中,建議使用2個空格作為程式碼縮排,不過我咋喜歡一個tab ⊙﹏⊙!

scala中,符號“_”相當於java中的萬用字元“*”。

scala類似於c++java,索引也是從0開始,但元組是個例外,它從1開始。

資料型別

scala7種數值型別:ByteCharShortIntLongFloatDouble,以及2種非數值型別:BooleanUnit(只有一個值()”,相當於javac++中的void,即空值)。這些型別都是抽象的final(不能使用new新建,也不能被繼承),在scala包中定義,是對java基本資料型別的包裝,因此與java基本資料型別有相同的長度。同時,scala還提供了RichIntRichChar等等,它們分別提供IntChar等所不具備的便捷方法。

另外,scala沿用了java.lang包中的String。在scala中,常量也稱作字面量,字串字面量由雙引號包含的字元組成,同時scala提供了另一種定義字串常量的語法——原始字串,它以三個雙引號作為開始和結束,字串內部可以包含無論何種任意字元。

scala中,我們使用方法,而不是強制型別轉換,來做數值型別之間的轉換,如99.44.toInt97.toChar。另外也可以參見顯式型別轉換和隱式轉換。

變數

scala有兩種變數:valvarval如同java中的final變數,var如同java中的非final變數。由於scala是完全面向物件的,因此valvar只是聲明瞭物件的引用是不可變的還是可變的,並不能說明引用指向的物件的可變性。宣告變數的同時需要初始化之,否則該變數就是抽象的。如果不指定變數的型別,編譯器會從初始化它的表示式中推斷出其型別。當然你也可以在必要的時候指定其型別,但注意,在scala變數或函式的型別總是寫在變數或函式的名稱的後邊。示例如下:

val answer = “yes”

val answer, message: String = “yes”

識別符號

scala識別符號有四種形式:字母數字識別符號操作符識別符號混合識別符號字面量識別符號

字母數字識別符號:跟其他語言類似,由字母、數字和下劃線組成,但需注意$”字元被保留作為scala編譯器產生的識別符號之用,你不要隨意使用它啊。

操作符識別符號:由一個或多個操作符字元組成。scala編譯器將在內部“粉碎”操作符識別符號以轉換成合法的內嵌“$”的java識別符號。若你想從java程式碼中訪問這個識別符號,就應該使用這種內部表示方式。

混合識別符號:由字母數字以及後面跟著的下劃線和一個操作符識別符號組成。如unary_+定義了一個字首操作符“+”

字面量識別符號是用反引號``包含的任意字串scala將把被包含的字串作為識別符號,即使被包含字串是scala的關鍵字。例如:你可以使用Thread.`yield`()來訪問java中的方法,即使yieldscala的關鍵字。

操作符

scala的操作符和你在javaC++中的預期效果是一樣的,但注意scala並不提供++--操作符。不過,scala中的操作符實際上都是方法,任何方法都可以當作操作符使用,如 a + b 相當於 a.+(b)

需要注意的是:對於不可變物件(注:物件的不可變並不是說它的引用變數是val),並不真正支援類似於“+=”這樣以“=”結尾的操作符(即方法),不過scala還是提供了一些語法糖,用以解釋以“=”結尾的操作符用於不可變物件的情況。假設a是不可變物件的引用,那麼在scalaa += b將被解釋為a = a + b,這時就相當於新建一個不可變物件重新賦值給引用a,前提是引用變數a要宣告為var的,因為val變數定義之後是不可變的。

更多資訊參見函式(方法)部分。

塊表示式與賦值

scala中,{}包含一系列表示式,其結果也是一個表示式,塊中最後一個表示式的值就是其值

scala中,賦值語句本身的值是Unit型別的。因此如下語句的值為“()”:

{r = r * n; n -= 1}

正是由於上述原因,scala中不能多重賦值,而javac++卻可以多重賦值。因此,在scala中,如下語句中的x值為“()”:

x = y = 1

控制結構

scala和其他程式語言有一個根本性差異:在scala中,幾乎所有構造出來的語法結構都有值。這個特性使得程式結構更加精簡。scala內建的控制結構很少,僅有ifwhilefortrymatch和函式呼叫而已。如此之少的理由是,scala從語法層面上支援函式字面量。

if表示式

scalaif/else語法結構與java等一樣,但是在scalaif/else表示式有值,這個值就是跟在if/esle後邊的表示式的值。如下:

val s = if(x > 0) 1 else -1

同時注意:scala的每個表示式都有一個型別,比如上述if/esle表示式的型別是Int。如果是混合型別表示式,則表示式的型別是兩個分支型別的公共超型別。StringInt的超型別就是Any。如果一個if語句沒有else部分,則當if條件不滿足時,表示式結果為Unit。如:

if(x > 0) 1

就相當於:

if(x > 0) 1 else ()

while迴圈

scala擁有與javac++中一樣的whiledo-while迴圈,whiledo-while結果型別是Unit

for表示式

scala沒有類似於for(; ; )for迴圈,你可以使用如下形式的for迴圈語句:

for(i <- 表示式)

for表示式語法對於陣列和所有集合類均有效。具體介紹如下:

列舉

for(i <- 1 to 10),其中“i <- 表示式語法稱之為發生器該語句是讓變數i注意此處迴圈變數ival的(但無需你指定),該變數的型別是集合的元素型別)遍歷表示式中的所有值1 to 10產生的Range包含上邊界,如果不想包含上邊界,可以使用until

過濾

也叫守衛,在for表示式的發生器中使用過濾器可以通過新增if子句實現,如:for(i <- 1 to 10 if i!=5),如果要新增多個過濾器,即多個if子句的話,要用分號隔開,如:for(i <- 1 to 10 if i!=5; if i!=6)

巢狀列舉

如果使用多個“<-”子句,你就得到了巢狀的迴圈,如:for(i <- 1 to 5; j <- 1 to i)

流間變數繫結

你可以在for發生器以及過濾器等中使用變數儲存計算結果,以便在迴圈體中使用,從而避免多次計算以得到該結果。流間變數繫結和普通變數定義相似,它被當作val,但是無需宣告val關鍵字。

製造新集合

for(…) yield 變數/迴圈體,最終將產生一個集合物件,集合物件的型別與它第一個發生器的型別是相容的。

實際上for表示式具有等價於組合應用mapflatMapfilterforeach這幾種高階函式的表達能力。實際上,所有的能夠yield(產生)結果的for表示式都會被編譯器轉譯為高階方法mapflatMapfilter的組合呼叫;所有的不帶yieldfor迴圈都會被轉譯為僅對高階函式filterforeach的呼叫。正是由於這幾個高階函式支援了for表示式,所以如果一個數據型別要支援for表示式,它就要定義這幾個高階函式。有些時候,你可以使用for表示式代替mapflatMapfilterforeach的顯式組合應用,或許這樣會更清晰明瞭呢。

scala中沒有breakcontinue語句。如果需要類似的功能時,我們可以:

1) 使用Boolean型別的控制變數

2) 使用巢狀函式,你可以從函式當中return

3) ...

match表示式模式匹配

scala中沒有switch,但有更強大的match。它們的主要區別在於:

① 任何型別的常量/變數,都可以作為比較用的樣本;

② 在每個case語句最後,不需要breakbreak是隱含的;

③ 更重要的是match表示式也有值;

④ 如果沒有匹配的模式,則MatchError異常會被丟擲。

match表示式的形式為:選擇器 match { 備選項}。一個模式匹配包含了一系列備選項,每個都開始於關鍵字case。每個備選項都包含了一個模式以及一到多個表示式,它們將在模式匹配過程中被計算。箭頭符號=>”隔開了模式和表示式。按照程式碼先後順序,一旦一個模式被匹配,則執行“=>”後邊的表示式((這些)表示式的值就作為match表示式的值),後續case語句不再執行。示例如下:

a match {

case 1 => "match 1"

case _ => "match _"

}

match模式的種類如下:

① 通配模式:可以匹配任意物件,一般作為預設情況,放在備選項最後,如:

case _ =>

② 變數模式:類似於萬用字元,可以匹配任意物件,不同的是匹配的物件會被繫結在變數上,之後就可以使用這個變數操作物件。所謂變數就是在模式中臨時生成的變數,不是外部變數,外部變數在模式匹配時被當作常量使用,見常量模式。注意:同一個模式變數只能在模式中出現一次。

③ 常量模式:僅匹配自身,任何字面量都可以作為常量,外部變數在模式匹配時也被當作常量使用,如:

case "false" => "false"

case true => "truth"

case Nil => "empty list"

對於一個符號名,是變數還是常量呢scala使用了一個簡單的文字規則對此加以區分:用小寫字母開始的簡單名被當作是模式變數,所有其他的引用被認為是常量。如果常量是小寫命名的外部變數,那麼它就得特殊處理一下了:如果它是物件的欄位,則可以加上“this.”“obj.”字首;或者更通用的是使用字面量識別符號解決問題,也即用反引號“`”包圍之。

④ 抽取器模式抽取器機制基於可以從物件中抽取值的unapplyunapplySeq方法,其中,unapply用於抽取固定數量的東東,unapplySeq用於抽取可變數量的東東,它們都被稱為抽取方法,抽取器正是通過隱式呼叫抽取方法抽取出對應東東的。抽取器中也可以包含可選的apply方法,它也被稱作注入方法,注入方法使你的物件可以當作構造器來用,而抽取方法使你的物件可以當作模式來用,物件本身被稱作抽取器,與是否具有apply方法無關樣本類會自動生成伴生物件並新增一定的句法以作為抽取器,實際上,你也可以自己定義一個任意其他名字的單例物件作為抽取器使用,以這樣的方式定義的抽取器物件與樣本類型別是無關聯的。你可以對陣列、列表、元組進行模式匹配,這正是基於抽取器模式的。

⑤ 型別模式:你可以把型別模式當作型別測試和型別轉換的簡易替代,示例如下:

case s: String => s.length

⑥ 變數繫結:除了獨立的變數模式之外,你還可以把任何其他模式繫結到變數。只要簡單地寫上變數名、一個@符號,以及這個模式。

模式守衛:模式守衛接在模式之後,開始於if,相當於一個判斷語句。守衛可以是任意的引用模式中變數的布林表示式。如果存在模式守衛,只有在守衛返回true的時候匹配才算成功。

Option型別scala為可選值定義了一個名為Option的標準型別,一個Option例項的值要麼是Some型別的例項,要麼是None物件。分離可選值最通常的辦法是通過模式匹配,如下:

case Some(s) => s

case None => “?”

模式無處不在:在scala中,模式可以出現在很多地方,而不單單在match表示式裡。比如:

① 模式使用在變數定義中,如下:

val myTuple = (123, “abc”)

val (number, string) = myTuple

② 模式匹配花括號中的樣本序列(即備選項)可以用在能夠出現函式字面量的任何地方,實質上,樣本序列就是更普遍的函式字面量,函式字面量只有一個入口點和引數列表,樣本序列可以有多個入口點,每個都有自己的引數列表,每個樣本都是函式的一個入口點,引數被模式所特化。如下:

val withDefault: Option[Int] => String = {

case Some(x) => "is int"

case None => "?"

}

③ for表示式裡也可以使用模式。示例如下:

for((number, string) <- myTuple) println(number + string)

模式匹配中的中綴標註:帶有兩個引數的方法可以作為中綴操作符使用,使用中綴操作符時實際上是其中一個運算元在呼叫操作符對應的方法,而另一個運算元作為方法的引數。但對於模式來說規則有些不同:如果被當作模式,那麼類似於p op q這樣的中綴標註等價於op(p,q),也就是說中綴標註符op被用做抽取器模式。

函式

函式定義

定義函式時,除了遞迴函式之外,你可以省略返回值型別宣告,scala會根據=號後邊的表示式的型別推斷返回值型別,同時=號後邊表示式的值就是函式的返回值,你無需使用return語句(scala推薦你使用表示式值代替return返回值,當然根據你的需要,也可以顯式使用return返回值)。示例如下:

def abs(x: Double) = if(x >= 0) x else -x

def fac(n: Int) = {

var r = 1

for(i <- 1 to n) r = r * i

r

}

對於遞迴函式必須指定返回值型別,如下:

def fac(n: Int) : Int = if(n <= 0 ) 1 else  n * fac(n-1)

但你要知道的是:宣告函式返回型別,總是有好處的,它可以使你的函式介面清晰。因此建議不要省略函式返回型別宣告

函式體定義時有“=”時,如果函式僅計算單個結果表示式,則可以省略花括號。如果表示式很短,甚至可以把它放在def的同一行裡。

去掉了函式體定義時的“=”的函式一般稱之為過程,過程函式的結果型別一定是Unit。因此,有時定義函式時忘記加等號,結果常常是出乎你的意料的。

沒有返回值的函式的預設返回值是Unit

函式呼叫

scala中,方法呼叫的空括號可以省略。慣例是如果方法帶有副作用就加上括號,如果沒有副作用就去掉括號。如果在函式定義時,省略了空括號,那麼在呼叫時,就不能加空括號。另外,函式作為操作符使用時的呼叫形式參見相應部分。

函式引數

一般情況下,scala編譯器是無法推斷函式的引數型別的,因此你需要在引數列表中宣告引數的型別。對於函式字面量來說,根據其使用環境的不同,scala有時可以推斷出其引數型別。

scala裡函式引數的一個重要特徵是它們都是val(這是無需宣告的,在引數列表裡你不能顯式地宣告引數變數為val),不是var,所以你不能在函式裡面給引數變數重新賦值,這將遭到編譯器的強烈反對。

重複引數

scala中,你可以指明函式的最後一個引數是重複的,從而允許客戶向函式傳入可變長度引數列表。要想標註一個重複引數,可在引數的型別之後放一個星號“*”。例如:

def echo(args: String*) = for(arg <- args) println(arg)

這樣的話,echo就可以被零至多個String引數呼叫。在函式內部,重複引數的型別是宣告引數型別的陣列。因此,echo函式裡被宣告為型別“String*”args的型別實際上是Array[String]。然而,如果你有一個合適型別的陣列,並嘗試把它當作重複引數傳入,會出現編譯錯誤。要實現這個做法,你需要在陣列名後新增一個冒號和一個_*符號,以告訴編譯器把陣列中的每個元素當作引數,而不是將整個陣列當作單一的引數傳遞給echo函式,如下:

echo(arr: _*)

預設引數命名引數

函式的預設引數與java以及c++中相似,都是從左向右結合。另外,你也可以在呼叫時指定引數名。示例如下:

def fun(str: String, left: String = “[”, right: String = “]”) = left + str + right

fun(“hello”)

fun(“hello”, “<<<”)

fun(“hello”, left = “<<<”)

函式與操作符

從技術層面上來說,scala沒有操作符過載,因為它根本沒有傳統意義上的操作符。諸如“+”“-”“*”“/”這樣的操作符,其實呼叫的是方法。方法被當作操作符使用時,根據使用方式的不同,可以分為:中綴標註(操作符)、字首標註、字尾標註。

中綴標註:中綴操作符左右分別有一個運算元。方法若只有一個引數(實際上是兩個引數,因為有一個隱式的this),呼叫的時候就可以省略點及括號。實際上,如果方法有多個顯式引數,也可以這樣做,只不過你需要把引數用小括號全部括起來。如果方法被當作中綴操作符來使用(也即省略了點及括號),那麼左運算元是方法的呼叫者,除非方法名以冒號“:”結尾(此時,方法被右運算元呼叫)。另外,scala的中綴標註不僅可以在操作符中存在,也可以在模式匹配型別宣告中存在,參見相應部分。

字首標註:字首操作符只有右邊一個運算元。但是對應的方法名應該在操作符字元上加上字首“unary_”。識別符號中能作為字首操作符用的只有+-!~

字尾標註:字尾操作符只有左邊一個運算元。任何不帶顯式引數的方法都可以作為字尾操作符。

scala中,函式的定義方式除了作為物件成員函式的方法之外,還有內嵌在函式中的函式函式字面量和函式值

巢狀定義的函式

巢狀定義的函式也叫本地函式,本地函式僅在包含它的程式碼塊中可見。

相關推薦

Scala基礎總結

Scala總結概述scala是一門以java虛擬機器(JVM)為目標執行環境並將面向物件和函數語言程式設計的最佳特性結合在一起的靜態型別程式語言。scala是純粹的面向物件的語言。java雖然是面向物件的語言,但是它不是純粹的,因為java的基本資料型別不是類,並且在java

java基礎總結---關鍵字

-- rem 關鍵字 rgs java err style ret 基礎總結 1.this   在java中, this 對象,它可以在類裏面來引用這個類的屬性和方法。   1.它在方法內部使用,即這個方法所屬的對象的引用。   2.它在構造器內部使用,表示該構造器正在初始

node基礎總結

ack ace content node body ons favicon name utf-8 獲取路由(訪問路徑) 6_path.js代碼: var http = require(‘http‘); var url = require(‘url‘); var route

C#基礎總結 —— C#開發工具 Visual Studio(IDE)

暫停 基本上 必備 img 包含 adl 裏的 方案 運行 一、Visual Studio   Visual Studio 是微軟公司的一個開發工具集,是C#開發必備利器。下面附上VS2013簡體中文社區版的下載地址:    鏈接:https://pan.baidu.com

Vue-router路由基礎總結

發現 路由配置 script -s r12 ali 添加 實例 code 一、命名路由   有時我們通過一個名稱來標識一個路由顯得更方便一些,特別是在鏈接一個路由,或者是執行一些跳轉的時候。你可以在創建 Router 實例的時候,在 routes 配置中給某個路由設置名稱。

java 面試基礎總結---多線程

future sync 一個 副本 void all call ava task 1、實現多線程的三種方法 1.繼成Thread 類,覆蓋run()方法即可 2.implements Runnable接口 3.implements Callale接口,執行時通過Future

Python的語言基礎總結之循環與字符串操作

整數 範圍 輸入 IV 字符串 spl 余額 upper ict 一、循環和分支   1.  條件分支語句   if  條件:     代碼塊   else:     代碼塊   2.  循環語句之while   思考1:求1+2+3+....+10的值    sum =

js基礎總結js的執行機制

執行結果首先全部輸出first,然後全部輸出second。 再來看一道題: 應該是依次彈出4444 這裡考察的都是JS的執行機制。事件click, focus等等,定時器setTimeout和setInterval,ajax都會觸發非同步,屬於非同步任務。js是單執行緒的一個時

Scala基礎入門 Scala下載、安裝教程

Windows中Scala執行環境的安裝配置 第二步安裝 Scala: 下載 Scala SCALA_HOME 環境變數, 指定 D:\217JobSoftwares\scala-2.12.3\scala-2.12.3; 新增到 系

Scala基礎總結

Scala總結抽象類和抽象成員 與java相似,scala中abstract宣告的類是抽象類,抽象類不可以被例項化。 在scala中,抽象類和特質中的方法、欄位和型別都可以是抽象的。示例如下: trait MyAbstract { type T // 抽象型別

Scala基礎教程:資料型別、變數

基礎語法 關於Scala程式,這是非常要注意以下幾點。 ·        區分大小寫 -  Scala是大小寫敏感的,這意味著標識Hello 和 hello在Scala中會有不同的含義。 ·        類名 - 對於所有的類名的第一個字母要大寫。 如果需要使用幾個單詞來

Java基礎總結----集合、多執行緒、io、虛擬機器等

Java集合 java集合框架的結構 List介面 List介面通常表示一個列表(陣列、佇列、連結串列、棧等),其中的元素可以重複,常用實現類為ArrayList和LinkedList,另外還有不常用的Vector。另外,LinkedList還

JavaScript基礎總結

運算子   1.算數運算子:+ - * / % ++ --   2.比較運算子:    > < >= <= != == ===(全等於)    !==   比較運算子兩側如果一個是數字型別,一個是其他型別,會將其型別轉換成數字型別.   比較運算子兩側

Java基礎總結基本資料型別的引用

在上一篇文章中我們談到了引用,這篇文章我們就來談談引用在基本資料型別與其對應的包裝類應用與分析 先看看下面這段程式碼: @Test public void test() { int a = 10; int b =

工作中能用到的基礎知識總結

protected 構造函數 blog 繼承鏈 附加 調用 初始化 傳統 -s 簡介 繼承、封裝和多態是面向對象編程的重要特性。要想運用好,就必須熟悉這三種特性,本篇說說我對封裝、繼承和多態相關的知識總結。 知識點 一、訪問修飾符 C#中類及

css基礎知識的復習總結

文本 pin zoom clear head 導航 設置 mage 之間 文檔流、浮動、清除浮動、overflow、定位 1.文檔流 css文檔流,標準流是什麽? 元素自上而下,自左而右,塊元素獨占一行,行內元素在一行上顯示,碰到父集元素的邊框換行。

總結javascript基礎概念:事件隊列循環

數量 次循環 下一個 es6 類型 同步 函數 ref rip 主要問題:   1、JS引擎是單線程,如何完成事件循環的?   2、定時器函數為什麽計時不準確?   3、回調與異步,有什麽聯系和不同?   4、ES6的事件循環有什麽變化?Node中呢?   5、異步控制有什

JavaSE學習總結——Java語言基礎

默認 ase oid 64位 pac 交互 log 類型 blank 目錄 一、Java程序預覽 1.1、Hello World 1.2、Eclipse使用 1.2.1、項目位置 1.2.2、重置窗口布局 1.2.3、設置字體 1.2.4、修改控制臺字體 1.2.4

Vue基礎知識總結

定義 mouse 括號 bind turn clientx clas 倒序 花括號 一、解決網速慢的時候用戶看到花括號標記   (1)v-cloak,防止閃爍,通常用於比較大的選擇器上。   給元素添加屬性v-cloak,然後style裏面:[v-cloak]{displa

安卓介面基礎知識總結:RelativeLayout佈局的常見屬性

1.android:layout_above="@id/xxx"  --將控制元件置於給定ID控制元件之上   android:layout_below="@id/xxx"  --將控制元件置於給定ID控制元件之下 2.android:layout_marginLe