java和的区别

1 beak和continue

语言breakcontinue
Scala函数式分格If else 或循环守卫
Java关键字,break关键字:continue

2 函数返回值形式

语言返回格式
Scala返回第一种形式: :返回值类型 =
返回第二种形式: = (返回类型自动推导) 返回第三种形式: (不写任何) 注意:没有写return ,默认最后一行为返回值;如果写了return,函数的返回值类型就不省略;在使用递归编程时,必须返回的数据类型
Java第一种 :有返回值,必须写返回值类型
第二种:无返回值,添加void

3 异常

语言异常处理方法
ScalaTry-catch{case-case}-finally的方式处理异常
javaTry-catch-catch-finally的方式处理异常

4 面向对象

语言区别
Scala一切皆为对象
java由于历史原因,java中的基本类型、null、静态方法等不是对象
Scalajava
成员变量/属性必须显示初始化可以不初始化
构造器主构造器为类名,
辅助构造器this,辅助构造器必须在第一行显式调用主构造器,也可以间接。
和类名必须一样
Bean属性在scala中添加@BeanProperty字段时会自动生成setXX和getXX,便于java互操作setXX和getXX方法

5 包

Scalajava
Import语句可以出现在任何地方只能在文件顶部

6 面向对象编程特征之一封装、继承、多态

Scalajava
封装方法自动提供了setter/getter方法
注意:如果属性声明为private,则setter/getter也是private, 不添加时,默认为public
需要手动添加
继承extends重写方法需要添加override修饰符,调用超类的方法需使用关键字super直接重写
子类的构造器在子类中每个辅助构造器必须先调用构造器(也可以时间接)
注意:只有主构造器才能调用父类的构造器
会隐式调用构造器
也显示调用,(需自己添加)
覆写字段子类可以改写父类的字段,Java中只有方法的重写,没有字段的重写
抽象类Abstract标记的类,方法不用标记abatract,Java
接口Scala使用特质trait来代替接口的概念,使用关键字extends继承,
多个特质之间使用with连接 注意:scala中在创建对象时,可以混入特质,
使用关键字implemts继承,
Java在创建对象时不能混入接口。

7 集合

Scala集合Java集合
集合种类主要包括序列Seq、集Set 、映射Map,还可以分为可变和不可变两种类型主要有Set、List和Map三个体系

scala特有的概念

1 过程:

将函数的返回类型为Unit的函数称之为过程。

2 惰性函数:

当函数返回值被声明为lazy时,函数的执行将被推迟,直到初次使用时,该函数才会执行,这种函数称之为惰性函数,和java中的懒加载类似。

注意:lazy不能修饰 var

3 伴生对象

scala中没有静态的操作,为了能和java语言交互(java中有静态的概念),就产生了一种特殊的对象来模拟类对象,称为半生对象,这个给对象的内容可以放置在她的半生对象中申明和调用。

class 类名 为伴生类,将非静态内容写到该类

object 类名 为伴生对象,将静态内容写到该类

注意:伴生对象和伴生类应在同一源码文件中,

4 apply方法:

实现该方法,可以不加new 实现类名(参数)的方式构建对象实例;

5 特质

可理解为接口,

6 叠加特质

在创建对象时,同时混入多个特质,称之为叠加特质。此时特质声明顺序为从左到右,方法执行我为从右到左。

例如

val mytriat = new Mytrait with DB4 wiith File4

注:如果混入该特征的类,已经继承了另一个类A类,则要求A类是特质超类的子类,否则就会出现了多继承现象,发生错误。

例如:

 trait LoggedWxception extends Exception{}//zhengque
 class CC{}
class UnhappyException extends CC with LoggedWxception{}
//发生错误,原因CC不是Exception的子类

7 富接口

即该特质中既有抽象方法,又有非抽象方法。

8 自身类型

主要是为了解决特质循环依赖的问题,同时可以确保特质在不扩展某个类的情况下,依然可以做到限制该特质类的类型。

9 隐式函数

是以implicit关键字声明的带有单个参数的函数,这种函数会自动应用,将值从一种类型转换为另一种类型,隐式函数可以有多个,但应用时,会只是用一个,可以解决优雅的数据类型转换问题。

10 模式匹配

模式匹配类似于java中的switch语法,但是很强大,

其:采用match关键字声明,每个分支采用case关键字,但需要匹配时会从第一个分支开始,如果匹配成功则执行代码,如果所有case匹配不成功,那么会执行case_分支,类似于java中的default。

注意:如果case_没写,那么会抛出matchError。

模式中的变量:

如果在case关键字后跟变量,那么match前表达式的值会赋值给那个变量。

常见的匹配情况:数组的匹配、元组的匹配、列表的匹配、对象的匹配(对象提取器unapply),变量声明中的模式、for表达式中的模式;

11 样例类:

用case关键字声明的类,自动生成toString、qualas、hashCode和copy方法类似一个模板。

case class Dollar(value:Double) extends Amount//样例类

12 偏函数

使用PartialFunction【Any,Int】定义,表示偏函数接收的参数类型是Any,返回类型是Int,执行函数时,先执行isDefinedAt()如果为true,就会执行apply,否则过滤掉这个元素,继续遍历下一个元素。

13 并发编程模型Akka

akka模型是异步、非阻塞、高性能的事件驱动编程模型。

工作机制:

(1) ActorySystem创建Actor

(2) ActorRef:为Actor的代理或引用,消息是借助ActorRef来发送的。

(3) 消息发送到Dispatcher Message(消息分发器),它得到消息后会对消息进行分发到对应Actor的MailBox.

(4) Actor可以通过reveive方法来获取消息,然后处理。

                                                                                                         摘抄引用,方便个人学习理解

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值