Scala简述、安装、简单使用
Scala概述
Scala是多范式编程语言也是jvm语言,是把函数式编程思想和面向对象编程思想结合的一种编程语言。
scala特点:
- 多范式 1)面向对象。 2)函数式编程
- 兼容java 1)类库调用 2)互操作
- 语法简洁 1)代码行短 2)类型推断 3)抽象控制
- 静态类型化 1)可检验 2)安全重构
- 支持并发控制 1)强计算能力 2)自定义其它控制结构
Scala安装
在idea中下载scala即可
Scala使用
1.pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>bigdata19-project</artifactId> <groupId>com.shujia</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>bigdata19-scala</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <scala.version>2.11.12</scala.version> </properties> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-compiler</artifactId> <version>${scala.version}</version> </dependency> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-reflect</artifactId> <version>${scala.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> </dependencies> <build> <plugins> <!-- Scala Compiler --> <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.2</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
2.不适用object建的类
package com import com.Demo01HelloWorldScala.main class Demo01HelloWorldScala { def print(): Unit = { println("Hello World") // 分号可以省略 } def wqy(): Unit = { val i:Int=10 if(i>=18){ println("成年人") }else if(i<0){ println("输入有误") }else{ println("未成年") } } // Scala中没有static关键字 // 这里的main方法相当于是一个普通的成员方法,需要通过类的对象进行调用 // def main(args: Array[String]): Unit = { // println("Hello World Class Scala") // 分号可以省略 // } } // object修饰的即是 类对象 // 由于Scala没有static,故这里采用object的方式实现 // 在object中的变量、方法等都默认是静态的 object Demo01HelloWorldScala { val i = 10 def staticPrint():Unit={ println("Static Hello World Scala") } // Scala代码的入口,相当于java中的psvm def main(args: Array[String]): Unit = { println("Hello World Object Scala") // 分号可以省略 // Demo01HelloWorldScala.main(args) // 静态方法可以通过类对象进行调用 new Demo01HelloWorldScala().print() // 成员方法需要通过类的对象进行调用 println(i) staticPrint() println("*".*(30)) new Demo01HelloWorldScala().wqy() } }
3.使用object创建类
1)变量:定义、命名规则
2)Scala中的基本数据类型
3)类型转换
4)算术运算
次方:使用math.pow(2,3)就是2的3次方
5)逻辑运算
6)选择结构 if - else
7)循环结构 while、for
8)字符串在Scala中的特殊处理(拼接)
9)读文件、写文件
10)连接jdbc
package com import java.io.{BufferedReader, FileReader, FileWriter} import java.sql.{Connection, DriverManager, ResultSet, Statement} import scala.io.{BufferedSource, Source} object Demo02ScalaBase { /** * 函数的声明: * def 关键字表示声明一个函数 * main 方法名称 * args 方法所需要的参数名 * Array[String] 方法所需要的参数类型 * Unit 方法的函数值 相当于void 表示没有 * {} 函数体 * */ def main(args: Array[String]): Unit = { // 单行注释 /* 多行注释 */ /** * 文档注释 */ // 1、变量:定义、命名规则 // 不可变的 val // 可变的 var // 分号省略了 类型省略了 val i = 10 // 定义了一个不可变的变量(常量) // i = 100 // 不能对i进行再赋值 因为i是不可变的 var j = 20 // 定义了一个可变的变量 j = 200 // 可以对变量j进行赋值 // 定义变量 完整的形式 // String 表示类型的声明 可以由右边所赋的值自动推断 故可以省略 但是推荐写全 val s: String = "abcdefg" println(s) // scala中的打印方法,实际是Java中的 System.out.println(s) // 2、Scala中的基本数据类型 val byte: Byte = 1 val short: Short = 1 val int: Int = 1 val long: Long = 1L val float: Float = 1.0F val double: Double = 1.00D val char: Char = 'c' val boolean: Boolean = false // AnyVal、AnyRef、Any // AnyVal 是所有值类型的超类 val int2: Int = 100 val v2: AnyVal = int2 println("v2:" + v2) val string: String = "abcdefg" // AnyRef 是所有引用类型的超类 val ss: AnyRef = string // Any 是任何类型的基类 // 3、类型转换 // Scala中的String就是Java中的String,但拥有更多的方法(通过隐式转换增加的) val str1: String = "1234" // 将String转成Int // Java的方式 val i1: Int = Integer.parseInt(str1) // 将String转成Double // Java的方式 val d: Double = java.lang.Double.parseDouble(str1) // Scala的方式 val int1: Int = str1.toInt val double1: Double = str1.toDouble // 4、算术运算 val m = 10 val n = 3 println(m + n) println(m - n) println(m * n) println(m / n) println(m % n) // 次方 println(Math.pow(2, 3)) // 5、逻辑运算 val b1: Boolean = true val b2: Boolean = false println(b1 & b2) println(b1 | b2) println(!b2) println(b1 ^ b2) println("*".*(30)) println("*" * 30) // 这里的 * 是一个方法 不是运算符 只不过是简写形式 println("java,scala" split "," toList) //上面是简写println("java,scala".split(",").toList) // 6、选择结构 if - else val age = -2 if (age >= 18) { println("成年") } else if (age < 0) { println("年龄有误") } else { println("未成年") } // 7、循环结构 while for // 1~100的和 var c = 1 var sum = 0 while (c <= 100) { sum += c c += 1 } println(sum) var c2 = 1 var sum2 = 0 do { sum2 += c2 c2 += 1 } while (c2 <= 100) println(sum2) // for循环 Scala中没有for i 但有 for each // Scala中的for循环Python主要用于遍历数据容器 val list=List(1,2,3,4,5,6) for (elem <- list){ println(elem) } // 1~100的和 用for循环实现 // 得到1~100的序列 var sum3 = 0 for(elem <- Range(1,101)){ sum3+=elem } println(sum3) var sum4 = 0 for (elem <- 1 to 100) { sum4 += elem } println(sum4) var sum5 = 0 for (elem <- 1 until 101) { sum5 += elem } println(sum5) // 8、字符串在Scala中的特殊处理 // 拼接字符串 val s1: String = "java" val s2: String = "scala" val s3: String = "python" val _s4: String = "." println(s1 + "," + s2 + "," + s3) val stringBuilder = new StringBuilder() stringBuilder.append(s1) stringBuilder.append(",") stringBuilder.append(s2) stringBuilder.append(",") stringBuilder.append(s3) println(stringBuilder) // scala的方式 // 如果变量名是以_下划线开头 或者 需要对变量进行方法的调用 则需要用花括号括起来 println(s"${s1.toUpperCase()},$s2,$s3,${_s4}") // SQL "select *" + "from xxxtable" + "where id = xxx" // 一般适用于在Spark SQL中写SQL """ |select * |from xxxtable |where id = xxx |""".stripMargin // 9、读文件、写文件 // Java的方式 val br: BufferedReader = new BufferedReader(new FileReader("bigdata19-scala/data/words.txt")) var line: String = br.readLine() while (line != null) { println(line.split(",").toList) line = br.readLine() } println("*" * 30) // Scala的方式 val bs: BufferedSource = Source.fromFile("bigdata19-scala/data/words.txt") val list1: List[String] = bs.getLines().toList for(elem <- list1){ println(elem.split(",").toList) } bs.close() println("*" * 30) // 面向函数编程的思想 list1.foreach(println) println("*" * 30) def splitAndToList(e:String):Unit={ println(e.split(",").toList) } // 结合链式调用 Source.fromFile("bigdata19-scala/data/words.txt").getLines().toList.foreach(println) //Source.fromFile("bigdata19-scala/data/words.txt").getLines().toList.foreach(splitAndToList) // 简写形式 Source.fromFile("bigdata19-scala/data/words.txt").getLines().toList.foreach(_.split(",").toList) // Scala没有特殊的写文件的方式 可以使用Java中的写文件的方式 // PrintWriter、FileWriter //写文件 val fileWriter = new FileWriter("bigdata19-scala\\data\\out.txt") fileWriter.write("java") fileWriter.write(",") fileWriter.write("look") fileWriter.write(",") fileWriter.write("sqoop") fileWriter.write(",") fileWriter.write("hello") fileWriter.close() // 10、JDBC Scala没有特殊的连接数据库的方式 主要使用Java的方式 // 建立连接 val conn: Connection = DriverManager.getConnection("jdbc:mysql://rm-bp1h7v927zia3t8iwho.mysql.rds.aliyuncs.com:3306/stu018?useSSL=false",
"shujia018", "123456") // 创建Statement val st: Statement = conn.createStatement() // 执行SQL语句 val rs: ResultSet = st.executeQuery( """ |select * |from student |where age>=24 |""".stripMargin) // 取数据 while (rs.next()) { val id: Int = rs.getInt("id") val name: String = rs.getString("name") println(s"$id,$name") } // 关闭连接 conn.close() } }