码上开始 2019-06-27
val/var 变量名:类型=值
val 不可变的 var 可变的
只能对var赋默认值,参数类型必须给定,值为 _ eg: var str:String=_
[修饰符] def methodName(name1:ArgsType1,name2:ArgsType2)[:retrunType]={ //方法体 }
eg: def test1(a:Int):Unit={} ----> 可以变成如下写法: def test1(a:Int){}
def test(a:Int)={ a } eg: 如下为递归方法,不可以将返回类型省略。 def fac(a:Int):Int={ a*fac(a-1) }
1.对于无参数的方法,方法调用有两种: 方法名() 或者 方法名 2.方法调用时,可以通过形参进行无顺序传递。
def info(a:Int,b:Int,c:Int)={ a+b+c } //方法调用: info(1,2,3) info(a=1,c=3,b=2) //注意:当使用形参传递参数时,如果有未指明形参名的必须与对应位置想匹配,不可以随意放置。 info(b=2,a=1,6) //正确 info(b=2,6,a=1) //错误 形参a,b有对应的值,那么为c赋值时,需要按照c在方法参数列表中的位置进行对应。
1.只能位于参数列表的最后一个 2.表示形式: 类型* 3.可变参本质上是一个集合。
def test(a:Int,b:String,c:Any*)={ println(c) }
8种基本类型+Unit Unit <===> ()
Any(顶级父类,最顶级类) AnyVal AnyRef(相当于Java中的Object) 8基本+Unit 引用类型 Nothing(所有类的子类,最底层类)
(实际Scala中是没有基本数据类型的) Byte Int Short Long Char Boolean Float Double + Unit
String(java.lang) 集合类 数组 自定义数据类型 ...
class 类名 private[package] (主构造器参数列表) extends 类/特质 with 特质1 with 特质2{}
class Student(name:String,age:Int) extends Father with T1 with T2{ //属性 //方法 //主构造器中的代码 println(".....") def this()={ //....... } }
与类的定义交织在一起
1.通过方法名this重载构造器 2.辅助构造器的第一行代码必须是调用主构造器或者调用其他已经定义好的辅助构造器
1.参数名:类型 2.var 参数名:类型 3.val 参数名:类型 4.private val/var 参数名:类型 5.@BeanProperty val/var 参数名:类型
1.当参数没有被修饰,且在类中没有使用该参数,该参数什么都不会生成。 2.当参数被val修饰时,会生成private修饰的字段/属性,以及提供一个名字为参数名的公有取值方法。 3.当参数被var修饰时,会生成private修饰的字段/属性,以及提供一个名字为参数名的公有取值方法和一个名字为参数名_=的公有赋值方法。 4.与2,3生成的字段以及方法个数一致,不同在于生成的方法时私有的。 5.@BeanProperty 会生成javaBean版本的set/get方法
object 对象名 extends 类/特质 with 特质1 with 特质2{}
object TestMain1{ //程序入口 def main(args:Array[String]):Unit={} } 将代码写到TestMain1.scala文件中。
object TestMain2 extends App{ //......程序入口 } 将代码写到TestMain2.scala文件中。
mkdir scala/day1 vi TestMain1.scala
scalac TestMain1.scala
scalap TestMain1 javap -p TestMain1
scala TestMain1
trait 特质名 extends 类/特质 with 特质1 {}
1.可以包含具体方法/属性 2.可以包含抽象方法/属性 3.特质 可以 混入 类/对象/特质/实例(对象)
type 变量名=类型
1.当类型名称比较复杂时,可以对当前类型起个别名,方便后期使用。 2.当同一个源文件中出现两个不同包的同一类名时,可以通过类型别名来进行区分。