文章目录
1.什么是Scala1.1 为什么要学习Scala?1.2 Scala特点
2.伴生类和伴生对象2.1 用Scala写一个HelloWorld程序scala文件在编译后会生成.class字节码文件,因为scala是通过伴生对象object来实现静态的,所以在编译后会生成两个文件。HelloScala$.class用于存放静态代码,而HelloScala.class存放的是伴生类中的代码。
3.Scala中的变量和注释3.1 注释3.2 变量和常量var和val的区别变量使用规则:
4.Scala字符串输出5.Scala标准输入5.1 键盘输入
6.Scala的数据类型6.1 要点6.2 自动类型转换6.3 强制类型转换原码 补码 反码
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
精彩内容
发表评论