/** * * case class 样例类 必须要有参数列表 * case object 样例对象 必须不能加参数列表 * * interview: class 和 case class的区别 * * case class 重写了toString, equals hashCode * case class 默认就实现了序列化 * case class 不用new */ object CaseClassApp { def main(args: Array[String]): Unit = { println(Dog("旺财").name) }
class : scala> class person(val name :String , val age : Int) defined class person scala> val p1 = new person("sx",24) p1: person = person@38f796a5 scala> val p2 = new person("sx",24) p2: person = person@1d04ef4f scala> p1 ==p2 res37: Boolean = false case class : scala> case class Person(name : String ,age : Int) defined class Person
scala> val p3 = Person("sx",30) p3: Person = Person(sx,30) scala> val p4 = Person("sx",30) p4: Person = Person(sx,30) scala> p3 ==p4 res38: Boolean = true
这里为什么 case class 的就相等呢? case class 重写了toString, equals hashCode
** * * 模式匹配 * 身高 * 腿 * 脸 * 胸 * * 变量 match { * case 颜值 => code * case 腿 => code * case 身高 => code * case 脸 => code * case _ => 凤姐 芙蓉姐姐 * } * * 匹配内容、匹配类型、匹配集合、匹配case */ object MatchApp {
def main(args: Array[String]): Unit = {
/** * 匹配内容 */
val teachers = Array("Aoi Sola", "YuiHatano", "Akiho Yoshizawa") val name = teachers(Random.nextInt(teachers.length))
name match { case "YuiHatano" => println("波老师") case "Akiho Yoshizawa" => println("吉老师") case _ => println("真不知道这位老师是谁") }
// println(name)
/** * 类型匹配 */
def matchType(obj:Any) = obj match { case x:Int => println("Int") case s:String => println("String") case m:Map[_,_] => println("Map") case _ => println("Other Type...") }
/** * case class匹配 */ val caseclasses = Array(CheckTimeOutTask,HeartBeat(3000),SubmitTask("100","task100"))
caseclasses(Random.nextInt(caseclasses.length)) match { case CheckTimeOutTask => println("CheckTimeOutTask") case HeartBeat(time) => println("HeartBeat") case SubmitTask(id,name) => println("SubmitTask") }
//涉及到流的方式 val file = "xx.txt" try{ //TODO... 业务逻辑处理 // open file 1/0 } catch { case e:ArithmeticException => println("除数不能为0...") case e:Exception => e.printStackTrace() } finally { // 资源释放的 // close println("一定会执行....") }
}
}
case class SubmitTask(id:String,name:String) case class HeartBeat(time:Long) case object CheckTimeOutTask