• 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("王宇真帅"+"
    ")
        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
    
  • 相关阅读:
    【数据库】mysql 服务不能安装 与闪退
    【vue】遍历循环添加a标签的属性值 与获取某个属性值
    写在大一
    一些关于新材料研究的想法
    我的大学求学之路
    河南洛阳中铝洛铜实习
    html-制作导航菜单
    全局CSS的配置
    手扭到了
    第一次用,大家照顾哈
  • 原文地址:https://www.cnblogs.com/837634902why/p/10467946.html
Copyright © 2020-2023  润新知