scala笔记(三)

原创 2016年05月30日 21:22:06

1.Scala和Java的互操作性
互操作涉及两个方面,一是Scala访问Java;二是Java访问Scala。我们只是看前者,后者使用的比较少,支持也不完整,也没有多少意义。
Scala的类继承结构图:

这里写图片描述

Scala的AnyRef等价于Java的Object。
需要注意的是Nothing和Null,它们是类型的下限。这在其他面向对象的语言里面是没有的。
在Scala里面使用Java是非常顺畅的。因为存在Scala到Java的直接映射。Java的class在Scala里面还是class。Java的interface在Scala里面是trait。Java的静态成员在Scala里面是object。Scala的包包含的使用方法,不管包含Scala包还是Java包,都可以像Java那样使用。

2.scala访问修饰符
包,类或对象的成员可以标记访问修饰符private和protected,如果我们不使用这两种关键字,那么访问将被默认设置为public。这些修饰限制为成员的代码的某些区域访问。
2.1private:私有成员只能看到里面包含的成员定义的类或对象,如:

classOuter{classInner{privatedef f(){ println("f")}classInnerMost{
         f()// OK}}(newInner).f()// Error: f is not accessible}

2.2protected:受保护的成员是从该成员定义的类的子类才能访问

package p {classSuper{protecteddef f(){ println("f")}}classSubextendsSuper{
      f()}classOther{(newSuper).f()// Error: f is not accessible}}

2.3未标示私有或受保护的每一个成员是公开的。不需要明确使用修饰符public。这样的成员可以从任何地方访问

classOuter{classInner{def f(){ println("f")}classInnerMost{
         f()// OK}}(newInner).f()// OK because now f() is public}

2.4保护范围:Scala中的访问修饰符可以增加使用修饰符。形式:private[X]或protected[X]的修饰符意味着访问私有或受保护“达到”X,其中X代表了一些封闭的包,类或单个对象。考虑下面的例子:

package society {package professional {classExecutive{private[professional]var workDetails =nullprivate[society]var friends =nullprivate[this]var secrets =nulldef help(another :Executive){
            println(another.workDetails)
            println(another.secrets)//ERROR}}}}

注意,上面的例子中以下几点:
变量workDetails将可对任何一类封闭包professional范围内。
变量friends 将可对任何一类封闭包society中。
变量secrets 将可只在实例方法隐含的对象(this)。
3.对于类的字段,val类型对应有getter方法没有setter方法,var类型既有getter方法又有setter方法,注意scala中没有只写属性,其中这些方法scala一般会自动生成,也可以自己去定义。假如有age字段,系统一般自动生成age()和age_=()方法,即为getter和setter方法,其中age_=()方法,java会翻译为age_$eq(),因为java中方法不允许=出现。

3.scala关键字
Java关键字
Java一共有50个关键字(keywords),其中有2个是保留字,目前还不曾用到:goto和const。true、false和null看起来很像关键字,但实际上只是字面量而已。本文粗略的把true、false和null也看做Java关键字,认为Java一共有53个关键字。下面是大致归类的Java关键字列表:
assert
boolean, byte, short, char, int, long, float, double, void
package, import, class, interface, enum, implements, extends
public, protected, private, abstract, static, final, volatile, transient, synchronized, strictfp, native
try, catch, finally, throw, throws
if, else, do, while, for, switch, case, default, break, continue, return
super, this
new, instanceof
const, goto
true, false, null

Scala关键字
Scala只有39个关键字:
package, import, class, object, trait, extends, with, type, forSome
private, protected, abstract, sealed, final, implicit, lazy, override
try, catch, finally, throw
if, else, match, case, do, while, for, return, yield
def, val, var
this, super
new
true, false, null

4.主构造器和辅助构造器
辅助构造器的名称为this,必须以一个对先前已经定义的其他辅助构造器或主构造器的调用开始,如果一个类没有显示定义主构造器,则自动拥有一个无参的主构造器;
在scala中,每个类都有主构造器,主构造器并不以this方法定义,而是与类定义组织在一起。主构造器的参数直接放置在类名之后,主构造器的参数被编译成字段,其值初始化为构造时传入的参数。主构造器会执行定义类的所有语句。在主构造器中可以使用默认参数来避免过多地使用辅助构造器。如果想让主构造器变为私有,可以类名后面参数之前放入private关键字:如class C private(args){}

5.在scala中,你几乎可以在任何语法结构中内嵌任何语法结构,你可以在函数中定义函数,在类中定义类。

6.与对象与类的定义不同,同一个包可以定义在多个问个文件文档中,不同的包也可以定义在一个文件文档中。
包和其他作用域一样地支持嵌套,你可以访问上层作用域中的名称;包名是相对路径,不是java的绝对路径,所以容易产生编译错误,解决办法使用root.开始的包名,表示使用绝对包名。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

scala笔记(三)

1.Scala和Java的互操作性 互操作涉及两个方面,一是Scala访问Java;二是Java访问Scala。我们只是看前者,后者使用的比较少,支持也不完整,也没有多少意义。 Scala的类继承...

[Scala]Scala学习笔记三 Map与Tuple

1. 构造映射可以使用如下命令构造一个映射:scala> val scores = Map("Alice" -> 90, "Kim" -> 89, "Bob"-> 98) scores: scala....

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Scala学习笔记三

第五章 基本类型和操作5.1 基本类型 注意:在scala中基本类型小写或者大写都是一个意思,例如int和Int,最后都转化为Scala.Int。后续可能不支持小写,推荐使用大写开头。Scala编...

Scala学习笔记(三)—chapter3

1、定长数组Array和变长数组ArrayBuffer。变长数组又称数组缓冲。常用方法: += 在尾端添加元素,在尾端添加多个元素,以括号包起来 ++= 在尾端追加任何集合,比如Arra...

快学Scala笔记(三)

Scala是一门多范式的编程语言,一种类似java的编程语言,Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了...

Scala学习笔记

本文主要是我在阅读快学Scala(Scala for the Impatient)中所记录的笔记,暂缺:十六、十九、二十二。神奇的Scala:面向表达式编程。

快学Scala 读书笔记之 Chapter 2、3、4(控制结构函数,数组,映射,元组)

第二章 控制结构与函数Scala和其他编程语言的一个根本性差异是,在C++或Java中,表达式和语句会看做两种不同的东西,表达式有值,而语句执行动作。在Scala中,几乎所有构造出来的语法结构都有值。...

Scala学习笔记3--类型推演

Scala类型推演变量类型推演scala会在编译时为变量提供类型推演,包括容器var year: Int = 2009 var anotherYear = 2009 var greet = "Hell...

快学Scala读书笔记之Chapter12(高阶函数)、Chapter13(集合)

第十二章 高阶函数要点 Scala中函数是“头等公民”,就和数字一样,可以在变量中存放函数 可以创建匿名函数,通常还会把它们交给其他函数 函数参数可以给出需要稍后执行的行为 许多集合方法都接受函数参数...

快学Scala读书笔记之Chapter15(注解)、Chapter17(类型参数)

第十五章注解让程序员可以在程序中的各项条目中添加信息。这些信息可以被编译器或外部工具处理。要点 注解是那些可以插入到代码中以便有工具可以对它们进行处理的标签。工具可以在代码级别用作,也可以处理被编译器...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)