学习spark--(1)--scala(1)

11 篇文章 0 订阅
10 篇文章 0 订阅

1.为什么要学习scala?

  1. spark底层时用scala实现的,想要学号spark,必须学会scala这门语言
  2. 语言有自己的特点,无论是在编程效率还是执行速度都要优于java

2.scala语言的介绍

  1. scala时一门多范式的编程语言,及时面向对象也是函数式编程

  2. 函数式编程:所有的变量全部为一个对象,把函数当成编程

  3. 什么是多范式?

    多范式:多种形式的编程,常见的有过程是式,函数式,泛型编程
    面向对象:把数据和数据的操作方法放在一起,作为一个相互依存的整体
    面向函数式编程:把函数可以当作变量使用,
    函数式:scala的一等公民

    一等公民的特权:
    函数可以传递和赋值
    scala中可以有嵌套函数和匿名函数
    scala中还支持高阶函数
    scala中还支持偏函数
    scala支持闭包

3.scala语言和java语言的对比

相同点:

  1. java和scala可以无缝混编,他们都是基于jvm
  2. 二者可以相互调用

不同点:

  1. 类型自动推导
  2. val(常量)var(变量)
  3. 支持函数式编程
  4. 构造器不一样
  5. java中可以自动默认值,scala中必须手动给定默认值
  6. scala不需要分号,但是java必须要有
  7. get,set scala底层自动实现
    age:相当于java 中的getter方法
    age_$eq:相当于java中的set方法
  8. Java中的放回只能用return scala中没有return

4.编译工具的安装

  1. jdk
  2. idea
  3. 插件安装(离线和在线都可以)
    scala-intellij-bin-2017.2.2.zip (一个插件就搞定了)在这里插入图片描述
  4. 创建一个scala项目测试
    在这里插入图片描述
    在这里插入图片描述

5.main方法讲解

main(static=object)
语法
关键字 方法名 (参数):放回只类型={
}
def main(args: Array[String]): Unit = {
}

6.常量和变量

  1. 定义
    常量:是在运行过程中,其值不会发生变化的量,例如:数值3,字母A 修饰的关键字为val
    变量:是在运行的过程中,其值可以发生变化的量,例如:时间,年龄 修饰的关键字时var
  2. 语法
    val name:Type=常量值
    var name:Type=变量值
    注意:类型可以不写,scala自动进行推导,变量名必须符合命名规范

7.scala中的数据类型有

  1. any是所有类型的超类,也成为顶级类型
  2. anyVal(值类型)
    int, short, byte, long, double, string, char, boolean, Uint
    长度4 2 1 8 8 4 2 1
  3. anyRef(引用类型):
    List map option yourclass…
    注意:java中没有和scala中nothing相对应的类型

8.懒加载

  1. scala中使用lazy关键字修饰变量,就是惰性变量,,实现延迟加载
    注意:惰性变量只能是常量,并且只有在调用惰性变量时候,才会去实例化这个变量
  2. 示例演示
    //正常的
    var str = {
    println(“helloworld”)
    }
    //懒加载的形式
    lazy val str1 = {
    println(“helloworld”)
    }
    //调用这个变量
    str1
  3. 好处:使用在比较耗时的业务中,如网络IO 磁盘IO 场景:

9. 插值器,

scala中有三种插值器
	1. s插值器:在任何字符串前面加上s,就可以直接在字符串中使用哪个变量了
		demo:val name:String = "lostrever"
			println(s"i love ${name}")
	2. f插值器:
		demo:val height = 1.234
			println(f"身高是${height}%.2f")
	3. raw插值器:是输入字符串原样,不进行转义,
		demo:println(raw"\n\tss")

10. 访问修饰符

  1. private :一个类的内部可用

  2. protected :自己类,子类也可以被访问,(比java更加严格,java同一个包的其他类也可以访问)

  3. public :如果没有指定修饰符,这样的成员在任何地方都能被访问
    注意:不指定情况下是public
    demo01:(只能自己访问)

     		class Test01 {
     		  private val name = "曾经"
     		  def main(args: Array[String]): Unit = {
     			println(name)
     		  }
     		}
     		
     	demo02:
     		class Test01 {
     		  protected val name = "沧海"
     		}
     		class Test02 extends Test01 {
     		  def main(args: Array[String]): Unit = {
     			println(name)
     		  }
     		}
     		
     	demo03:
     		object Test {
     			  def main(args: Array[String]): Unit = {
     				val test0 = new Test01
     				println(test0.name)
     			  }
     			}
     			class Test01 {
     			   val name = "难为水"
     			}
    

11. 运算符

  1. 算术运算符

  2. 关系运算符

  3. 逻辑运算符

  4. 赋值运算符

     算术运算符:加 减 乘 除 取余
     object Test {
        def main(args: Array[String]) {
     	    val a = 100
     		val b = 200
     		val c = 250
     		val d = 250
     		println("a 加 b = " + (a + b))
     		println("a 减 b = " + (a - b))
     		println("a 乘 b = " + (a * b))
     		println("b 除 a = " + (b / a))
     		println("b 取余 a = " + (b % a))
        }
     }
     		
     
     关系运算符: ==  !=  > < >=  <=
     object Test {
        def main(args: Array[String]) {
     	    val a = 100
     		val b = 200
     		println("a 等于 b     是: " + (a == b))
     		println("a 不等于 b   是: " + (a != b))
     		println("a 大于 b     是: " + (a > b))
     		println("a 小于 b  	  是: " + (a < b))
     		println("b 大于等于 a 是: " + (b >= a))
     		println("b 小于等于 a 是: " + (b <= a))
        }
     }
     
     
     逻辑运算符:&&  ||  !
     object Test {
        def main(args: Array[String]) {
     	  var a = true;
     	  var b = false;
     	  println(a&&b)
     	  println(a||b)
     	  println(!a)
        }
     } 
    
     赋值运算符:  =  +=  -=  *=  /=  %=  
    
     	var a = 10;
     	val b = 20;
     	var c = 0;
     	c = a + b;
     	println(c);
     	
     	  var a = 10;    
     	  var c = 0;
     	  c += a ;
     	  println( c );
     	  
     	  var a = 10;    
     	  var c = 0;
     	  c -= a ;
     	  println( c );
     	
     	  var a = 10;    
     	  var c = 0;
     	  c *= a ;
     	  println("c *= a = " + c );
    
     	  val a = 10;
     	  var c = 15;
     	  c /= a ;
     	  println("c /= a  = " + c );
    
     	  val a = 10;
     	  var c = 15;
     	  c %= a ;
     	  println("c %= a  = " + c );
    

12.类型转换

  1. String 类型转换为Int
    val age:String =“123”
    println(age.toInt.getClass.getName)
  2. Int 类型转换为String
    val b:Int =123
    println(b.toString.getClass.getName)
  3. String类型转换为Float类型
    val c:String =“123.123”
    println(c.toFloat.getClass.getName)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值