Scala之基础总结

1.基础概念

  • 基本概念

    • 类 : 同一类型对象的抽象,例如人,星球,车等等
    • 对象 : 类的具体实例,包含属性和方法,例如某个人,某个星球,某量车等
    • 属性 : 用来描述对象的某些特征,例如人的年龄,姓名等
    • 方法 : 用来描述对象的某些功能,例如人会吃饭,学习等等
    • 文件以.scala结尾
    • 主程序入口 : def main(args: Array[String]): Unit{ }
  • 标识符

    • 兼容java标识符命名规范
    • 类名大驼峰,变量名小驼峰
    • 新增了关键字 yield,所以使用yield方法的时候要加上反引号 例如: Thread.yield
  • 关键字

    • 在这里插入图片描述

    • 在这里插入图片描述

  • 注释

    • 兼容java注释,并支持注释的嵌套结构
  • 换行符

    • 可以使用分号结尾或者回车结尾,注意:多条命令之间一定用分号分隔
  • 引入包

    • 引入单个类:import java.util.Date;
    • 引入包下所有类:import java.util._;
    • 引入包下若干类(选择器):import java.util.{Date,HashSet,HashMap}
    • 引入类后重命名:import java.util.{Date => OldDate}
    • 隐藏包下的部分成员:import java.util.{Date=>,}
    • 默认包引入为:java.lang.、scala.、Predef._,默认引入的包的情况下其内类的使用均不需要加上包名。

2.数据类型

注意:所有的数据都是对象,没有基本数据类型

  • Any : 所有类的父类
  • AnyRef : 所有引用类的基类
  • AnyVal : 所有值类型的基类
  • Nothing : 所有类的子类
  • Null : 空引用
  • Unit : 空值,与java中的void一样
  • 九大值类型(AnyVal)
    • 整数型
      • Byte
      • Short
      • Int
      • Long
    • 浮点型
      • Float
      • Double
    • 字符型
      • Char
    • 布尔型
      • Boolean
      • Unit
  • 数据类型关系图
    • 在这里插入图片描述

3.常量与变量

  • 常量
    • 定义 : 在程序运行过程中不会发生变化的量叫做常量
    • 使用方法 : 使用val声明常量
  • 变量
    • 定义 : 在程序运行过程中会发生变化的量叫做变量
    • 使用方法 : 使用var来声明变量
  • 显式声明
var name:String = "子兔Antg"
//公式 var或者val 变量名:变量类型 = 值
  • 隐式声明
var name = "子兔Antg"
//公式 var或者val 变量名 = 值
//scala支持类型推断,所以可以这样写,是不是很方便

4.访问修饰符

  • 类型:
    • private
    • protected
    • public
  • 与java的区别:
    • 这里少了默认的访问修饰符
    • scala的对象默认的修饰符是public
  • private
    • 仅在类的内部可见
    • 注意: 在嵌套的情况下,外层类甚至无法访问内层类的私有成员
  • protected
    • 比java的更严格,仅子类可以访问,同包下的不可访问
  • public
    • 与java一样
  • 作用域保护机制
    • private[x],即为"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是 private。
    • protected[x],即为"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是 protected。

5.运算符

包括5中运算符

  • 算术运算符

    • 在这里插入图片描述
  • 关系运算符

    • 在这里插入图片描述
  • 逻辑运算符

    • 在这里插入图片描述
  • 位运算符

    • 在这里插入图片描述
  • 赋值运算符

    • 在这里插入图片描述
  • 运算符优先级

    • 在这里插入图片描述

6.控制语句

  • if … else …
    • 与java相同
  • 循环
    • while
      • 与java相同
    • do … while
      • 与java相同
    • for
//简单的遍历
for(i <- 0 to 10) println(i)
//输出结果为0-10
//until关键字
for(i <- 0 until 10) println(i)
//输出结果为0-9
//by关键字
for(i <- 0 to 10 by 2) println(i)
//输出结果0,2,4,6,8,10
//带条件输出
for(i <- 0 to 10 if(i%2==0)) println(i)
//输出结果:0,2,4,68,10
//遍历链表
var list = List(1,2,3)
for(x <- list) println(x)
//输出结果:1,2,3
//yeild关键字
var list2 = for(x <- list if(x%2==0)) yeild x
//会将结果赋值给list2

7.函数

  • scala 的 函数是一个对象,可以作为参数或者返回值传递
  • 使用val 和 def 定义
  • 函数的定义
    • 定义格式
def functionName ([参数列表]) : [return type] = {
	function body
	return [expr]
}
  • 相关说明
    • 如果不写等于号和方法主体,则方法会被隐式声明为"抽象方法",包含它的类型于是也是一个抽象类型。
    • return type 可以是任意合法的 Scala 数据类型,如果函数没有返回值,可以返回为 Unit,这个类似于 Java 的 void
  • 调用
    • 与java一样
  • 函数的高级编程写法(具体请见:scala值函数的高级编程写法)
    • 传名调用
    • 指定参数名调用
    • 参数默认值
    • 可变长参数
    • 递归函数
    • 高阶函数
    • 内嵌函数
    • 匿名函数
    • 偏应用函数
    • 函数柯里化

8.闭包

  • 概念
    • 闭包是个函数
    • 该函数在执行的过程中调用了外部的变量
  • 示例
object TestCloseFunction {
	var factor = 1000
	def salaryMoney(i: Int): Int = {
	return i * factor
}
def main(args: Array[String]) {
		println("月薪 salaryMoney(8) value = " + salaryMoney(8))
		println("月薪 salaryMoney(10) value = " + salaryMoney(10))
		TestCloseFunction.factor = 10000;
		println("年薪 salaryMoney(8) value = " + salaryMoney(8))
		println("年薪 salaryMoney(10) value = " + salaryMoney(10))
	} 
}

9.字符串

  • 概念
    • 完全与java.lang.String对等
  • 可变字符串
var str = "hello"
  • 不可变字符串(StringBuilder)
var str = new StringBuilder
  • 常用函数
    • 获取字符串长度
      • length()
    • 字符串连接
      • +或者concat
    • 字符串格式化,与c的类似
      • printf()

10.数组

  • 概念
    • 一种用来存储相同类型元素的顺序存储结构
  • 使用
    • 静态数组
def main(args: Array[String]): Unit = {
		var programLanguageArray = Array("java", "python", "c++", "c", "php")
		for (program <- programLanguageArray) {
		println(program);
	} 
}
  • 动态数组
def main(args: Array[String]): Unit = {
		var programLanguageArray = new Array[String](5)
// var programLanguageArray:Array[String] = new Array[String](5)
		programLanguageArray(0) = "java";
		programLanguageArray(1) = "python";
		programLanguageArray(2) = "c++";
		programLanguageArray(3) = "c";
		programLanguageArray(4) = "php";
		for (program <- programLanguageArray) {
		println(program);
	} 
}
  • 多维数组
//需要手动引入这个包
import Array.ofDim;
//创建一个4x4的矩阵
var myMatrix = ofDim[Int](4, 4)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Antgeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值