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 n a m e " ) 2. f 插 值 器 : v a l h e i g h t = 1.23568 p r i n t l n ( 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值