Scala学习3——注释和变量类型

摘要:
静态类型。类型在给定或通过推断确定后不能修改。变量和常量在声明时必须具有初始值。变量是可变的,常量是不可变的。不;作为语句的结尾,scala编译器会自动识别语句的结尾。)任何包含在后引号中的字符串,甚至Scala关键字(39)都可以//以字母或下划线开头,后跟字母、数字和下划线valhello:string=“”varHello123=“”val_Abc=123//valh-b=“”//val123abc=234//它以运算符开头,只包含运算符(+-*/#!
1.注释

Scala注释和java完全一致

  • // 单行
  • /* */ 多行
  • /** */ 文档,方法或者类前面,便于scaladoc生成文档。
  //单行注释

  /*
  多行注释
   */

  /*
  * 文档注释
  *
  *
  * */
2.代码规范
  • 使用tab操作实现缩进,默认整体向右移动;shift+tab整体左移
  • 使用ctrl+alt+L进行格式化
  • 运算符两边习惯性各加一个空格,例如:2 + 4 * 5
  • 一行最多不超过80个字符,超过可以换行展示
3.变量和常量

常量:在程序执行的过程中,其值不会改变的变量

1)基本语法

var 变量名 [:变量类型] = 初始值  var i : Int = 10

val 常量名 [:常量类型] = 初始值  val j : Int = 20

注意:能用常量的地方不用变量

  • 声明变量时,类型可以省略,编译器会自动推导。
  • 静态类型,类型经过给定或推导确定后就不能修改。
  • 变量和常量声明时,必须有初始值。
  • 变量可变,常量不可变。
  • 引用类型常量,不能改变常量指向的对象,可以改变对象的字段。
  • 不以;作为语句结尾,scala编译器自动识别语句结尾。

val自身不可变,但它其中的属性可以改变

class Student(name:String, var age:Int) {
  def printInfo() : Unit = {
    println(name + " " + age + " " + Student.school)
  }
}
    val bob = new Student("bob",23)
    bob.age = 24
    bob.printInfo()
//    bob = new Student("bob",24)

Scala学习3——注释和变量类型第1张

2)练习代码

package chapter02

import chapter01.Student

object Test02_Variable {
  def main(args: Array[String]): Unit = {
    //声明一个变量的通用语法
    var a : Int = 10

    //(1)声明变量时,类型可以省略,编译器自动推导,即类型推导
    var a1 = 10
    val b1 = 23

    //(2)类型确定后,就不行修改,说明Scala是强数据类型的语言,和js等弱数据类型语言是有区别的
    val a2 = 15
//    a2 = "hello"

    //(3)变量声明时,必须要有初始值
//    var a3 : Int

    //(4)在声明|定义一个变量时,可以使用var或者val来修饰,var修饰的变量可以改变,val修饰的变量不可改
    a1 = 12
//    b1 = 30

    var alice = new Student("alice",20)
    alice = new Student("Alice",20)
    alice = null
    val bob = new Student("bob",23)
    bob.age = 24
    bob.printInfo()
//    bob = new Student("bob",24)
  }
}
4.标识符的命名规范

1)规则

Scala中的标识符声明,基本和java一致但在细节上有所变化,有以下三种规则:

(1)以字母或者下划线开头,后接字母、数字、下划线,和Java一样

(2)以操作符开头,且只包含操作符(+ - * / # !)

(3)用反引号`......`包括的任意字符串,即使是Scala关键字(39个)也可以

    //(1)以字母或者下划线开头,后街字母、数字、下划线
    val hello : String = ""
    var Hello123 = ""
    val _abc = 123

//    val h-b = ""
//    val 123abc = 234

    //(2)以操作符开头,且只包含操作符( + - * / # ! 等)
    val -+*% = "hello"
    println(-+*%)

    //(3)用反引号`......`包括的任意字符串,即使是Scala关键字(39个)也可以
    val `if` = "if"
    println(`if`)

Scala学习3——注释和变量类型第2张

2)Scala关键字

  • package import class obejct trait extends with type for
  • private protected abstract sealed final implicit lazy override
  • try catch finlly throw
  • if else match case do while for return yield
  • def var val
  • this super
  • new
  • true false null
  • 其中Java没有的关键字:object trait with implicit match yield def val var
