Scala 初级入门课程一

package cn.dowhatyouwant.codes

/**
  * Created by DengNi on 2016/8/31.
  * Scala 是动态语言,静态类型,因为难,所以用起来方便
  * spark 太优秀每个人都应该去学习,使用
  * 学习spark 优先推荐scala python
  * 基于jvm fp + oo
  * 跟java 互操作
  * interpreter ==scala shell
  * val  var
  * var h :String ,赋值后scala 自动推断数据类型
  * 函数
  *
  */
object TestBegian {
 // 函数
  def hello(name:String):String ={ //定义一个函数,返回类型为string
    "hello " + name   //默认最后一行是return 值,所以不要加return
  }
  def helloScala(): Unit ={ //无参 函数前面的括号可以去掉
    println("my name is  xxxx")
  }
  def  add=(x :Int,y:Int) => x + y  //定义一个匿名函数 ,特别重要
  def add2(x :Int)(y:Int) = x*y  //柯里化
  def printEveryChar(c : String*)={ //接受一系列string 类型的参数,就是可变参数
    c.foreach(x=>println(x))
  }
  def xx(age:Int = 18)={ //调用时候如果不传入参数,就使用默认 参数  18

    age

  }


  // main f
  def main(args: Array[String]) {
    //println("hello there")
   // println(hello("scala"))
    //helloScala //对于无参函数,在调用时候不需要括号,建议加上吧

    //println(add(1,2))
    //println(add2(2)(4))

    //printEveryChar("a","b")
    //printEveryChar("c","d","f")

    //println(xx()) //只有无参函数才能去掉括号
    //条件表达式 if,scala 默认是不需要分号
    //val x =2
    //val b = if(x >1 ) 1 else  0
    //println(b)

    //loop
    //var (n,r) = (10,0)
    //while(n > 0){
    //  r =r +n
    //  n = n -1

    //}
    //println(r)

    //foreach

    //for
    //for ( i<-1 to 100){

    //  print(i)
    //  println()
    //}

    //for ( i<-1 until 10){ //不包含上线 10 ,这是跟to 的区别

     // print(i)
     // println()
    //}

    //for (i <- 1 to 100 if i%2 == 0){ //打印偶数  for 跟 if 表达式的合用

      //println(i)

    //}
    //循环表达式没有 continue and break

    //val p =new Person  //没有构造函数的时候 类的括号可以省略

    //p.name="hidoyouO"

    //print(p.name+":" + p.age)

    //val p = new Person("hijack",18) // new 变量的时候会打印 this is the primary constructor!
    // println(p.age + p.name)
    //val p = new Person("hijack",18,"f")

    //println(p.gender+p.name)

    val s = new Student("hijck",18,"Eng")//其实是初始化所有的方法和属性
    println(s.toString)

  }



}

class TestBegian{ //所有类默认是public 的


}

//class Person{

  //var name :String = _ //此时 String 是不能去掉的
 // var name :String = "hijack"  //var 定义的变量系统会自动生成geter &setter 方法
  //val age = 18    //val 定义的变量只会生成getter方法  ,符合我们的不能重新赋值的理念

  //private[this] var gender ="122"   //变量只能在Person 内使用,main 方法中的对象不能调用

//}

//1.主构造器,直接跟在类名后面,主构造器的参数最后会编译成类的字段
//2.主构造器执行的时候,会执行类中所有的语句
//3.假设参数声明时候不带var or val ,那么声明的变量相当于private【this】,只能在
//在类中使用, class Person ( name :String,val age  : Int) 《= name
class Person (val name :String,val age  : Int){
  println("this is the primary constructor!")
  var gender : String = _
  //辅助构造器名称wei this
  //每一个附属构造器必须首先调用已经存在的子构造器或是主构造器
  def this(name : String,age : Int,gender : String){
    this(name,age)
    this.gender=gender
  }
}

//继承
//name age 是继承来的  ,major 是student 类特有的,所以需要使用val 定义
class Student(name:String,age :Int,val major :String) extends Person(name, age){

  println("this is the subclass of Person,major is " + major)

  //重写父类的方法 和 字段  同时保持跟父类保持相同的数据类型
  override  def toString = "this from student"

}







原文地址:https://www.cnblogs.com/TendToBigData/p/10501383.html