Scala类和对象笔记

参考视频哔哩哔哩https://www.bilibili.com/video/av76280600?from=search&seid=10529351688409433389

Java可以和Scala混编

1.数据类型
与Java类似,区分大小写;(首字母大写)
不同点:
Unit表示无值,与Java的void等同;
Nothing所有其他类型的子类型,表示没有值;
Any所有类型的超类,任何实例都属于Any类型;很像object
Nil长度为0的List;

2.val 和 var
Scala中定义变量用var
Scala中定义变量用val;

尽量使用val易于回收;

/**
 * Scala object相当于Java中的单例,object中定义的全是静态的
 * 定义变量var,定义常量val;变量和常量类型可以省略不写,会自动推断;
 * 每行后面有分号自动推断机制,不用显示写“;”
 */
object Test_ClassAndObj {
  def main(args: Array[String]): Unit = {
    val a = 1
    var b=2
    b = 3
    println(a+b)
  }
}

 3.Scala类中可以传参,传参一定要指定类型,有了参数就有了默认了构造。类中属性默认有getter和setter方法

class Student(sname :String,sage:Int){
  val name=sname
  val age=sage
}

object Test_ClassAndObj {
  def main(args: Array[String]): Unit = {
    val t=new Student(sname="tzk",sage=20)
    println(t.name)
  }
}

 4.Scala中 object相当于Java中的单例,object中定义的全是静态的,相当于Java中的工具类

class Student(sname :String,sage:Int){
  val name=sname
  val age=sage

  def play(): Unit ={
    println("使用object中定义的静态变量str:"+Test_ClassAndObj.str)
  }
}

object Test_ClassAndObj {
  val str="Hello Word"
  def main(args: Array[String]): Unit = {
    val t=new Student(sname="tzk",sage=20)
    //println(t.name)
    t.play()
  }
}

 5.类中重写构造时,构造中第一行必须要先调用默认的构造;def this(...)

class Student(sname :String,sage:Int){
  val name=sname
  val age=sage
  var sex='M'
  def this(tname:String,tage:Int,tsex:Char){
    this(tname,tage)
    this.sex=tsex
  }

}

object Test_ClassAndObj {
  def main(args: Array[String]): Unit = {
    val s=new Student(sname="tzk",sage=20)
    val t=new Student(tname="zhangsan",tage=18,tsex='Y')
    println(t.name)
  }
}

 6.Scala中当new一个类时,类中除了方法不执行(除了构造),其他均执行;例如下例类中打印"创建学生类",则在创建的时候打印输出

class Student(sname :String,sage:Int){
  val name=sname
  val age=sage
  var sex='M'
  def this(tname:String,tage:Int,tsex:Char){
    this(tname,tage)
    this.sex=tsex
  }
  println("创建学生类")
}

object Test_ClassAndObj {
  def main(args: Array[String]): Unit = {
    val s=new Student(sname="tzk",sage=20)
    val t=new Student(tname="zhangsan",tage=18,tsex='Y')
  }
}

 

posted @ 2020-02-01 16:52  田智凯  阅读(156)  评论(0编辑  收藏  举报