本文目錄一覽:
在Scala(和Java)類和類之間的區別是什麼
1. 當你說「型」我要去靜態類型居多。但我會談談動態類型不久。 靜態類型是可以靜態地證明(「沒有運行它」)中的程序的一部分的屬性。在靜態類型語言中,每個表達式都有一個類型無論你寫與否。例如,在CISH「詮釋x=A * B +C-D」,A,B,c和d具有類型,A * B有一個類型 CodeGo.net,一個* B +C有一個類型與A * B +C-D都有一個類型。但我們只註明x其中一個類型。在其他語言,比如Scala,C#,Haskell中,SML,和F#,即使這樣,也沒有必要。 究竟什麼樣的屬性是可證明取決於類型檢查。 Scala的樣式類,而另一方面,僅僅是規範的一組對象。該規範包括,包括了很多,代表性的細節,例如機構和private領域等在Scala中的類還指定模塊的border。 許多語言都有類型,但不具有類和許多語言都有課,但沒有(靜態)類型。 有類型和類之間的一些細微的差別。列表[字元串]是一種類型,但不是一類。在Scala中列出的是類,但通常不是一個類型(它實際上是一個更高的kinded型)。在C#中列出的是不是一個類型的任何一種,並在Java中這是一個「原始類型」。 Scala提供結構類型。 {foo的高清:pubs}指可證明有一個返回pubs,不分階級的任何對象。它是一個類型,但不是一個類。 類型可以是類型當你寫DEF為foo [T](X:T)=…,那麼foo的體內T是一個類型。但T是不是一類。 類型可以是虛擬的scala(即「抽象類,但是,今天(不能是虛擬與scala雖然有一個樣板沉重的方式來虛擬類編碼 現在,動態類型。動態類型對象執行某些操作之前,會自動檢查的性質。在動態類型的基於類的OO語言有類型和類之間有很強的相關性。事情發生在JVM語言比如Scala和Java具有隻可以動態地檢查,如反射和投射操作。在這些語言中,「類型擦除」更多的還是大多數對象的動態類型是因為他們的階級。更多或更少。這不是真正的,例如,它們通常不被擦除,使之可以告訴數組[INT]和數組[字元串]之間的區別數組。但我的寬泛定義的「動態類型對象的自動檢查的性質。」當反射也能夠發送到的對象。如果對象支持則一切正常了。是有意義的談話,可以嘎嘎如魚得水作為一個動態類型的所有對象,即使它不是一個類。這是一個什麼樣的Python和調用的本質「鴨打字。」此外,通過我的寬泛定義,甚至「zeroness」是一個動態的類型在某種意義上說,在大多數語言中,會自動檢查號碼,以確保你不被零除。有一個非常,非常少的語言,可以證明,靜態地使零(或不為零)的靜態類型。 最後,其他的也有類型,例如int不具有一個類作為一個細節,類型,如Null和任何這是一個有點特殊,但可能有類和不和類型,如沒有它甚至沒有任何值更何況是一個類。
2. 好吧,我會咬…有一個很好的答案,所以我要去嘗試不同的技巧和提供一個更下降到地球的觀點。 廣義地說,一類是可被實例化。單例對象(scala)性狀(scala)和介面(scala)被認為是類。這是有道理的,因為單身仍然實例化(代碼)和一個介面可以被實例化一個子類的一部分。 其中第二點.class是設計在大多數面向對象語言的基本單位(雖然不是基於原型的,如JavaScript)的。多態性與子類在類術語界定.class還提供了一個和可見性控制。 類型是一個非常不同的野獸,該系統能夠表達每一個可能的值將具有一種或多種類型,並且這些可以等同於類,例如:(Int) = String // both the type and class are Function1[Int,String]
“hello world” // class and type are String
您還可以得到scala和Java之間有趣差異:7 // both the class and type are Int in Scala
// in Java there’s no class and the type is Integer.TYPE
println(“hello world”) // the return type is Unit, of class Unit
// Java has void as a type, but no corresponding class
error(“oops”) // the type and class are both “Nothing”
而真正有趣的類型不屬於類的。例如,this.type始終指的unique類型this。這是唯一的一個實例,是不是與類的其他實例。 也有抽象類型和類型,例如:type A // ‘A’ is an undetermined abstract type
// to be made concrete in a subclass
class Seq[T] { … } // T is a type, but not a class
Seq有趣的是,因為它是一個類,而不是一個類型。更準確地說,它是一個「類的構造函數」,這將構建一個有效的類型時,提供必要的類型提供的類型構造器的另一個術語是「高kinded類型」,我個人不喜歡這個詞,因為「型構造」思在供應類型像任何其他表單的條款-模型,有良好的scala。 「高kinded」正確地暗示Seq有一個「種」,這是* = *,這個符號指出,Seq將採取單一的類型和產生一個單一的類型(這類似於用於描述函數柯里表示法)。通過這樣的一種Map是* = * = *它需要兩個類型
3. A型可通過本身,沒有任何實例.a個例子這就是所謂的「幽靈式」。下面是Java的一個例子: 在這個例子中,我們有public static class InitializerHA, HB,其中HA和HB取類型(由抽象類代表TRUE和FALSE),而沒有beeing實例化。 我希望這表明,類型和類是不同的,並且類型可以通過本身。
4. (僅限於Java),我會說,一類是一組對象。對象o是類型X如果o是集X.class型X是的子類型Y,如果設置X的一個子集Y。 對於每一個C類(不是介面)有一組對象,從創建new C(…)。有趣的是,我們很少在乎這一套。 (但每一個對象不屬於一組這樣的事實,這可能 對於每一個C類,有一種類型t(C)一般方稱為「C型」,這是一組可從被創建的所有對象的new S(…)其中,S是C或C的子類 類似地,對於每一個介面I,有一種類型的t(I),「I型」,這是一組可從被創建的所有對象的new S(…)其中S一 如果類S是的一個子類C,S型是C型的類似介面的子類型I有一個空值類型,它是空集。 NULL類型是每個類型的子類型。 有一組中的所有對象,這是Object類型。這是一個超類型每一種類型的。 到目前為止,這種表單主義是A型基本上是在一個類或介面,以及亞型的關係基本上是子類/子關係。在平凡是一件好事,語言是可以理解的!但進入仿製葯,有型,而像類型的並,交運算.class型不再只類和介面,以及亞型關係更豐富,更難理解。
Scala和java比較
1、 scala可以編寫腳本,編寫一個.scala的腳本代碼,直接用同scala x.scala進行執行。
但同時scala也可以類似java,通過scalac編譯為.class等形式,基於編譯執行。
2、 scala可以在互動式的命令中直接編碼運行。
3、 支持隱式變數定義,通過var關鍵詞定義一個變數,具體變數類型在賦值後,scala自行進行類型推斷。例如var a = List(1,2,3)
4、 常量定義用val 關鍵詞定義
5、 沒有靜態類型,通過object 定義單例類,main方法就是放在object類型中。
scala和java的區別
可以說scala來源於java,但又高於java,我的理解是scala就是在java語言的基礎上增加了一層編碼的 「殼」 讓程序人員可以通過函數式編程的方式來開發程序。由於scala最終被編譯為.class文件運行在JVM虛擬機中,其實本質上還是java, 所以在scala和java可以互調雙方的api;
區別:
1,變數的聲明
變數var 常量val scala支持自動類型推測
scala更多的是採用常量,而不是變數來解決問題,這樣帶來的好處是可以減少多線程並發安全問題,特別適合用於多並發分散式的場景
2,函數的聲明
關鍵字def, Scala函數沒有返回值用Unit,相當於java的void
Scala支持函數式編程,可以使用高階函數 函數是一等公民
3,基本類型
其實可以認為scala中並沒有真正意義上的基本類型,他的類型都是類
4,靜態
java中靜態static是違背java面向對象的編程思想和封裝特性的,scala取消了靜態的概念,使用了單例對象Object來實現
5,對字元串的支持
Scala支持使用字元串插值的方式對字元串進行格式化,使用$開頭進行取值
另外支持使用三引號將其中的內容直接包起來,其中可以包括任何字元而不需要轉義
6,類
Scala類中的欄位自動帶有getter和setter方法,另外可以使用@BeanProperty註解來生成java中的Get/Set方法
Scala中的每個類都有一個主構造器,這個構造器和類定義」交織在一起」,類的參數直接成為類的欄位,主構造器執行類體中所有的語句
7,Scala中不支持Break
使用return替代
在循環中用if和布爾類型變數進行守衛
導入java中支持break的包
8,訪問範圍問題
java中外部看不到內部,內部能看到外部
scala中外部看不到內部,內部看不到外部
9,通配符
Java使用*進行通配,Scala使用 _ 進行通配
10,默認導入的類
scala默認導入java.lang包、scala包、scala.Predef類。
java默認導入java.lang包
11,特質 trait — 可以類比java中的介面,但是又和介面非常不一樣
java中稱為類實現了介面 scala中稱為混入了特質
和java中的介面不同 scala中的特質可以包含 帶有方法體的方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239107.html