5.字符串输出

1)基本语法

(1)字符串,通过+号连接

(2)printf用法:字符串,通过%传值,类似C语言

(3)字符串模板(插值字符串):通过$获取变量值

2)练习代码

package chapter02

import java.util.function.DoubleBinaryOperator

object Test04_String {
  def main(args: Array[String]): Unit = {
    //(1)字符串,通过+号连接
    val name : String = "alice"
    val age : Int = 18
    println(age + "岁的" + name)

    // *用于将一个字符串复制多次并拼接
    println(name * 3)

    //(2)printf用法:字符串,通过%传值
    printf("%d岁的%s", age, name)
    println()

    //(3)字符串模板(插值字符串):通过$获取变量值
    println(s"${age}岁的${name}")


    val num:Double = 2.3456
    println(f"The num is ${num}%2.2f")   //f""格式化模板字符串
    println(raw"The num is ${num}%2.2f")    //raw""原始输出

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

Scala学习3——注释和变量类型第3张

6.键盘输入

在编程中,需要接收用户输入的数据,就可以用键盘输入语句来获取

1)基本语法

StdIn.readLine()、StdIn.readShort()、StdIn.readDouble()

 2)练习代码

package chapter02

import scala.io.StdIn

object Test05_StdIn {
  def main(args: Array[String]): Unit = {
    //输入信息
    println("请输入您的姓名:")
    val name: String = StdIn.readLine()
    println("请输入您的年龄:")
    val age: Int = StdIn.readInt()

    //控制台打印输出
    println(s"欢迎${age}岁的${name}")
  }
}

 Scala学习3——注释和变量类型第4张

7.文件的输入输出
package chapter02

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

object Test06_FileIO {
  def main(args: Array[String]): Unit = {
    //1.从文件中读取数据
    Source.fromFile("src/main/resources/test.txt").foreach(print)

    //2.将数据写入文件
    val writer = new PrintWriter(new File("src/main/resources/output.txt"))
    writer.write("hello scala from java")
    writer.close()
  }
}

Scala学习3——注释和变量类型第5张

 Scala学习3——注释和变量类型第6张

8.数据类型

1)数据类型

  • java基本类型char byte short int long float double boolean
  • java基本类型对应包装类型:Charater Byte Short Integer Long Float Double Boolean
  • java中不是纯粹的面向对象。
  • Scala吸取了这一点,所有数据都是对象,都是Any的子类。
  • Any有两个子类:AnyVal值类型 AnyRef引用类型。
  • 数值类型都是AnyVal子类,和Java数值包装类型都一样,只有整数在scala中是Int、字符是Char有点区别。
  • StringOps是java中String类增强,AnyVal子类。
  • Unit对应java中的voidAnyVal子类。用于方法返回值的位置,表示方法无返回值,Unit是一个类型,只有一个单例的对象,转成字符串打印出来为()
  • Void不是数据类型,只是一个关键字。
  • Null是一个类型,只有一个单例对象null就是空引用,所有引用类型AnyRef的子类,这个类型主要用途是与其他JVM语言互操作,几乎不在Scala代码中使用。
  • Nothing所有类型的子类型,也称为底部类型。它常见的用途是发出终止信号,例如抛出异常、程序退出或无限循环。

Scala学习3——注释和变量类型第7张

2)整数类型

都是有符号整数,标准补码表示

  • Byte 1字节
  • Short 2字节
  • Int 4字节
  • Long 8字节
  • 整数赋初值超出表示范围报错。
  • 自动类型推断,整数字面值默认类型Int,长整型字面值必须加L后缀表示。
  • 直接向下转换会失败,需要使用强制类型转换,(a + 10).toByte

