一、标识符命名规则
1、以字母或下划线开头,后接字母、数字、下划线
2、以操作符开头,且只包含操作符(+ - * / # !等)
3、用` `反引号包括任意字符,及时scala的39个关键字也可以
二、变量与常量
1.变量 var。声明变量时,需要赋初值。
2.常量 val。常量声明后,其值不可变。类似java的final。
3.var 修饰的对象,其对象地址可变,对象中的属性值可变。
4.val 修饰的对象,其对象地址不可变,对象中的属性值可变。
5.scala中没有java中static关键字。由于scala属于完全面向对象的函数,所以没有静态语法。为了能模拟静态语法,采用伴生对象单例方式调用方法。
注意:伴生对象与伴生类
伴生对象利用单例模式模拟静态语法,所以scala中需要用到静态语法的地方都在伴生对象中执行
三、单例模式
1.懒汉式
// 懒汉式,线程不安全
// 懒加载的方式
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
// 懒汉式,线程安全
// 懒加载的方式
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
2.懒汉式,线程安全
// 饿汉式
// 类加载时就初始化
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
四、scala中Unit类型、Null类型、Nothing类型
Unit类型:表示无值,和java中的void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Null类型:null,Null类型只有一个实例值null。Null可以赋值给任意引用类型(AnyRef),但不能赋值给值类型(AnyVal)。
Nothing类型:Nothing类型在scala中的类最底层;他是任何其他类型的子类型。当一个函数,我们确定没有正常返回值,可以用Nothing来指定返回类型,这样有一个好处,就是我们可以把返回的值(异常)赋给其他的函数或者变量(兼容性)
五、scala中数值类型转换
基本原则:自动提升(隐式转换) 强制类型转换
自动提升:Byte/Short/Char 可以运算。逻辑是都转换为Int
强制类型转换:高精度到低精度。需要使用.toInt/.toDouble等方法
六、Scala的运算符
1.除法。整数除和小数除有区别。整数除,及时返回值的小数类型,结果仍是整数除的取整部分。小数除,会把小数部分显示
2.==和equals。
java: == 表示变量本身值,表示两个对象在内存中的首地址;equals表示两个对象中的内容是否一致
scala: == 类似java中的equals,比较对象内容;eq类似java中的==,比较地址
七、scala中的For循环
1.To for(i <- 1 To 3){} 左右闭合
2.Until 左闭右开
3.循环守卫
for(i <- 1 to 3 if i != 4){
println("i=",i)
}
// 等价于
for(i <- 1 to 3){
if(1 != 4){
println("i=",i)
}
}
4.By 循环步长 for(i <- 1 to 10 by 2)
5.嵌套循环 for(i <- 1 to 3;j <- 2 to 6){}
八、循环中断
1.采用异常的方式退出循环
2.采用scala自带的函数退出循环
import scala.util.control.Breaks
def main(args:Array[String]):Unit = {
Breaks.breakable(
for(elem <- 1 to 10){
println(elem)
if(elem == 5) Breaks.break()
}
)
println("正常结束循环")
}
3.对break进行省略(静态导入)
import scala.util.control.Breaks._
object TestBreak {
def main(args:Array[Sting]):Unit = {
breakable {
for(elem <- 1 to 10){
println(elem)
if (elem == 5) break
}
}
println("正常循环结束")
}
}
九、函数和方法的区别
1.为完成某一功能的程序语句的集合,称为函数
2.类中的函数称之为方法
3.函数没有重写和重载的概念;方法可以进行重载和重写