Java和Scala学习日记1

来源:互联网 发布:知乎 大国崛起纪录片 编辑:程序博客网 时间:2024/05/20 07:14

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或空引用。

(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