Java和Scala学习日记1

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

阅读更多
个人分类: 大数据
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