1.变量和常量
var name [:VariableType] = value // variable
val name [:ConstantType] = value // constant
1.声明变量时,类型可以省略
2.类型定义后就不能修改言
3.变量声明必须有初始值
4.变量,常量分别用var,val声明修饰
2.标识符命名规范
注释写法和Java一样
关键字Java有的scala都有且多了一些object,trait,with,implicit,match,yield,def ,val,var
3.Scala运算符
1.双等号,在scala中表示非空equals
2.如果非要比较内存地址使用eq //切忌,使用eq不要使用基本数据类型
3.scala中没有++等运算,没有三元运算符,其他等逻辑运算完全同Java
小结:Scala比较值相等 == 比较地址相等使用eq
4.Scala完全面向对象语言&&强数据类型语言
1.任何变量方法属性条件控制语句都有返回值
2.Unit表示一种返回值;( ); 和Java中void异曲同工
3.条件控制语句返回值取满足条件的最后一行代码作为返回,返回值类型取同父类节点
5.Scala循环
1.for循环
for (elem <- array) { //直接 array.for回车即可;
println(elem)
}
//添加循环守卫法
for (elem <- carray if elem%5==0 ) {
println(elem)
}
2.while循环同Java,只是多了个do while
do{
println("先打印")
}while(false)
6.函数式编程
1.scala可以在任意位置创建函数,万物皆对象,scala认为函数也是一种对象
2.可变函数 与python同,可变参数只能放到参数列表最后一项
// 2.关于可变参树 加上*就表示可变参数
def fun2(name: String*): Unit = {
println(name)
}
fun2()
fun2("zhangsan")
3.默认参数
def fun2(name: String=“zhangsan”): Unit = {
println(name)
}
4.函数式编程简化
return可省
逻辑代码只有一行大括号省略;
返回值可省
没有声明参数,可以省略形参列表; 调用时候也必须省;
若确定没有返回值 Unit = 可省;
7.柯里化
1.柯里化是一种不负责任的写法,传值没法传完,所以进行简化,将不想管的形参进行分离,设置多个形参列表
柯里化有多个形参列表,编译时,少形参不会报错,但是运行时,少了不行;
8.惰性函数
1.函数中lazy修饰的语句,lazy 懒惰,也就是这条语句 先不执行
9.Scala面向对象
1.scala函数也是一个对象
2.关于函数对象数据类型;函数形参无数个,但是函数对象形参最多22个
普通写法****
var f1:Function1[Integer,String] = fun02 _ //Integer表示函数形参的类型,String表示函数返回值类型
**简化写法 **
(String,Integer)=>Unit //形参指向返回值类型,省略形参名
3.函数对象调用和函数调用
var f_obj = fun _
var f_value = fun()
例子
def test(f: (Int,Int)=>Int):Unit={
val result = f(10, 20)
println(result)
}
def diff(x:Int,y:Int):Int={
x-y
}
调用
test(diff _) //下划线可省
4.形参为函数对象的匿名写法
test(
(x:Int,y:Int)=>{
x+y
})
简化
test( (x:Int,y:Int) => x+y )
test( (x,y) => x+y ) //test定义时候,函数类型已经定义过了所以省略Int
test( _ + _ ) //按照顺序只执行一次
嵌套函数不能下划线使用
test ( println (_) )
10.Scala包
1.package可以多次声明,和java不同
2.拥有上下级,也就是包的作用域
3.包可以独立成为一个对象 //存放工具类包对象中写的所有方法,同一包下都可以使用;
package object xxx{
}
4.import
java.util._取代 util.
花括号导入多个包
import java.util.{
List,Arrays,Map
}
屏蔽类
import java.sql.{Date=>_, _} //导入sql然后Date请走的意思Date=>_ ,_表示其他
起别名
import java.sql.{Date=>别名Date}
11.Scala类&&伴生对象
1.存在一个类,存在一个对象,类和对象相互存在,互为伴生的关系。object修饰
2.伴生对象可以访问类中的私有属性方法等;甚至可以直接通过apply()构造实例
3.编译器动态识别apply(),所以可省,scala常见类设计为单例设计模式,然后构造实例通过伴生对象的apply()方法
4.Scala类中属性可以使用占位符,先不赋值;
var tag:Boolean =_
5.类中Bean规范
@BeanProperty
13权限控制
知识点概念
private
--同类访问
private[ package_boy ]
--包私有; 同类&&package_boy包下的所有类都可以访问
protected
--同类,或子类
(default)(public)默认public
--公共访问
private
–同类访问
private[包名]
–包私有; 当前类随便访问,指定的这个包下的所有类随便访问
protected
–当前类,或子类
(default)(public)默认public
–公共访问