大数据之初识Scala语言Scala语言的学习

4 篇文章 0 订阅
4 篇文章 0 订阅

1.为什么要学习Scala?

1、spark底层是用Scala语言编写

2、Scala基于Java ,开发效率高运行速度快

2.Scala的简单介绍

scala 是一门多范式的编程语言。即面向对象也是函数式编程。
面向对象:万物皆对象 、封装、实例对象、类、继承
函数式编程: 面向过程 函数当成编程

3.与Java语言的对比

相同点:

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

不同点:

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

4.编译工具的安装

1)jdk (这里我使用的是JDK1.8)
2)idea (这是我们的编程软件)
3)插件安装(离线和在线都可以,如果我们的编程软件没有集成Scala的话我们就安装下面这个插件)

  • scala-intellij-bin-2017.2.2.zip (一个插件就搞定了)
    在这里插入图片描述
    在这里插入图片描述
    4)安装SDK
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    5)创建一个scala项目测试一下
    这里要记得是创建Scala项目,不要创成Java项目了
    在这里插入图片描述
    6)字体背景稍微调整一下
    此选项呢可以根据个人来设置

5.main方法讲解

语法

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

在这里插入图片描述

6.常量和变量

1)定义

常量:是在运行的过程中,其值不会发生变化的量 例如:数值3 字母A   修饰的关键字val  
变量:是在运行的过程中,其值可以发生变化的量 例如:时间,年龄  修饰的关键字var

2)语法

val name:Type=变量值
var name:Type=变量值
	注意1:
		类型可以不写,scala 可以自动类型推到
	注意2:变量名称必须符合命名规范,不能使用关键字(命名规范和java一样)
		1.字母,下划线,数字组成,并且不能以数字开头
			val 4_tablename="t_user";
		2.变量名要做到见名知意,(如果英文不好我们通过通过有道翻译)
		3.用驼峰命名法命名多个单词组成的变量名
			val tablename="t_user";
		4.变量名不能使用关键字
			val def =12

在这里插入图片描述

7.数据类型

any是所有类型的超类,也成为顶级类型

Any是所有类型的超类型,也称为顶级类型。Any有两个直接子类:AnyVal和AnyRef。
AnyVal代表值类型。有9个预定义的非空的值类型分别是:Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。Unit是不带任何意义的值类型,它仅有一个实例可以像这样声明:()。所有的函数必须有返回,所以说有时候Unit也是有用的返回类型。

AnyRef代表引用类型。所有非值类型都被定义为引用类型。在Scala中,每个用户自定义的类型都是AnyRef的子类型。

Null是所有引用类型的子类型(即AnyRef的任意子类型)。它有一个单例值由关键字null所定义。

Nothing是所有类型的子类型,也称为底部类型。没有一个值是Nothing类型的。
anyVal (值类型)  :
				int  short byte long  double string char boolean Uint (9个)
		长度		 4    2     1    8      8       4     2	  	1 
anyRef(引用类型) :
				List  map option  yourclass ....
		注意:java类型中没有和scala中Nothing对应的类型	

在这里插入图片描述
在这里插入图片描述

8.懒加载

1)scala 中使用lazy 关键字修饰变量,就是惰性变量,实现延迟加载

注意:惰性变量只能是常量,并且只有在调用惰性变量时,才会去实例化这个变量

Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载)。惰性变量只能是不可变变量,并且只有在调用惰性变量时,才会去实例化这个变量。

2)案例演示

	//正常的	  
    var str = {
      println("helloworld")
    }
	//懒加载的形式
	lazy val str1 = {
		println("helloworld")
	}
	//调用这个变量
    str1

3)好处

使用在比较耗时的业务中,如网络IO 磁盘IO

9.差值器

Scala语言中有三种差值器

1.s差值器

在任何字符串前面加上s,就可直接在字符串中使用变量了
val name:String=“cat”
println(s"she is name is ${name}")

2.f插值器:

		 val height=1.23568
		println(f"身高是${height}%.2f")

3.raw插值器:是输入字符串原样,不进行转义

除了对字面值中的字符不做编码外,raw 插值器与 s 插值器在功能上是相同的。
例如:

			//没有使用raw
			    println("a\nb\n\tc")
			//使用的效果
				println(raw"a\nb\n\tc")

在这里插入图片描述

10.访问修饰符

1)private

private :一个类的内部可用

2)protected

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

3)public

public ::如果没有指定修饰符 ,这样的成员在任何地方都可以被访问

	注意:
			如果不指定的情况下,就是public
		实例1:(只能自己访问)
			class Test01 {
			  private val name = "XXX"

			  def main(args: Array[String]): Unit = {
				println(name)
			  }
			}
		实例2:
			class Test01 {
			  protected val name = "XXX"


			}

			class Test02 extends Test01 {

			  def main(args: Array[String]): Unit = {
				println(name)
			  }
			}
		实例3:
			object Test {
				  def main(args: Array[String]): Unit = {
					val test0 = new Test01
					println(test0.name)
				  }
				}


				class Test01 {
				   val name = "XXX"
				}

11.运算符

1)算术运算符

		算术运算符:加 减 乘 除 取余
		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))
		   }
		}
			

2)关系运算符

		关系运算符: ==  !=  > < >=  <=
		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))
		   }
		}
		

3)逻辑运算符

		逻辑运算符:&&  ||  !
		object Test {
		   def main(args: Array[String]) {
			  var a = true;
			  var b = false;
			  println(a&&b)
			  println(a||b)
			  println(!a)
		   }
		} 

4)赋值运算符

		赋值运算符:  =  +=  -=  *=  /=  %=  
	
			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)

13.小试牛刀

问题1:scala 语言如何接受键盘的输入?

		println("请输入姓名:")
		val int = Console.readLine()
		println("您的姓名是:"+int)		

问题2:字符串中获取收尾字母

//获取首字符??
"Hello"(0)
"Hello".take(1)
//获取尾字符??
"Hello".reverse(0)
"Hello".takeRight(1)

问题3:随机数字生成?

	val int = Random.nextInt(10)
    println(int)

由于时间原因今日就先写到这里。

————————————————————————————END————————————————————————————————

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值