3)浮点类型

  • Float IEEE 754 32位浮点数
  • Double IEEE 754 64位浮点数
  • 字面值默认Double

4)字符类型

  • 同java的Character,2字节,UTF-16编码的字符。
  • 字符常量:''
  • 类型Char
  • 转义:\t \n \r \\ \" \'etc

5)布尔类型

  布尔类型:true false

6)空类型

  • Unit 空值,只有一个实例,用于函数返回值。
  • Null 空引用,只有一个实例null
  • Nothing 既没有值也没有引用,什么也没有,只知道空但不确定是值空还是引用类型空。确定没有正常的返回值,可以用Nothing来指定返回值类型。好像意思是抛异常时返回Nothing,不是特别懂。

Unit

    //空值Unit
    def m1(): Unit = {
      println("函数m1被调用执行!")
    }

    val a: Unit = m1()
    println("a: " + a)

Scala学习3——注释和变量类型第8张

 可以看到Unit空指就是一个括号

Null

    //空引用Null
//    val n: Int = null   //error
    var student: Student = new Student("alice",20)
    student = null
    println(student)

Scala学习3——注释和变量类型第9张

 不能直接定义为Null类型

可以空引用,null

Nothing

    //Nothing
    def m2(n: Int): Nothing = {
      throw new NullPointerException
    }

    val b = m2(0)
    println(b)

Scala学习3——注释和变量类型第10张

明天继续学习

免责声明:文章转载自《Scala学习3——注释和变量类型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LoRa---她的芯片和她的几种工作模式基于UVM的verilog验证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++预定义宏

C/C++宏体中出现的#,#@,##: - #的功能是将其后面的宏参数进行字符串化操作(stringfication),就是对它所引用的宏变量通过替换后在其左右各加上一个双引号 -##被称为连接符(concatenator),用来将两个token连接为一个token。注意这里连接的对象是token就行,而不一定是宏的变量。 举例: Caffe中Layer的...

Delphi常用字符串函数

Delphi常用字符串函数 一、字符转换函数1、ord(input[i])返回字符表达式 input 左端起第 I 字符的ASCII 码值。2、CHAR()将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。3、LOWER()和UPPER()LOWER()将字符串全部转为小写;UPPER()将字符串...

Nodejs与ES6系列1:变量声明

1、声明变量 在JS当中一个变量的作用域(scope)是程序中定义这个变量的区域。变量分为两类,全局(global)的和局部的。其中全局变量的作用域是全局性的,即在JavaScript代码中,它处处都有定义。而在函数之内声明的变量,就只在函数体内部有定义。它们是局部变量,作用域是局部性的。函数的参数也是局部变量,它们只在函数体内部有定义。 1.1 var变...

Maven环境变量配置

环境变量: 变量名:M2_HOME 变量值:D:apache-maven-3.2.2 变量名:Path 变量值:%M2_HOME%in; 检查:win + R,输入cmd 输入mvn -v,出现如下信息,则成功 C:UsersYJ>mvn -vApache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb659...

PL/SQL developer(绿色版)安装及配置

转自:https://blog.csdn.net/qq_35525955/article/details/81067362PL/SQL developer(绿色版)安装及配置  1.PL/SQL Developer下载地址:百度网盘; 2.tsname.ora配置(在解压路径下instantclient_11_2 nsnames.ora): orcl =...

R语言:变量名称和字符串的转换

R语言:变量名称和字符串的转换 2014-06-23 14:45:27         在R语言中,经常会遇到变量名称和字符串相互转换的问题。比如说,进行1000次循环运算,并将运算结果存储在1000个变量中,如x_1, x_2, ... , x_1000。这时候可以使用assign()函数,示例如下:> a错误: 找不到对象'a'> as...