1、类介绍
我们在new scala类的时候,这里分为Class和Object两大类(idea2019.1版本,其他新版本应该是四种,case Class和case Object,不过没关系,这里想要使用case的直接在前面写case即可)。
def是define,是对方法的修饰或者叫定义,Unit代表没有返回值。
这里语句后面不需要写;显得简洁。
2、变量
2.1 数据类型
主要分为两个大的数据类型,AnyVal(value 值数据类型)和AnyRef(reference 引用数据类型),这和java中的数据类别一致。而Any是所有数据类型的父类,类似Java中的object。
值得注意的是,AnyVal下的数据类型都是大体上和Java中的八大数据类型一样,但,scala中他们都是大写字母开头,Unit相当于Java中的void,是无返回值的意思。
AnyRef下的Null和java中的null类似,是所有引用类型的子类。
Nothing是所有类型的子类,通常异常时使用。
2.2变量的定义
格式:var | val 变量名 [:数据类型] =变量值
var:是variable修饰变量的
val:是value修饰不可变量,相当于java中final修饰的变量
[ ]中的变量类型是可以省略的,scala编译器可以对数据类型进行推断
注意:
(1)我们一般在修饰变量时,优先用val,以后需要改变值时,再修改为var。
(2)val是线程安全的,使用效率高。
在scala中,对于val age:Int = 23来说,age是一个Int数值类型的变量 , 而数值类型的变量也属于一个对象 , 所以age变量就是一个对象,也拥有很多方法,这一点和java完全不同。
2.3数据类型转换
val age="12"
//变量名.isInstanceOf[数据类型] 判断变量是否是该数据类型
println(age.isInstanceOf[String])
//字符串的拼接,发现String和Int运算自动将Int转为了String,类似Java中的类型转换
val str: String = age+10
//数据类型中提供了toxxx
val i: Int = age.toInt+10
println(i)
//强制类型转换asInstanceOf
val res: Int = age.asInstanceOf[Int]
数值类型之间的转换用toxxx。例如这里的string转int
引用数据类型之间的转换用asInstanceOf来强制类型转换(必须有继承关系)。
总体而言,scala的数据类型转换和java基本一致,高精度的类型转换成低精度(强制类型转换)一样可能出现精度丢失的问题。
2.4运算符
和Java中的一致,这里不多介绍