• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Scala学习(一)

武飞扬头像
肥大毛
帮助1

1.什么是Scala

Scala将面向对象和函数式编程结合成一种简洁的高级语言。Scala的静态类型有助于避免复杂应用程序中的错误。

1.1 为什么要学习Scala?

Spark基于内存的大数据计算框架,而Spark就是Scala开发的。所以为了学习好Spark需要掌握Scala语言。

1.2 Scala特点

Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程
Scala源代码会被编译成java字节码.class,然后运行在JVM上,并且可以调用现有的java类库,实现两种语言的无缝对接
Scala单作为一门编程语言来看,非常简洁高效
Scala参照了java的设计思想

2.伴生类和伴生对象

在scala中没有static关键字,使用object关键字来实现静态方法的功能。
class用来定义一个类。

2.1 用Scala写一个HelloWorld程序

学新通
Scala使用伴生对象来表示静态的属性和方法,object中的所有属性和方法默认都是静态的。
在scala中伴生类和伴生对象加起来等于java的一个类
学新通
伴生对象也可以单独存在,如果伴生对象单独存在的话,就叫做单例对象。

scala文件在编译后会生成.class字节码文件,因为scala是通过伴生对象object来实现静态的,所以在编译后会生成两个文件。HelloScala$.class用于存放静态代码,而HelloScala.class存放的是伴生类中的代码。

学新通
如果Scala代码中只依赖Java中的库,在cmd中可以通过java来直接运行scala的字节码文件,否则java要添加scala的类库。

3.Scala中的变量和注释

3.1 注释

单行注释:
多行注释:
文档注释:
和java中注释用法一致

3.2 变量和常量

常量:在程序执行的过程中,其值不会被改变的变量
java中的final如果加static才会被放入到常量池中,否则会作为不可修改的变量存储在堆栈中。
学新通
写在object伴生对象中才是常量,写在main方法中不属于常量

var和val的区别

val是不可变的,var修饰的变量的值是可以修改改变的

变量使用规则:
    //1.声明变量的时候,类型是可以进行省略的,编译器自动推导
    //只能推断固定的类型
    val c=30;//此处的c为int类型,使用类型推断
    //2.类型确定之后,就不能修改,scala是强类型语言

学新通

//3.声明变量的时候,必须要有初始值
//4.在定义或者声明一个变量的时候,可以使用var或val来修饰,var修饰的变量可以改变,而val修饰的变量是不能进行修改的
//5.var修饰的对象引用可以改变,val修饰的对象不可以改变,但是对象的状态(值)却是可以进行改变的。

学新通

4.Scala字符串输出

    //重复字符串拼接,将字符串输出多次
    println("mao".*(100))

学新通

//字符串模板(插值字符串):通过$获取变量的值
s"${}"
    var age = 11;
    var name = "feidamao"
    val value = s"${age 11}岁的"   s"${name}"
    printf("%s",value)

学新通

//原始字符串 """"""
    val value1=
    """
      |select
      |       id,
      |       name,
      |       age
      |from user
      |""".stripMargin
      printf("%s",value1)

学新通

5.Scala标准输入

5.1 键盘输入

object Stdin{
  def main(args: Array[String]): Unit = {
    println("欢迎来到。。。")

    println("请输入您的名称:")
    val name:String=StdIn.readLine()

    println("请输入您的年龄")
    val age:Int=StdIn.readInt()

    println(s"欢迎${age}岁的${name}")
  }
}

学新通

6.Scala的数据类型

6.1 要点

Scala中一切数据都是对象,都是Any的子类
Scala中的数据类型分为两大类:数值类型和引用类型,不管是值类型还是引用类型都是对象
Scala数据类型依然遵守低精度类型向高精度类型,自动转换(隐式转换)。
Scala中的StringOps是对java中的String增强
Unit:对应java中的void,用于方法返回值的位置,表示方法没有返回值。Unit是一个数据类型,只有一个对象(),Void不是数据类型,只是一个关键字。
Null是一个类型,只有一个对象为null,它是所有引用类型的子类
Nothing,是所有数据类型的子类,主要用在一个函数没有明确的返回值(比如出现异常)的时候使用,因为这样可以把抛出的返回值,返回给任何的变量或者函数。
学新通
代码本质:任何代码都会被当做代码块执行,最终将最后一行代码的返回值 返回。

6.2 自动类型转换

a.自动提升原则:有多种类型的数据进行混合运算的时候,系统会首先自动将所有数据的类型转换成精度大的那种数据类型,然后再进行计算。
b.把精度大的数值类型赋值给精度小的数值类型的时候,就会报错,反之就会进行数据类型转换。
c.(byte,short)和char之间不能相互自动转换
d.byte,short,char它们三者可以计算,在计算的时候首先转换为int类型。
学新通
学新通

6.3 强制类型转换

自动转换的逆过程,将精度大的数值类型转换为小的数值类型,使用时要加上强制类型转换函数,但是可能会造成精度降低或者溢出,格外要注意。
数值类型向字符串类型转换的时候,直接.toString即可。

    //强制类型转换
    val l1:Long =150
    var l2:Int=l1.toInt
    var l3:String=l1.toString

    println(l2)
    println(l3)

学新通
有的时候要转换两步:如

var int1:Int="12.0".toDouble.toInt

否则会报错

原码 补码 反码

符号位为正时,原码=补码=反码
符号位为负时,
反码=原码符号位不变,其他位取反
补码=原码符号位不变,其他位取反再加1

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgkaajj
系列文章
更多 icon
同类精品
更多 icon
继续加载