zoukankan      html  css  js  c++  java
  • scala记录(1)scala基础

    1.基础数据类型

    2.常量和变量的声明

    • 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10
    • 常量不可再赋值
        /**
         * 可以在变量名后面加上变量类型,不加的话会自己推断类型
         * 另外scala换行的时候可以不加分号,多行代码写在一行要用分号隔开。
         * 如以下声明方式
         * 定义变量和常量
         * 变量 :用 var 定义 ,可修改 
         * 常量 :用 val 定义,不可修改
         * 只有这两种声明方式
         */
        var a = 10
        val b = 10
        var c:Int = 10
        val d:String = "a"

    3.类和对象

    类(class):

    /**
     * 类的声明可以带构造器,直接写在类的名字后面,如Person,构造器需要传入的参数必须带上类型
     * 同样也可以不带,如Son
     * class 是scala中的类,类可以传参,传参就有了默认的构造函数。类中的属性默认就有getter,setter方法。重写构造,第一行要调用默认的构造
     * 当new 一个class时,类中除了方法不执行,其他都执行。同一个包下,class的名称不能相同。
     */
    class Son{
      val name = "erzi"
      var age = 19
    }
    class Person(xname:String,xage:Int){
      val name = xname
      var age = xage
      var gender = 'm'
      /**
       * 重写构造,如下,同JAVA,重写构造器方法的第一行需调用原始构造器
       */
      def this(yname:String,yage:Int,ygender:Char){
        this(yname,yage)
        this.gender = ygender 
      }
      def sayName() = {
        println(this.name+"---"+this.age+"---"+this.gender)
      }
    }

    对象(object):不可以传参

    有一篇详细的关于Object的博文:https://blog.csdn.net/ym01213/article/details/81105556

    object LearnClass {
      
      def main(args: Array[String]): Unit = {
    /**
     * scala中定义在object中的变量,方法都是静态的,object叫对象,相当于java中的单例对象。object不可以传参,Trait也不可传参。
     * scala中 如果一个class名称和object的名称一致,那么这个class叫做这个object的伴生类,这个object叫做这个class的伴生对象,他们之间可以互相访问私有变量。
     */
        val person = new Person("zhangsan",18)
        person.sayName()
        
        val person1 = new Person("lisi",11,'f')
        person1.sayName()
    
      }
    }

    伴生类和伴生对象:

    一个class名称和object的名称一致,那么这个class叫做这个object的伴生类,这个object叫做这个class的伴生对象,他们之间可以互相访问私有变量

    class Person(xname :String , xage :Int){
      var name = Person.name
      val age = xage
      var gender = "m"
      def this(name:String,age:Int,g:String){
        this(name,age)
        gender = g
      }
      
      def sayName() = {
        "my name is "+ name
      }
    
    }
    
    object Person {
      val name = "zhangsanfeng"
      
      def main(args: Array[String]): Unit = {
        val person = new Person("wagnwu",10,"f")
        println(person.age);
        println(person.sayName())
        println(person.gender)
      }
    }

     4.if..else

      /**
         * if else 
         */
        val age =18 
        if (age < 18 ){
            println("no allow")
        }else if (18<=age&&age<=20){
            println("allow with other")
        }else{
            println("allow self")
        }

    5.for,while,do...while

    5.1to和until 的用法(不带步长,带步长区别)

     /**
         * to和until
         * 例:
         * 1 to 10 返回1到10的Range数组,包含10
         * 1 until 10 返回1到10 Range数组 ,不包含10
         */
        
        println(1 to 10 )//打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
        println(1.to(10))//与上面等价,打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
        
        println(1 to (10 ,2))//步长为2,从1开始打印 ,1,3,5,7,9
        println(1.to(10, 2)) 
        
        println(1 until 10 ) //不包含最后一个数,打印 1,2,3,4,5,6,7,8,9
        println(1.until(10))//与上面等价
        
    println(1 until (10 ,3 ))//步长为2,从1开始打印,打印1,4,7

    5.2创建for循环

     /**
         * for 循环
         * 
         */
        for( i <- 1 to 10 ){
          println(i)
        }

    5.3创建多层for循环

        //可以分号隔开,写入多个list赋值的变量,构成多层for循环
        //scala中 不能写count++ count-- 只能写count+
        var count = 0;
        for(i <- 1 to 10; j <- 1 until 10){
          println("i="+ i +",    j="+j)
          count += 1
        }
        println(count);
        
        //例子: 打印小九九
        for(i <- 1 until 10 ;j <- 1 until 10){
          if(i>=j){
              print(i +" * " + j + " = "+ i*j+"    ")
          }
          if(i==j ){
            println()
          }
        }

    5.4 for循环中可以加条件判断,可以使用分号隔开,也可以不使用分号

      //可以在for循环中加入条件判断
        for(i<- 1 to 10 ;if (i%2) == 0 ;if (i == 4) ){
          println(i)
    }

    5.5scala中不能使用count++,count—只能使用count = count+1 ,count += 1

    5.6for循环用yield 关键字返回一个集合

    5.7while循环,while(){},do {}while()

        //将for中的符合条件的元素通过yield关键字返回成一个集合
        val list = for(i <- 1 to 10  ; if(i > 5 )) yield i 
        for( w <- list ){
          println(w)
    }
    
       /**
         * while 循环
         */
        var index = 0 
        while(index < 100 ){
            println("第"+index+"次while 循环")
          index += 1 
        }
        index = 0 
        do{
            index +=1 
            println("第"+index+"次do while 循环")
    }while(index <100 )
  • 相关阅读:
    Kubernetes日志的6个最佳实践
    如何选出适合自己的管理Helm Chart的最佳方式?
    授权权限服务设计解析
    微服务中如何设计一个权限授权服务
    微服务中的网关
    ketchup服务治理
    ketchup 消息队列rabbitmq使用
    ketchup 注册中心consul使用
    微服务框架 ketchup 介绍
    微服务框架surging学习之路——序列化
  • 原文地址:https://www.cnblogs.com/kpsmile/p/10371836.html
Copyright © 2011-2022 走看看