赞
踩
Scala底层是用java语言编写的,scala是运行在Java虚拟机(JVM)上的编程语言,它兼容Java,可以直接调用Java的库和框架,并与Java代码无缝集成和互操作。
如果java没有基础的,可以看看在下java专栏的文章^_^,链接如下:
- /**
- * def:定义函数或者方法的关键字
- * main:函数名 main函数是被jvm(java虚拟机)所特有识别的程序入口
- * args:参数名
- * Array[String]:参数的数据类型
- * Unit:返回值类型 相当于java中的void
- *
- * scala:def main(args: Array[String]): Unit = {}
- * 等价于
- * java:public static void main(String[] args)
- */
- object HelloWorld {
- def main(args: Array[String]): Unit = {
- //在scalaz中也可以使用Java语法输出hello world
- System.out.println("hello world")
-
- //使用scala自己的语法输出hello world
- println("hello world")
- }
- }
注意:
1、scala代码中可以使用Java的类和方法
2、scala代码中一行语句的结束不需要加分号
3、class是一个普通的类,不能直接编译运行,object相当于一个单例对象,object类中的方法相当于加上一个static关键字,意味着object类中的方法可以直接调用
参数理解:
def:定义函数或者方法的关键字
main:函数名 main函数是被jvm(java虚拟机)所特有识别的程序入口
args:参数名
Array[String]:参数的数据类型
Unit:返回值类型 相当于java中的void
在scala中,可以使用val或者var来定义变量
定义一个变量: var
定义一个常量: val 常量值无法被改变
定义一个变量或常量的标准语法:var/val 变量名:数据类型 = 值
scala提供一种自动数据类型推断机制,数据类型可以省略不写
- /**
- * scala与java中基本数据类型:
- * scala: java:
- * Byte byte
- * Short short
- * Int int
- * Long long
- * Float float
- * Double double
- * Boolean boolean
- * Char char
- */
- object DataTypes {
- def main(args: Array[String]): Unit = {
- /**
- * 定义一个变量: var
- * 定义一个常量: val 常量值无法被改变
- * 定义一个变量或常量的标准语法:var/val 变量名:数据类型 = 值
- * scala提供一种自动数据类型推断机制,数据类型可以省略不写
- */
-
- var a1: Int = 19
- a1 = 29
- println(a1)
- //获取数据类型
- println(a1.getClass) //int
-
- val a2: Double = 19.03
- //a2 = 29 报错原因:常量值无法被改变
- println(a2.getClass)
-
-
- /**
- * 字符串:String
- * 1.scala中的String与java中的String指的是同一个,java中String类的方法在scala中都可以使用
- * 2、scala和java是互相兼容的
- * */
-
- //字符串切分:
- val c2: String = "wo,xiang,qu,kan,xu,song,de,yan,chang,hui"
- val strings: Array[String] = c2.split(",")
- println(strings(0)) //wo 注意scala中使用索引取值用(),java中使用的是[],但它们的索引都是从0开始
- println(strings(4), strings(5)) //(xu,song)
-
- //字符串拼接:
- //方式1:使用+拼接
- val c3: String = strings(0) + "*" + strings(1) + "*" + strings(2)
- println(c3)
- //方式2:使用StringBuffer或StringBuilder加append方法
- val c4: StringBuffer = new StringBuffer()
- c4.append(strings(0))
- .append("*")
- .append(strings(1))
- .append("*")
- .append(strings(2))
- println(c4)
- //方式3:利用scala中的mkString方法
- val c5: String = strings.mkString("*") //底层还是使用StringBuilder拼接字符串
- println(c5) //wo*xiang*qu*kan*xu*song*de*yan*chang*hui
- //方式4:插值表达式
- /**
- * scala中, 可以使用插值表达式来定义字符串, 有效避免大量字符串的拼接
- * 格式:val/var 变量名[:String] = s"${变量/表达式}字符串"(s可以换成f,效果相同)
- */
- val c6 = s"${strings(0)}*${strings(1)}*${strings(2)}" //wo*xiang*qu 底层还是使用StringBuilder拼接字符串
- println(c6)
-
-
- }
- }
- import java.util.Scanner
-
- /**
- * 流程控制:顺序结构 选择结构 循环结构
- */
- object FlowControl {
- def main(args: Array[String]): Unit = {
- //选择结构之if...else
- val sc: Scanner = new Scanner(System.in)
- println("请输入你的考试成绩:")
- val score: Int = sc.nextInt()
- if (score < 60) { //引用变量、方法等不需要再后面加数据类型
- println("真遗憾你挂科了!哭")
- } else {
- println("恭喜你没有挂科!笑")
- }
-
- /**
- * 注意:
- * 1、scala语法中没有++或--
- * 2、scala中for循环的格式与java有很大的区别
- * 3、scala中泛型使用的是[],java中使用的是<>
- */
-
-
- //创建一个数组
- val arr1: Array[String] = Array("java", "scala", "spark", "flink")
- //使用for循环遍历数组
- for (e <- arr1) {
- println(e)
- }
- //使用while循环
- var i: Int = 0
- while (i < arr1.length) {
- println(arr1(i))
- i += 1
- }
-
- //scala的for循环中to与unitl的区别
- //to:[]左闭右闭
- for (e <- 1 to 10) {
- println("hello world") //10个
- }
- println("*"*50)
- //until:[)左闭右开
- for (e <- 1 until 10) {
- println("hello world") //9个
- }
-
- }
- }
- /**
- * 在scala中,跟Java不同,条件表达式(if)是有返回值的,所以可以将它赋值给变量
- */
- val sc: Scanner = new Scanner(System.in)
- println("请输入你的考试成绩:")
- val score: Int = sc.nextInt()
- if (score < 60) { //引用变量、方法等不需要在后面加数据类型
- println("真遗憾你挂科了!哭")
- score
- } else {
- println("恭喜你没有挂科!笑")
- }
- println("你的成绩是:"+score)
注意:在scala中,跟java不同,条件表达式(if)可以有返回值
- /**
- * 注意:
- * 1、scala语法中没有++或--
- * 2、scala中for循环的格式与java有很大的区别
- * 3、scala中泛型使用的是[],java中使用的是<>
- */
-
-
- //创建一个数组
- val arr1: Array[String] = Array("java", "scala", "spark", "flink")
- //使用for循环遍历数组
- for (e <- arr1) {
- // println(e)
- }
- //使用while循环
- var i: Int = 0
- while (i < arr1.length) {
- // println(arr1(i))
- i += 1
- }
-
- //scala的for循环中to与unitl的区别
- //to:[]左闭右闭
- for (e <- 1 to 10) {
- // println("hello world") //10个
- }
- println("*" * 50)
- //until:[)左闭右开
- for (e <- 1 until 10) {
- // println("hello world") //9个
- }
java读写文件和scala读文件的方式(scala没有写数据的方式)
- import java.io.{BufferedReader, BufferedWriter, FileReader, FileWriter}
- import scala.io.{BufferedSource, Source}
-
- /**
- * 读取文件:
- * 1、java方式
- * 2、scala方式
- */
- object IO {
- def main(args: Array[String]): Unit = {
- //1、java方式读取,写入数据
- //字符缓冲流读取文件
- val br = new BufferedReader(new FileReader("D:\\projects\\IdeaProjects\\bigdata29-maven\\scala\\src\\main\\scala\\com\\shujia\\day01\\data\\she_hui_zhu_yi"))
- //字符缓冲流写入新文件(默认是覆盖)
- val bw = new BufferedWriter(new FileWriter("D:\\projects\\IdeaProjects\\bigdata29-maven\\scala\\src\\main\\scala\\com\\shujia\\day01\\data\\she_hui_zhu_yi_new"))
- var line: String = br.readLine()
- while (line != null) {
- bw.write(line)
- bw.newLine() //写一个换行符
- line = br.readLine()
- bw.flush()
- }
- //释放资源
- bw.close()
- br.close()
-
- //2、scala方式读取数据,scala没有写数据的方式
- val reder: BufferedSource = Source.fromFile("D:\\projects\\IdeaProjects\\bigdata29-maven\\scala\\src\\main\\scala\\com\\shujia\\day01\\data\\she_hui_zhu_yi_new")
- val lines: Iterator[String] = reder.getLines() //获取该文件的所有数据
- for(e<-lines){
- println(e)
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。