wqy1027

eeee

 

Scala简述、安装、简单使用

Scala概述 

Scala是多范式编程语言也是jvm语言,是把函数式编程思想和面向对象编程思想结合的一种编程语言。

scala特点:
  1. 多范式      1)面向对象。     2)函数式编程
  2. 兼容java         1)类库调用        2)互操作
  3. 语法简洁         1)代码行短        2)类型推断       3)抽象控制
  4. 静态类型化      1)可检验           2)安全重构
  5. 支持并发控制   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() } }

 

 

 

posted on 2022-10-19 21:05  不想写代码的小玉  阅读(101)  评论(0编辑  收藏  举报

导航