Scala -scala基础- 编码规范、变量和常量定义与区别、类型层级关系

 

目录

scala基础

 1、编码规范

  1.1、文件名和编码 

  1.2、代码书写规范

2、scala变量和常量的定义

 2.1、val和var

 2.2、val和var的区别

  2.3、可变与不可变的理解

 2.4、延迟加载

 3、类级层级关系


scala基础

 1、编码规范

  1.1、文件名和编码 

# 源文件名必须和它包含的顶层类名保持一致,包括大小写,并以.scala作为后缀名
# 源文件编码必须是 UTF-8

  1.2、代码书写规范

列宽:每行不超过150个字符

缩进:4个空格,严禁使用Tab

注释风格:使用java风格注释

命名规范:驼峰命名法

括号的使用

  •     基本原则:K&R风格 。
  •     左花括号({)前不能换行,在其后换行。

  •     在右花括号(})前要有换行。

  •     如果右花括号是一句语句、一个方法、构造函数或非匿名类的结尾,其后需要换行。

2、scala变量和常量的定义

 2.1、val和var

val:声明的是一个常量,值不允许改变
var:声明的是一个变量,值允许改变

 2.2、val和var的区别

1、内容是否不变
2、val修饰的变量在编译后,等同于加上了final
3、是否有lazy修饰,val修饰的变量可以使用lazy修饰

总结

 1) 使用var 声明一个变量:var修饰的变量,内容和引用都可变

 2) 使用val声明一个常量或值:val修饰的变量是不可变的,注意不可变的是引用,而不是内容

 3) 只有val修饰的变量才能被lazy修饰;使用lazy定义变量后,只有在调用该变量

 使用val还是使用var?

 官方推荐使用val

- 更安全
- 代码可读性更高
- 资源回收更快,方法执行完,val所定义的变量即回收

  2.3、可变与不可变的理解

可变和不可变,指的是变量本身存的内容,值类型变量存的是数据本身,而引用类型变量存的是数据的引用。

值类型和引用类型?
值类型与引用类型区别:
存储方式:直接存储数据本身 vs 存储的是数据的引用,数据存储在数据堆中
内存分配:分配在栈中 vs 分配在堆中
效率:效率高,不需要地址转换 vs 效率较低,需要进行地址转换
内存回收: 使用完后立即回收 vs 使用完后不立即回收,而是交给GC处理回收

 2.4、延迟加载

  只有val修饰的变量才能被lazy修饰;

  使用lazy定义变量后,只有在调用该变量时才会实例化这个变量的值;

  类似于方法,先声明,后调用。

  示例如下:

scala> val a = 10
a: Int = 10
scala> lazy val b = 100
b: Int = <lazy>
scala> b
res2: Int = 100
scala> var c = 10
c: Int = 10
scala> lazy var d = 100
<console>:1: error: lazy not allowed here. Only vals can be lazy
       lazy var d = 100
            ^
scala> def e = 1000
e: Int
scala> e
res3: Int = 1000

 3、类级层级关系

# Any是所有类型的父类
	它定义了一些通用的方法如equals、hashCode和toString。Any有两个直接子类:AnyVal和AnyRef。
# AnyVal是所有值类型的父类
	有9个预定义的非空的值类型分别是:Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。Unit是不带任何意义的值类型,它仅有一个实例可以像这样声明:()。所有的函数必须有返回,所以说有时候Unit也是有用的返回类型。
# AnyRef是所有引用类型的父类
	AnyRef代表引用类型。所有非值类型都被定义为引用类型。在Scala中,每个用户自定义的类型都是AnyRef的子类型。如果Scala被应用在Java的运行环境中,AnyRef相当于java.lang.Object。
# Nothing是所有类型的子类
	Nothing是所有类型的子类,也是Null的子类,他没有一个具体的实例对象,常见的应用如:抛出异常、程序exit,无限循环等,返回值为Nothing类型。
	Nothing没有对象,但是可以用来定义类型。例如,如果一个方法抛出异常,则异常的返回值类型就是Nothing(虽然不会返回) 。
  def get(index:Int):Int = {
    if(x < 0) throw new Exception(...)  //返回值类型Nothing
    else ....
  }
  
# Null是所有引用类型的子类
	Null只有一个实例对象null,主要用来和其他的JVM语言进行互操作,但是几乎不应该在Scala代码中使用。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值