object class7 {
case class Stu(name:String, yuwen:Double, shuxue:Double, yingyu:Double)
def main(args: Array[String]): Unit = {
val stuList = scala.collection.mutable.ListBuffer[Stu]()
val lines = scala.io.Source.fromFile("score.txt").getLines()
lines.next()
while(lines.hasNext){
val line = lines.next()
val li = line.split(":")
stuList += Stu(li(0), li(1).toDouble, li(2).toDouble, li(3).toDouble)
}
println("读入数据结束")
println("计算结束,开始写入")
val fileWriter = new FileWriter("score_result.txt")
fileWriter.write("高三19班成绩单 \r")
stuList.foreach(stu => {
val total = stu.yuwen + stu.yingyu + stu.shuxue
val avg = total / 3
fileWriter.write(s"${stu.name}, 总分:${total}, 平均分:${avg} \r\n")
})
fileWriter.close()
}
}

1. 自动生成的代码
- 样例类:自动生成
apply、unapply、toString、equals、hashCode、copy 等方法,无需手动实现。(比如 Circle(2) 直接创建对象,无需 new;模式匹配时能自动解构属性)
- 普通类:默认只有构造器,上述方法都需要手动定义。
2. 构造器参数
- 样例类:构造器参数默认是
val(不可变),也可以显式声明为 var(但不推荐)。
- 普通类:构造器参数默认是 “局部变量”,需要显式加
val/var 才能成为类的成员属性。
3. 模式匹配
- 样例类:天生支持模式匹配(因为自动生成
unapply 方法),比如代码中 case Circle(radius) => ... 可以直接解构属性。
- 普通类:要支持模式匹配,必须手动定义
unapply 方法(比较繁琐)。
4. 用途场景
- 样例类:常用于数据载体(比如 DTO、不可变数据模型)、模式匹配场景。
- 普通类:适用于需要复杂逻辑、可变状态、自定义行为的场景。