学习大数据的第15天——了解scala的第一天(scala概述、标识符、变量常量的定义、字符串操作、键盘录入、文件写入和读出以及数据类型)

学习大数据的第15天——今天好奇scala语言,就花了一天去了解了一点,因为今天是自习,把明天上课要讲的对象预习了,然后就去看scala了哈哈哈

那我们今天就总结一下今天学习的scala知识点

什么是Scala

以我的了解来说,就是比java更加的体现出面向对象,众所周知,Java是一门面向对象的编程,但是Java中有些并没有真正意义上的面向对象,正是所谓"万物皆可为对象,想new几个是几个"嘿嘿,而scala还有一些函数式编程的概念
Scala概述
1.1、scala编译结果的反编译深入了解
使用 java HelloScala
无法编译,因为java中没有scala中的类库
java.lang.NoClassDefFoundError
使用反编译器发现,反编译后的scala文件实现了真正面向对象(万物皆对象) HelloScala类静态方法用对象来进行表示(单例设计模式)HelloScala认为是伴生对象的伴生类,HelloScala$为伴生类的伴生对象

如何使用java来编译scala文件呢?
java -cp %SCALA_HOME/lib/scala-library.jar; HelloScala
输入:C:\Users\stu\Desktop>java -cp %SCALA_HOME%/lib/scala-library.jar; HelloScala
输出Hello scala

首先学习一个语言要有准备工作,先学习怎么配置scala环境,在idea安装scala插件以及类库资源包(方便以后学习类库中的类方法带来方便)

配置环境其实跟java差不多,可以参考一下的视频进行安装:
点击观看尚硅谷视频(scala环境配置)

类库资源包的下载链接也给你们吧(我下的是2.12.11版本的):

类库资源包链接

下完之后再idea内配置一下就行

编写第一个scala文件(当然还是我们的老朋友HelloWorld)

//编写含有静态变量的方法
class Student(name: String, age: Int) {
  def PrintInfo(): Unit = {
    println("学生姓名:" + name + ",学生年龄:" + age + ",院校:" + Student.school)
  }

  //重写父类的toString()方法
  override def toString: String = {
    val str: String = "学生姓名:" + name + ",学生年龄:" + age + ",院校:" + Student.school
    return str
  }
}

//Student的伴生对象
object Student {
  //  val school = "shujia"
  val school: String = "数加学院"
}


/*
   object: 关键字,声明单例对象(伴生对象)
 */
object HelloWorld {
  /*
      object功能:scala删除static静态关键字的要想实现静态方法,定义一个金泰的变量时
      再java阿红是根据 类名.变量名 来实现的,但是这不能体现面对对象的思想
      所以scala直接删除了static关键字,用object来替代static

      main方法从外部可以直接调用执行的方法
      语句定义格式:
        def 方法名称(参数名称: 参数类型): 返回值类型 = {方法体}
   */
  def main(args: Array[String]): Unit = {
    println("hello world")
    //定义一个Student对象
    val stu = new Student("姚龙", 18)
    stu.PrintInfo()
    println(stu.toString)
  }
}

标识符

/*
  标识符:
    1、以字符或者下划线开头,后接字母、数字、下划线
    2、以操作数开头,且只包含操作符(+-* /#!)
    3、用反引号'.....'包括的任意字符串,即便是Scala关键字也可以
      与java中没有的:
        (package。。。。。)object、trait、with、
        (修饰符)sealed、implicit、
        (条件判断循环语句。。。。)match(模式匹配)、yield
        (声明方法、变量)def、val、var

 */
object IdentifierDemo1 {
  def main(agrs: Array[String]): Unit = {
    //1、以字符或者下划线开头,后接字母、数字、下划线
    val hello: String = ""
    var Hello123: String = ""
    val _abc = 123

    //错误:not found: value -
    //    val h-b = ""
    //    val h-b = ""
    //    val 123abc = 123

//    以操作数开头,且只包含操作符(+-* /#!)
## 标题
    val *# = "hello"
    println(*#)
    //3、用反引号'.....'包括的任意字符串,即便是Scala关键字也可以
    //反引号  `...`

//    var if = "if"

    var `if` = "if"
    println(`if`)

  }
}

变量和常量的定义

/*
  变量和常量的定义:

    回顾java中的变量和常量:
      变量类型 变量名称 = 初始值   int a = 10;
      final 变量类型 变量名称 = 初始值    final int a = 20;

    在scala中变量和常量的关系是平等的:
      var 变量名称[: 变量类型] = 初始值    var a: Int = 20
      val 变量名称[: 变量类型] = 初始值    val a: Int = 10
    注意能用常量的地方不要用变量,以及scala中可以对数据类型进行自动的识别数据类型
 */
class Student2(name: String, var age: Int) {
  def printIofo(): Unit = {
    println("学生姓名:" + name + ",学生年龄:" + age)
  }
}

object VariableDemo1 {
  def main(args: Array[String]): Unit = {
    //定义一个变量
    var num: Int = 20
    println(num)
    //定义一个常量
    val num1: Int = 10;
    println(num1)

    //    (1)声明变量时,可以不屑数据类型,编译器可以自动推导,即类型推导
    var a = 10
    val b = 20
    //    (2)类型确认后就不能更改,说明scala是一门强数据类型语言
    //编译错误,类型不匹配
    //    a = "你好"
    //    (3)变量声明时,必须要有初始值
    //    var c: Int
    //    (4)用var修饰的变量可以更改,用val修饰的变量不能更改
    a = 21
    //被val修饰的变量为常量,不能被修改
    //    b = 21

    val stu = new Student2("姚龙", 18)
    //    stu = new Student2("尚志恒",20)
    //    stu = null
    stu.printIofo()

    stu.age = 10
    stu.printIofo()

    //    var stu = new Student2("姚龙",18)
    //    stu = new Student2("尚志恒",20)
  }
}

字符串操作

/*
  1、字符串通过+号链接
  2、printf用法:字符串,通过%传值
  3、字符串模板(插值字符串);通过%获取变量值
 */
object StringDemo {
  def main(args: Array[String]): Unit = {
    val name = "姚龙"
    val age = 18

    println(name + "在数加学习,今年" + age)

    //*用于多个字符串赋值多次并且拼接
    println(name * 3)

    //字符串的格式化输出只能用printf   不能用println
    printf("%s在数加学习,今年%d", name, age)
    println()

    //字符串模板(字符串插值)
    //模板字符串: s""
    println(s"${age}岁的${name}在数加学习")

    val num: Double = 2.3456
    println(s"The num is ${num}")

    //如果不想要小数点后面太多位:
    //则可以使用   f""字符模板
    println(f"The num is ${num}%2.2f")

    //raw 除了变量,其他的在""中的元素直接输出,不管其是什么意思
    println(raw"The num is ${num}%2.2f")

    //三引号表示字符串,保持多行字符串的原格式输出
    val sql = s"""
       |select *
       |from
       |student
       |where
       |  name = ${name}
       |and
       |  age > ${age}
       |""".stripMargin
    println(sql)

  }

}

键盘录入

import scala.io.StdIn
/*
  java   Scanner的用法
  在scala中,我们引用StdIn来调用,import scala.io.StdIn
  StdIn.readLine()   输入的是字符串
  StdIn.readInt()    输入的是Int型
 */
object ScannerDemo1 {
  def main(args: Array[String]): Unit = {
    println("请输入你的大名:")
    val name = StdIn.readLine()
    println("请输入你的年龄:")
    val age = StdIn.readInt()

    println(s"你的大名是${name},你的年龄是${age}")
  }
}

文件的写入和读出

import java.io.{File, PrintWriter}
import scala.io.Source

object FileIODemo1 {
  def main(args: Array[String]): Unit = {
    //1、从文件中读取数据
    //Source.fromFile文件的路径 将文件读出来
    //再通过foreach将文件打印出来
    //可以直接copy绝对路径,也可以编写相对路径,相对路径从src开始就行了
    Source.fromFile("src/main/resources/FileIoDemo1.txt").foreach(print)

    //2、将数据写入文件  java中拥有可以直接写入文件的方法,直接调用java的方法即可
    val writer = new PrintWriter(new File("src/main/resources/output.txt"))
    writer.write("hello scala from java writer")
    writer.close()
  }
}

数据类型

数据类型:
1、scala中一切数据都是对象,都是Any的子类
2、Scala中数据类型分为两大类:
数值类型(AnyVal)、引用类型(AnyRef),不管是值类型还是引用类型都是对象
3、Scala数据类型仍然遵守,低精度的值类型向高精度的值类型自动转换(隐式转换)
4、Scala中的StringOps是对Java中的String增强
5、Unit:对应Java中的void,用于方法返回值的位置,表示方法没有返回值,Unit是一个数据类型,只有一个对象
就是().Void不是数据类型,只是一个关键字
6、Null是一个类型,只有一个对象就是null,它是所有引用类型(AnyRef)的子类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值