加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala记录(1)scala基础

发布时间:2020-12-16 19:09:36 所属栏目:安全 来源:网络整理
导读:1.基础数据类型 2.常量和变量的声明 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10 常量不可再赋值 /** * 可以在变量名后面加上变量类型,不加的话会自己推断类型 * 另外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 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,10
    
    println(1 to (10,2))//步长为2,从1开始打印 ,1,9
    println(1.to(10,2)) 
    
    println(1 until 10 ) //不包含最后一个数,打印 1,9
    println(1.until(10))//与上面等价
    
println(1 until (10,3 ))//步长为2,从1开始打印,打印1,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 )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读