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

优质内容筛选与推荐>>
1、Kafka和RabbitMQ 对比
2、Linux平安隐患及增强管理的方法-1
3、redux详解
4、android adb:电池与电量
5、我的博客诞生了!


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn