Java和Scala學習日記1,javascala日記
1. Scala資料類型
(1)Byte:8位有符號補碼整數。數值區間為-128到127。
(2)Short:16位有符號補碼整數。數值區間為-32768到32767。
(3)Int:32位有符號補碼整數。數值區間為-2147483648到2147483647。
(4)Long:64位有符號補碼整數。數值區間為-9223372036854775808到9223372036854775807。
(5)Float:32位IEEE754單精確度浮點數。
(6)Double:64位IEEE754單精確度浮點數。
(7)Char:16位無符號Unicode字元,區間值為U+0000到U+FFFF。
(8)String:字元序列。
(9)Boolean:true或false。
(10)Unit:表示無值,和其它語言void等同。用作不返回任何結果方法的結果類型。Unit只有一個執行個體值,寫成()。
(11)Null:null或Null 參考。
(12)Nothing:Nothing類型在Scala的類層級的最低端,它是任何其它類型的子類型。
(13)Any:Any是所有其它類的超類。
(14)AnyRef:AnyRef類是Scala裡所有引用類(reference class)的基。
2. Scala存取修飾詞
Scala存取修飾詞包括:private,protected,public,如下所示:
(1)private
在Java中允許外部類訪問內部類的私人成員,但是在Scala中是不允許外部類訪問內部類的私人成員的。
(2)protected
在Java中允許類的子類,以及同一包中的類訪問保護成員,但是在Scala中僅允許類的子類訪問保護成員。
(3)public
如果沒有指定任何的修飾符,那麼Scala預設為public。
(4)範圍保護
private[x]表示"這個成員除了對[…]中的類或[…]中的包中的類及它們的伴生對像可見外,對其它所有類都是private。
需要說明的是x可以指代某個所屬的包、類或單例對象。
說明:Scala運算子包括算術運算子,關係運算子,邏輯運算子,位元運算符,賦值運算子等。
3. Java資料結構
解析:
(1)枚舉(Enumeration):枚舉(Enumeration)介面本身不屬於資料結構,但它定義了一種從資料結構中取回連續元素的方式。
(2)位集合(BitSet):一個Bitset類建立一種特殊類型的數組來儲存位值。BitSet中數組大小會隨需要增加。
(3)向量(Vector):該類和ArrayList非常相似,但是該類是同步的,可以用在多線程的情況,該類允許設定預設的增長長度,預設擴容方式為原來的2倍。
(4)棧(Stack):棧是Vector的一個子類,它實現了一個標準的後進先出的棧。
(5)字典(Dictionary):Dictionary類是一個抽象類別,用來儲存鍵/值對,作用和Map類相似。
(6)雜湊表(Hashtable):Hashtable是Dictionary(字典)類的子類,位於java.util包中。
(7)屬性(Properties):Properties繼承於Hashtable,表示一個持久的屬性集,屬性列表中每個鍵及其對應值都是一個字串。
4. Java多線程
解析:
(1)採用實現Runnable、Callable介面的方式創見多線程時,線程類只是實現了Runnable介面或Callable介面,還可以繼承其它類。
(2)使用繼承Thread類的方式建立多線程時,編寫簡單,如果需要訪問當前線程,則無需使用
Thread.currentThread()方法,直接使用this即可獲得當前線程。
5. javadoc標籤
解析:
(1)@author:標識一個類的作者:@author description
(2)@deprecated:指名一個到期的類或成員:@deprecated description
(3){@docRoot}:指明當前主目錄的路徑:Directory Path
(4)@exception:標誌一個類拋出的異常:@exception exception-name explanation
(5){@inheritDoc}:從直接父類繼承的注釋:Inherits a comment from the immediate surperclass.
(6){@link}:插入一個到另一個主題的連結:{@link name text}
(7){@linkplain}:插入一個到另一個主題連結,但該連結顯示純文字字型:Inserts an in-line link to another topic.
(8)@param:說明一個方法的參數:@param parameter-name explanation
(9)@return:說明傳回值類型:@return explanation
(10)@see:指定一個到另一個主題的連結:@see anchor
(11)@serial:說明一個序列化屬性:@serial description
(12)@serialData:說明通過writeObject()和writeExternal()方法寫的資料:@serialData description
(13)@serialField:說明一個ObjectStreamField組件:@serialField name type description
(14)@since:標記當引入一個特定的變化時:@since release
(15)@throws:和@exception標籤一樣:The @throws tag has the same meaning as the @exception tag.
(16){@value}:顯示常量值,該常量須static屬性:Displays the value of a constant, which must be a static field.
(17)@version:指定類的版本:@version info
6. import java.util.{HashMap => _, _}
解析:引入了util包的所有成員,但是HashMap被隱藏了。
說明:預設情況下,Scala總會引入java.lang._ 、scala._和Predef._。
7. Scala Collection
解析:
(1)Scala List(列表):List的特徵是其元素以線性方式儲存,集合中可以存放重複對象。
(2)Scala Set(集合):Set是最簡單的一種集合。集合中的對象不按特定的方式排序,並且沒有重複對象。
(3)Scala Map(映射):Map是一種把鍵對象和值對象映射的集合,它的每一個元素都包含一對鍵對象和值對象。
(4)Scala 元組:元組是不同類型的值的集合。
(5)Scala Option:Option[T]表示有可能包含值的容器,也可能不包含值。
(6)Scala Iterator(迭代器):迭代器不是一個容器,更確切的說是逐一訪問容器內元素的方法。
8. ScalaNLP,Breeze,Epic,Puck
解析:
(1)ScalaNLP:a suite of machine learning and numerical computing libraries.
(2)Breeze:a set of libraries for machine learning and numerical computing.
(3)Epic:a high-performance statistical parser and structured prediction library.
(4)Puck:an insanely fast GPU-powered parser, built on the same grammars produced by Berkeley Parser.
9. Breeze
解析:
(1)breeze-math: Numerics and Linear Algebra. Fast linear algebra backed by native libraries (via JBlas) where appropriate.
(2)breeze-process: Tools for tokenizing, processing, and massaging data, especially textual data. Includes stemmers, tokenizers, and stop word filtering, among other features.
(3)breeze-learn: Optimization and Machine Learning. Contains state-of-the-art routines for convex optimization, sampling distributions, several classifiers, and DSLs for Linear Programming and Belief Propagation.
(4)breeze-viz: (Very alpha) Basic support for plotting, using JFreeChart.
10. Fernflower
解析:一個對Java程式進行反編譯分析的利器。
11. 物件導向行為特徵
解析:
(1)繼承是物件導向實現軟體複用的重要手段,當子類繼承父類後,子類作為一種特殊的父類,將直接獲得父類的屬性和方法;
(2)封裝指的是將對象的實現細節隱藏起來,然後通過一些公用方法來暴露該對象的功能;
(3)多態指的是子類對象可以直接賦給父類變數,但運行時依然表現出子類的行為特徵,這意味著同一個類型的對象在運行時可能表現出不同的行為特徵。
12. UML圖
解析:UML圖大致可分為靜態圖和動態圖兩種,UML 2.0包括13種圖,如下所示:
(1)靜態圖
使用案例圖(use case diagram),類圖(class diagram)、包圖(package diagram)、元件圖表(component
diagram)、對象圖(object diagram)、部署圖(deployment diagram)、複合結構圖(composite structure diagram)。
(2)動態圖
活動圖表(activity diagram)、通訊圖(communication diagram)、、互動概觀圖(interactive overview diagram)、順序圖(sequence diagram)、狀態機器圖(state machine diagram)、定時圖(timing diagram)。
說明:常用的UML圖包括使用案例圖,類圖,元件圖表,部署圖,順序圖,活動圖表和狀態機器圖。
13. 使用案例圖 [2]
解析:使用案例圖指由參與者(Actor)、用例(Use Case),邊界以及它們之間關係構成的用於描述系統功能的視圖。
14. 類圖
解析:類圖使用包含三個部分的矩形來描述,最上面的部分顯示類的名稱,中間部分包含類的屬性,最下面的部分包含類的方法。類之間有三種基本關係,即關聯(彙總和組合),泛化(繼承)和依賴。
說明:彙總使用帶空心菱形框的實線表示,組合使用帶實心菱形框的實線表示。泛化使用帶空心箭頭的實線表示。依賴使用帶箭頭的虛線表示。
15. 元件圖表
解析:元件圖表提供系統的物理視圖,它的用途是顯示系統中的軟體對其它軟體組件(比如,庫函數)的依賴關係。元件圖表可以在一個非常高的層次上顯示,從而僅顯示粗粒度的組件,也可以在組件包層次上顯示。
16. 部署圖
解析:部署圖是用來顯示系統中軟體和硬體的物理架構。從部署圖中,可以瞭解到軟體和硬體組件之間的物理關係以及處理節點的組件分布情況。使用部署圖可以顯示運行時系統的結構,同時還傳達構成應用程式的硬體和軟體元素的配置和部署方式。
17. 順序圖
解析:順序圖顯示具體用例的詳細流程,並且顯示了流程中不同對象之間的調用關係,同時還很詳細地顯示對不同對象的不同調用。順序圖描述了對象之間的互動,重點在於描述訊息及其時間順序。
18. 活動圖表
解析:描述用例內部的活動或方法的流程,如果出去活動圖表中的並行活動描述後,它就變成流程圖。
19. 狀態機器圖
解析:描述某一對象生命週期中需要關注的不同狀態,並會詳細描述刺激對象狀態改變的事件,以及對象狀態改變時所採取的動作。
20. Java位元運算符
解析:
(1)&:按位與。
(2)|:按位或。
(3)^:按位非。
(4)<<:左位移運算子。
(5)>>:右位移運算子。
(6)>>>:無符號右移運算子。
21. Java邏輯運算子
解析:
(1)&&:與,必須前後兩個運算元都是true才返回true,否則返回false。
(2)&:不短路與,作用與&&相同,但不會短路。
(3)||:或,只要兩個運算元中有一個true,就可以返回true,否則返回false。
(4)|:不短路或,作用與||相同,但不會短路。
(5)!:非,只需要一個運算元,如果運算元為true,返回false,否則反之。
(6)^:異或,當兩個運算元不同時才返回true,如果兩個運算元相同則返回false。
22. Java形參長度可變的方法
解析:在JDK 1.5後,Java允許定義形參長度可變的參數,從而允許為方法指定數量不確定的形參。如果在定義方法時,在最後一個形參的類型後增加三點(...),則表明該形參可以接受多個參數值,多個參數值被當成數組傳入。
23. Java存取控制符
解析:
(1)private存取控制許可權:如果類裡的一個成員(包括屬性和方法)使用private存取控制符來修飾,則這個成員只能在該類的內部被訪問。這個存取控制符用於修飾屬性最合適,使用它來修飾屬性就可以把屬性隱藏在類的內部。
(2)default存取控制許可權(包存取權限):如果類裡的一個成員(包括屬性和方法)或者一個頂級類不使用任何存取控制符修飾,那麼就稱它是預設存取控制,default存取控制的成員或頂級類可以被相同包下其它類訪問。
(3)protected存取控制許可權(子類存取權限):如果一個成員(包括屬性和方法)使用protected存取控制符修飾,那麼這個成員既可以被同一個包中其它類訪問,也可以被不同包中的子類訪問。如果使用protected來修飾一個方法,通常是希望其子類來重寫這個方法。
(4)public存取控制許可權(公用存取權限):如果一個成員(包括屬性和方法)或者一個頂級類使用了public修飾,這個成員或頂級類就可以被所有類訪問,不管訪問類或被訪問類是否處於同一包中,是否具有父子繼承關係。
24. Java父類執行個體的super引用
解析:如果需要在子類方法中調用父類被覆蓋的執行個體方法,可使用super作為調用者來調用父類被覆蓋的執行個體方法。
25. final關鍵字
解析:Java提供了final關鍵字來修飾變數、方法和類,系統不允許為final變數重新賦值,子類不允許覆蓋父類的final方法,final類不能派生子類。通過使用final關鍵字,允許Java實現不可變類,不可變類會讓系統更加安全。
參考文獻:
[1] Scala教程:http://www.runoob.com/scala/scala-tutorial.html
[2] UML系列圖--使用案例圖:http://www.cnblogs.com/Yogurshine/archive/2013/01/14/2859248.html