Scala入门基础3
1》类和对象
类的定义和简单使用
class Student(name:String,age:Int){ var this.name=name var this.age=age def outPut(): Unit ={ println("学生:"+this.name+"今年"+this.age+"岁") } } object HelloWorld { def main(args: Array[String]) { var s=new Student("王宇",18) s.outPut(); } }
继承和函数的重载
Scala重写一个非抽象方法,必须用override修饰符
class people(name:String,age:Int){ var this.name=name var this.age=age def outPut(): Unit ={ println("学生:"+this.name+"今年"+this.age+"岁") } } class Student(name:String, age:Int, boolean: Boolean)extends people(name,age){ var shuaima=boolean override def outPut(): Unit = { println("学生:" + this.name + "今年" + this.age + "岁,帅吗" + shuaima) } } object HelloWorld { def main(args: Array[String]) { var s=new Student("王宇",18,true) s.outPut(); } }
伴生对象
// 私有构造方法 class Marker private(val color:String) { println("创建" + this) override def toString(): String = "颜色标记:"+ color } // 伴生对象,与类名字相同,可以访问类的私有属性和方法 object Marker{ private val markers: Map[String, Marker] = Map( "red" -> new Marker("red"), "blue" -> new Marker("blue"), "green" -> new Marker("green") ) def apply(color:String) = { if(markers.contains(color)) markers(color) else null } def getMarker(color:String) = { if(markers.contains(color)) markers(color) else null } def main(args: Array[String]) { println(Marker("red")) // 单例函数调用,省略了.(点)符号 println(Marker getMarker "blue") } }
输出
创建颜色标记:red
创建颜色标记:blue
创建颜色标记:green
颜色标记:red
颜色标记:blue
2》Scala Trait(特征)
相当于 Java 的接口,实际上它比接口还功能强大。与接口不同的是,它还可以定义属性和方法的实现。
import java.awt trait Pen{ def colorReturn():String def sizeReturn=()=>10; } class Paint(color1:String,size1:Int)extends Pen{ var col=color1 var siz=size1 override def colorReturn(): String = col } object HelloWord{ def main(args: Array[String]): Unit = { val paint=new Paint("red",12) println(paint.sizeReturn()) } }
3》模式匹配
match相当于switch
def main(args: Array[String]): Unit = { print(score(1)) } def score(x:Any): String =x match{ case 1=>"数字1" case 2=>"数字2" case 3=>"数字3" case _=>"其他" }
使用样例类
object HelloWord { def main(args: Array[String]): Unit = { val red=Pen("Red","大") val blue=Pen("Blue","大") val yellow=Pen("Yellow","小") for(pen<-List(red,blue,yellow)){ pen match { case Pen("Red","大")=>println("使用大毛笔画Red颜色") case Pen("Blue","大")=>println("使用大毛笔画RBlue颜色") case Pen(col,size)=>println("使用"+size+"毛笔画"+col+"颜色") } } } //样例类 case class Pen(col: String, size: String) }
输出
使用大毛笔画Red颜色
使用大毛笔画RBlue颜色
使用小毛笔画Yellow颜色
3》文件操作
def main(args: Array[String]): Unit = { val writer=new PrintWriter(new File("test.txt")) writer.write("王宇真帅") writer.close() }
每次调用这个方法写入时会删除以前的数据重新写入
获取控制台用户输入
def main(args: Array[String]) { print("请输入账号 : " ) val line = StdIn.readLine() println("你的账号是: " + line) }
输出
请输入账号 : 837634852
你的账号是: 837634852
遍历输出文件
Source.fromFile("test.txt").foreach { print }
追加写入文件
def main(args: Array[String]): Unit = { val writer = new FileWriter("learningScala.txt", true) // true 表示追加 // false 表示覆盖 writer.write("王宇真帅"+"\n") writer.close() }
文件按行读取
def main(args: Array[String]): Unit = { val fileName ="test.txt" //第一个参数是文件名,第二个是字符编码类型 for(line<-Source.fromFile(fileName,"UTF-8").getLines){ println(line) } println("第二种方法") val lines=Source.fromFile(fileName).getLines().toList //返回一个Iterator for(line<-lines){ println(line.reverse) } val contents = Source.fromFile(fileName).mkString }
输出
第一行
第二行
第三行
第二种方法
行一第
行二第
行三第
按字符读取
def main(args: Array[String]): Unit = { val fileName ="test.txt" var i=0 val iter=Source.fromFile(fileName,"UTF-8").buffered while(iter.hasNext){//括号内不能加其他输出语句否则只打印最后一行,具体原因不详 println(iter.head) i=i+1 iter.next() } println(i) } 输出 第 一 行 第 二 行 第 三 行 13