Scala学习(一)
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
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13