当前位置: 首页 > article >正文

Scala第一天

1、 Scala 学习

    

在bg中创建Scala模块,导入3个org.scala-lang依赖 和 1个Java Compiler(Java 编译的插件) 、1个Scala Compiler(Scala 编译的插件)

(1) java类是class定义的,scala是object定义的

    def : 定义方法的关键字

Unit : 无返回值,相当于java中的void

main方法需要放在object中才能运行  -- main名字不可以改,scala是根据名字识别main的

Array[String] :  参数类型(String类型的数组)

[] : 在scala代表泛型

{}  中是代码体

 object Demo01HelloWorld {

def main(args: Array[String]): Unit = {

//java的方式

System.out.println("java")

//scala的方式

// scala中很多代码都可以简写,底层和java是完全一样的

println("HelloWorld")

}

     }

(2) 一个scala文件经过编译后会出现两个class文件  :  xx$.class 、 xx.class

xx.class代码会调用xx$.class代码,其实scala代码本质上还是java代码,只是在java代码上做了一个封装。  

两者底层是一模一样的,只是代码语法不一样。

        java代码的.class文件可以反编译回.java代码, 而scala代码的.class文件只能反编译回.java代码。

2、变量

val :  常量  -- 不能再指向其它的对象   

    var :  变量

如果后面不会对变量进行修改则使用val

在java中使用final实现常量val

(1) scala 变量的类型可以自动推断,根据 "=" 右边的值,自动推断变量的类型

    val str = "scala"   // 可以自动推断出str是String类型     -- 可读性差

//也可以手动加上类型

val str: String = "scala"

(2) 类型转换 :

想转什么类型直接 .toxx 即可  (toInt、toDouble、toString ...)

注意转换的类型是否正确

3、方法(函数):

 java 中只能在类中定义方法

 scala 可以在任何位置定义方法

 方法 : 需要通过类的对象来调用的

 函数 : 在任何地方都能定义,且直接调用的

(1) 函数简写 :

1、方法无参数  -- 可以省略括号 ()

2、返回值类型可以自动推断, 根据返回值自动推断返回值类型

3、方法体中只有一行代码时  --  可以省略大括号 {}

4、最后一行可以省略 return , 默认最后一行作为返回值

(2) 可变参数 :   i: Int*

4、数组   -- 快速创建

val arr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)

5、遍历

    (1)增强for   

  for (a <- array) {

println(a)

  }

(2)通过下标索引

  var i = 0

  while (i < arr.length) {

      // scala通过 () 取下标获取元素

      val value: Int = arr(i)

      println(value)

  

      i += 1

    //    i++    // scala没有i++

   }

(3) foreach  ---  scala 特有的方法

  arr.foreach(println)

6、 IO流

    // 底层还是java的io流

    val bs: BufferedSource = Source.fromFile("data/students.txt")

    // 读取所有行,得到一个迭代器

    val lines: Iterator[String] = bs.getLines()

    // 增强for 遍历

    for (line <- lines) {

      println(line)

    }

    // scala特有的遍历方法

    lines.foreach(println)

7、异常  -- scala语言默认将异常已经抛出去了,不需要管

try {

   异常代码

} catch {

  

  // 匹配异常

  case e : 异常类 => 异常处理

  

} finally {

      println("都会执行")

    }

