Scala从入门到精通

Scala的安装到使用

一、Scala的介绍
1.Scala是一门多番是的编程语言,即面对对象也是函数式编程
我们之前学习的Java是面向对象的编程语言。
而Scala即面向对象,也面向过程
2.打开我们的idea,在File下找到settings,然后搜索scala,如果没有,我们可以通过网址进行下载。如果有,那我们就可以直接创建Scala项目。然后我们的SDK也需要配置,在选择版本的时候,要选择适合我们自己环境的版本。要不然,会发生版本冲突的问题。
3.这些都弄好了之后我们就可以写Scala项目了,在创建类的时候,我们要选择object修饰的类。
二、我们为什么要学习Scala?
1.首先和Java语言有很大的相似之处。
2.开发的时候可以查看源码。
3.开发效率快、运行速度快
三、Scala的相关介绍
3.scala语言和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
2)idea
3)插件安装(离线和在线都可以)
scala-intellij-bin-2017.2.2.zip (一个插件就搞定了)
4)创建一个scala项目测试一下
5)字体背景稍微调整一下

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.scala中的数据数据类型
any是所有类型的超类,也成为顶级类型
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 关键字修饰变量,就是惰性变量,实现延迟加载
注意:惰性变量只能是常量,并且只有在调用惰性变量时,才会去实例化这个变量
2)案例演示
//正常的
var str = {
println(“helloworld”)
}
//懒加载的形式
lazy val str1 = {
println(“helloworld”)
}
//调用这个变量
str1
3)好处
使用在比较耗时的业务中,如网络IO 磁盘IO 场景:

9.差值器
scala中有三种插值器
1.在任何字符串前面加上s,就可直接在字符串中使用变量了
val name:String=“cat”
println(s"she is name is name")2.f插值器:valheight=1.23568println(f"身高是{name}") 2.f插值器: val height=1.23568 println(f"身高是name")2.f:valheight=1.23568println(f"{height}%.2f")

		3.raw插值器:是输入字符串原样,不进行转义 
		例如:
		//没有使用raw
		    println("a\nb\n\tc")
		//使用的效果
			println(raw"a\nb\n\tc")

补充知识:

10.访问修饰符
private :一个类的内部可用
protected:自己类 子类也可以被访问(这个比java更加严格,java同一个包的其他类也可以访问)
public ::如果没有指定修饰符 ,这样的成员在任何地方都可以被访问
注意:
如果不指定的情况下,就是public
实例1:(只能自己访问)
class Test01 {
private val name = “毕老师”

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


		}

		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 = "毕老师"
			}

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)
四、Scala相关的一些简单入门小例子
1.//打印九九乘法表

object TestDay01 {
 def main(args: Array[String]): Unit = {
for (i <- 1 to 9){
    for (j <- 1 to i){
      print(j+"*"+i+"="+ i*j+"\t")
    }
    println()
  }
}
}

2.//计算器

  object TestDay02 {
  def main(args: Array[String]): Unit = {
     println("欢迎使用计算器,如想退出,请在      输入符号的时候输入@")
while (true){
       println("请输入第一个数:")
     val num1 = Console.readInt()
  println("请输入第二个数")
  var num2 = Console.readInt()

  println("请输入运算符号")
  var fh = Console.readLine();

  if(fh.equals("+")){
    println(num1+"+"+num2+"="+(num1 + num2))
  }else if(fh.equals("-")){
    println(num1+"-"+num2+"="+(num1 - num2))
  }else if(fh.equals("*")){
    println(num1+"*"+num2+"="+(num1 * num2))
  }else if(fh.equals("/")){
    if(num2!=0){
      println(num1+"/"+num2+"="+(num1 / num2))
    }else{
      println("你输入的被除数有误,请重新输入")
    }
  }else if(fh.equals("%")){
    println(num1+"%"+num2+"="+(num1 % num2))
  }else if(fh.equals("@")){
    println("你输入的东西有问题吧")

  }
}
}
}

3.// 在Scala中如何获取字符串“Hello”的首字符和尾字符?

 object TestDay03 {
 def main(args: Array[String]): Unit = {
  val str = "Hello"
  val str1 = str.substring(0,1)
  val l = str.length
  val str2 = str.substring(l-1,l)
  println(str1)
    println(str2)
 }

}

4.//统计三个班的成绩情况,每个班有五名同学,每位同学的成绩自己输入,求出每个班的平均分和所有班级的平均分?

object TestDay04 {
 def main(args: Array[String]): Unit = {
  var count = 0
for(i <- 1 to 3){
  println("请输入第"+i+"个班的五名学生的成绩")
  var sum:Int= 0
  for (j <- 1 to 5){
    println("请输入第"+j+"名同学的成绩")
    val sc = Console.readInt()
    sum  +=  sc

  }
  count += sum
  println("第"+i+"个班的平均分:"+sum/5)
}

println("三个班的平均成绩为:"+count/3)
 }
}

