Scala程序结构
1.Object是一个关键字,表示一个伴生对象;
2.如该文件只出现了一个object HelloScala 就会在编译后两个 .class文件;
3.第一个文件是HelloScala.class这个表示他的伴生类,但是空的;
4.第二个文件是HelloScala$.class对应的是Object HelloScala,但是本质是调用但是本质调用它对应的一个静态 属性MODULE$
5.这两个文件的关系和main函数
object HelloScala {
// 1. def 表示一个方法或者函数;
// 2. main 表示入口;
// 3. args: Array[String] 表示形参, args 是形参名 Array[String] 是形参类型表示一个Array数组;
// 4. :Unit 表示返回值类型为Unit,等价于 java 的 void
// 5. = 表示 后面写的是函数体/方法体 , 它还有返回值类型推导的作用
def main(args: Array[String]):Unit = {
// 表示是 输出, 输出, 类似 System.out.println("hello, scala世界 !")
// 在 scala 语句后,不 需要带 ; //体现简洁 体现简洁
println("hello, scala世界 !")
}
}
为什么一个object A 对应两个class文件
1.scala中,一切都是对象;
2.把静态的内容和非静态内容分开;
A类的非静态的内容(属性,方法)放在class A中;
A类的静态的内容(属性,方法)放在object A中;
Scala语言输出:三种方式
1.字符串通过+号连接;
2.printf用法,字符串通过%传值,(格式化输出);
3.字符串通过$引用;
{ } 可以进行运算
变量
Scala要求变量在声明时就赋值
1.变量声明基本语法
var | val 变量名 [: 变量类型] = 变量值
2.注意事项
1)声明变量时,类型可以省略(类型推断);
2)类型确定后,就不能修改,Scala是强数据类型语言;
3)在声明/定义一个变量时,可用var或val来修饰;var 修饰的变量可改, val 修饰的变量是不可变的
val线程安全,效率高;等同加上final;
4)var 修饰的对象引用可以改变, val 修饰的则不可改变,但对象状态(值)却是可以改变的。 (比如 : 自定义对象、数组、集合等 ) [分析 val好处 ]
5)变量声明时,需要初始值;
数据类型
1.Scala数据类型介绍
1.Scala中的数据类型都是对象;
2.Scala数据类型分两大类AnyVal(值类型)和AnyRef(引用类型);他们都是对象。
对上图说明:
1.Any是所有类的根类型,即所有类的父类(基类);
2.在Scala中类分为两个大的类型分支(AnyVal [值类型,即可以理解成就是java的基本数据类型],AnyRef为引用类型)
3.在AnyVal虽然叫值类型,但仍然是类(对象);
4.在scala中有两个特别的类型(Null),还有一个是Nothing;
5.Null类型只有一个实例null,它是bottom class,是AnyRef的子类;
6.Nothing类型是所有类的子类,它的价值是在于因为它是所有类的子类,就可将Nothing类型对象返回给任意的变量或方法;
7.在Scala中,Unit类型比较特殊,这个类型只有一个实例()
Scala数据类型列表
字符类型(char)
1.字符常量是用单引号(' ')括起来的单个字符。如:var c1='a'
2.Scala允许使用转义字符'\'来将其后的字符转变为特殊字符型常量。如:var c3='\n'
3.可以直接给Char赋一个整数,然后输出时,会按照对应的unicode字符输出['\u0061' 97]
4.Char类型是可进行运算的,相当于一个整数,因它都对应有Unicode码
Unit类型、Null类型和Nothing类型
Unit:表示无值,和void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,()
Null:null,Null类型只有一个实例值null;
Nothing:Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。当一个函数,确定没有正常的返回值,可用Nothing来指定返回类型,这样的好处,可把返回的值(异常)赋给其它的函数或变量。
def f1():Nothing = { throw new Exception() }
注意:
1) Null类只有一个实例对象,null,类似于Java中的null引用。 null可以赋值给任意引用类型 (AnyRef),但是不能赋值给类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short);即可以赋值给引用类型,不能赋值给值类型。
2) Unit类型用来标识过程, 也就是没有明确返回值的函数。由此可见,Unit类似于Java里的 void。Unit只有 一个实例, (),这个实例也没有质的意义
3) Nothing,可以作为没有正常返回值的方法类型, 非常直观的告诉你这个方法不会正返回,而且由于Nothing是其他任意类型的子类,还能跟要求返回值方法兼容。
值类型转换
值类型隐式转换
当 Scala程序在进行赋值或者运算时,精度小的类型自动转换为大的数据类型,这个就是自动类型转换 (隐式转换 implicit conversion)。
自动类型转换细节说明
1) 有多种类型的数据混合