8、 JDBC

   

    (1) 需要导入依赖 :

    <!--  连接数据库依赖  -->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.1.27</version>

        </dependency>

 def main(args: Array[String]): Unit = {


    //1、加载驱动
    Class.forName("com.mysql.jdbc.Driver")

    //2、建立链接
    val con: Connection = DriverManager.getConnection("jdbc:mysql://192.168.129.201:3306/bigdata", "root", "123456")

    //3、写sql查数据
    val stat: PreparedStatement = con.prepareStatement("select * from students")

    //4、执行查询
    val resultSet: ResultSet = stat.executeQuery()

    //5、解析数据
    while (resultSet.next()) {
      //通过列名取数据
      val id: Long = resultSet.getLong("id")
      val name: String = resultSet.getString("name")
      val age: Long = resultSet.getLong("age")
      val gender: String = resultSet.getString("gender")
      val clazz: String = resultSet.getString("clazz")

      println(id + "\t" + name + "\t" + age + "\t" + gender + "\t" + clazz)
    }

    //关闭链接
    stat.close()
    con.close()

9、 class -- 类

 (1) scala中也是通过class定义类

(2) 在scala的类中有一个默认的构造函数 ,  {}包裹的就是默认构造函数

(3) scala 类中不需要写 get、set方法

(4) 重载构造函数  关键字 :  this 。  在重载构造函数的第一行需要先调用默认的构造函数 : this调用

(5) 重写 toString 方法  关键字 :  override

class Student(id: String, name: String) {

  // 定义属性  ,为了区分,一般命名: _属性名   定义时就赋值

  var _id: String = id

  var _name: String = name

  var _age: Int = _    // 给重载构造函数的参数age定义的,下划线的作用是占位符

  // 重载

  def this(id: String, name: String, age: Int) {

// 先调用默认构造函数

this(id, name)

// 通过 this 给成员变量 age 赋值

this._age = age

  }

  // 重写 toString

  override def toString: String = {

// scala 中的字符串拼接  s""

s"Student(" + _id + "\t" + _name + "\t" + _age + ")"}

}

10、 样例类    -- 直接一行代码就写完

     case class User(id:String, var name:String, age:Int = 20)

 // 在object中创建样例类对象 ,new 可以省略不写 (普通类不能省略)

     //  之所以可以不用new, 是因为底层其实就是apply原理

     val user = new User("001", "张三")

 样例类 :  帮助我们简化写代码的类

 scala在编译的过程中会自动的给样例类增加额外的属性、方法和构造函数

 样例类属性默认不支持修改,需要增加var才能修改

 当添加新的属性,只需要在样例类参数后面加上即可

 可以给参数设置默认值

11、 Apply   

   是一个特殊的类(类和对象绑定了,只有一个对象)

       object中的方法可以直接调用,不需要创建对象 , 相当于在方法上加了 static

   object Test {

def apply(): Unit = {

println("apply")

}

}

    // 1、 可以通过Test. 的方法调用 apply方法

Test.apply()

// 2、 直接通过Test() 调用 apply方法

Test()


http://www.kler.cn/news/319860.html

相关文章:

  • Tomcat may not be running
  • Facebook个人账户被停用是什么原因?如何解决?
  • 剖析:基于 RDMA 的多机数据分发和接收场景
  • 基于Java的宠物之家小程序 宠物服务小程序【源码+调试】
  • sort 命令:文本排序
  • 计算机的错误计算(一百零四)
  • 通过两个类计算一个长方形的周长和面积
  • MySql语言操作数据库---增删改查数据库,表,数据
  • 速盾:AI能为高防cdn带来什么?
  • 828华为云征文|华为云Flexus云服务器X实例Windows系统部署一键短视频生成AI工具moneyprinter
  • 专题八_链表_算法专题详细总结
  • 一带一路区块链赛项样题解析(中)
  • C++——求3*3矩阵对角元素之和。
  • 第164天:应急响应-挖矿脚本检测指南_威胁情报_样本定性_文件清除_入口修复
  • ubuntu系统插入u盘不识别
  • 从一个Vite Vue项目开始 - 整体设计
  • 软件设计模式——工厂模式
  • 招行科技笔试——合并区间,移动零
  • 加入AI新引擎,华为数据中台全面智能化升级
  • Java 发布jar包到maven中央仓库(2024年9月保姆级教程)
  • PPTP、L2TP、SSTP协议和HTTP、SOCKS5代理:全面解析与对比
  • Kafka-Manager安装及操作
  • Linux文件IO-基础知识了解及文件描述符
  • 模拟自然的本质:与IBM量子计算研究的问答
  • 函数组件、Hooks和类组件区别
  • 使用php生成图片
  • 第 1 章:Vue 核心
  • Spring Boot 入门指南
  • C++ 字符串中的第一个唯一字符 - 力扣(LeetCode)
  • linux固定串口别名