5.// 100个以内的数求和,求出和大于20 的当前数?

 object TestDay05 {
 def main(args: Array[String]): Unit = {
for (a <- 1 to 100){
  val i = scala.util.Random.nextInt(100)
  val j = scala.util.Random.nextInt(100)
  if(i*j>20){
    println(s"当前数为$i $j")
    println("相加的值为:"+(i+j))
    println("--------------")
  }

}

 }

6./练习插值器

 object TestDay06 {
def main(args: Array[String]): Unit = {
/*lazy val name = "asdfff"
println(s"$name")*/
/*  var name = "asdsfsaf"
//s插值器
println(s"你的名字:$name")
var age = 1.789654654
//f插值器,可以对数据进行格式化
println(f"身高:$age%.2f")
println(raw"a\nb\tc\n")*/
}

小问题总结:
问题1:scala 语言如何接受键盘的输入?
println(“请输入姓名:”)
val int = Console.readLine()
println(“您的姓名是:”+int)
问题2:字符串中获取收尾字母
//获取首字符??
“Hello”(0)
“Hello”.take(1)
//获取尾字符??
“Hello”.reverse(0)
“Hello”.takeRight(1)
问题3:快捷键补全不好使?

问题4:随机数字生成?
val int = Random.nextInt(10)
println(int)

上百节课详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程亮点: 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为简,讲解通俗易懂。 3,结合工作实践及分析应用,培养解决实际问题的能力。 4,每一块知识点, 都有配套案例, 学习不再迷茫。 课程简介 第一章 环境搭建 00.导学 01.Scala简介 02.Scala程序和Java程序对比 03.Scala环境搭建 04.Scala解释器 05.案例_做最好的自己 第二章 变量和数据类型 00.导学 01.输出语句和分号 02.Scala中的常量 03.Scala中的变量 04.字符串的定义 05.惰性赋值 06.标识符 07.数据类型 08.类型转换 09.值类型和String类型之间的相互转换 10.键盘录入功能 11.案例_打招呼 第三章 运算符 001.导学 01.算术运算符 02.赋值运算符 03.关系运算符 04.逻辑运算符 05.进制和8421码 06.原反补码计算规则 07.位运算符 08.案例_交换变量值 第四章 流程控制结构 00.导学 01.流程控制结构之顺序结构 02.选择结构之单分支结构 03.选择结构之双分支结构 04.选择结构之多分支结构 05.选择结构之注意事项 06.选择结构之嵌套分支 07.扩展_块表达式 08.for循环之简单循环 09.for循环之循环嵌套 10.for循环之守卫 11.for循环之推导式 12.while循环 13.do.while循环 14.break和continue的用法 15.综合案例_九九乘法表 16.综合案例_模拟登陆 第五章 方法和函数 00.导学 01.方法入门 02.返回值的类型推断 03.惰性方法 04.方法参数 05.方法调用方式 06.函数入门 07.方法和函数的区别 08.案例_打印nn乘法表 第六章 面向对象入门 00.导学 01.类和对象的相关概念 02.创建类和对象 03.创建类和对象的简写形式 04.定义和访问成员变量 05.使用下划线初始化成员变量 06.定义和访问成员方法 07.访问权限修饰符 08.主构造器 09.辅助构造器 10.定义单例对象 11,在单例对象中定义方法 12.如何定义程序的主入口 13.定义伴生对象 14.private[this]访问权限 15.apply()方法 16.案例_定义工具类 第七章 继承 00.导学 01.继承入门 02.单例对象的继承 03.方法重写 04.isInstanceOf和asInstanceOf 05.getClass和ClassOf关键字 06.抽象类入门 07.抽象字段 08.匿名内部类 09.动物类案例 第八章 特质 00.导学 01.类继承单个特质 02.类继承多个特质 03.单例对象继承特质 04.演示trait中的成员 05.动态混入trait 06.使用trait实现适配器设计模式 07.使用trait实现模板方法模式 08.使用trait实现职责链模式 09.trait的构造机制 10.trait继承class 11.案例_程序员类 第九章 包_样例类_样例对象 00,导学 01.包的简介和格式 02.包的作用域 03.包对象 04.包的可见性 05.包的引入 06.样例类入门案例 07.样例类的默认方法 08.样例对象 09.案例_计算器 第十章 常用容器(数组, 元组, 集合等) 00.导学 01.创建定长数组 02.创建变长数组 03.变长数组的增删改操作 04.遍历数组 05.数组的常用算法 06.创建元组对象 07.访问元组中的元素 08.创建不可变列表 09.创建可变列表 10.可变列表的常用操作 11.列表的常用操作之基础操作 12.列表的常用操作之扁平化 13.列表的常用操作之拉链与拉开 14.列表的常用操作之转换字符串 15.列表的常用操作之求并集,交集,差集 16.创建不可变集 17.不可变集的常见操作 18.创建可变集 19.创建不可变Map 20.创建可变Map 21.Map的基本操作 22.使用迭代器遍历集合 23.函数式编程之foreach 24.函数式编程之简化函数定义 25.函数式编程之映射 26.函数式编程之扁平化映射 27.函数式编程之过滤 28.函数式编程之默认排序 29.函数式编程之指定字段排序 30.函数式编程之自定义排序 31.函数式编程之分组 32.函数式编程之聚合操作 33.函数式编程之折叠操作 34.综合案
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值