Scala 变量的注意事项|学习笔记

简介: 快速学习 Scala 变量的注意事项。

开发者学堂课程【Scala 核心编程-基础:Scala 变量的注意事项】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8890


Scala 变量的注意事项

 

内容介绍

一、变量声明基本语法

二、注意事项

 

一、变量声明基本语法

var / val 变量名[:变量类型]=变量值  //变量类型可以写也可以不写

 

二、注意事项

1、声明变量时,类型可以省略(编译器自动推导,即类型推导)

在 JDK8.0的时候就加入了,JDK8.0也支持类型推导,是因为 Scala 加进去后导致 JDK8.0有这个功能。

比如:

package com.atguigu.chaptero1.vars

object VarDemoo2 {

def main(args : Array[string]): unit = {

//类型推导

var num = 10  //这时 num 就是 Int 类型

证明 num 是 int 类型有两个方法:

(1)可以利用 idea 的提示来证明

(2)使用 isInstanceof[Int]判断

println( num.isInstanceof[Int])

在 Java 里面学过 isInstanceof,判断一个对象是不是一个类的类型

输出显示:

D: \programljdk8\bin\java ..

true

Process finished with exit code o

输出了一个 true,说明是 Int。

2、类型确定后,就不能修改,说明 Scala 是强数据类型语言.

比如在上方基础上再写入 num=1.1 是不行的,因为一旦上方num类型推导以后他就是 Int,不能再改了,可以修改值,但不能修改类型。

有些语言是可以的,给它一个10,运行时它是 Int,后面再给1.1就变成了 double 类型了。

所以有些人学完静态编程语言,然后学动态会觉得非常不习惯。

Scala 是强数据类型语言也叫静态语言,因为编译器编译的时候在底层已经把类型写进去了。

3、在声明/定义一个变量时,可以使用 var 或者 val 来修饰,var 修饰的变量可改变,

val 修饰的变量不可改[案例].

(1)定义一个变量:var age=10

然后对age值发生修改:age=30 //这里是可以的

说明变量如果用 var 修饰时,age 是可以改变的。

(2)定义一个变量:val num2=30

对 num2值进行修改:num2=40 //这时就会报错

说明 val 修饰的变量是不可以改变的。

设计 var 和 val 这两种可变和不可变是因为:

在通常情况下得到一个对象,往往只是读这个对象的内容,或者修改这个对象的属性,所以在实际编程中,更多的需求是获取/创建一个对象后,读取该对象的属性,或者是修改对象的属性值,但很少去改变这个对象本身。

比如有一个对象是 dog 然后 new 一个 dog:dog=new dog()这个 dog 里面可能有一个 age 可以去修改:

dog.age=10,这样是可以的,但是很少有 dog=new dog()分配一个新 dog。

这时,就可以使用 val,因为 val 没有线程安全问题,因此效率高。Scala 设计者推荐使用 val。

如果对象需要变化,则使用 var,比如:

Class Dog {

//声明一个 age 属性,给了一个默认值_

var age : Int =0 //

//声明名字

var name: string = “” //

}

比如 val dog=new dog    //这个 dog 是用 val 修饰的,所以不能修改

这时再给它一个新的 dog:dog=new dog 这样就报错了,因为这个 dog 已经指向了一只狗现在又指向另外一个,这样就会报错:reassignment to val 不能再分配了。

但是属性是 var,可以改,所以:

Dog.age=90

Dog.name=“小花“    //这两个都可以改变

这样既可以让属性改变,同时还约束对象本身不改变,对象本身不改变的话编译器就可以在底层进行优化。

如果将 var name: string = “”改为 val name: string = “” 就会马上报错。

4、val 修饰的变量在编译后,等同于加上 final,通过反编译看下底层代码。

Final 表示最后、最终的意思,就代表不可改变。

举例:

package com.atguigu.chaptero1.vars

object VarDemo03 {

var name = "hello"

val age = 100

def main(args: Array[string]): unit = {

println("ok")

编译一下,编译完成后看底层反编译的代码,运行输出:

D: \programljdk8\binljava…

ok

Process finished with exit code o

看一下 var 和 val 有什么不同:打开反编译工具显示:

image.png

现在这里写了 VarDemo03对应生成了两个 class 文件,如果只是关心这个 VarDemo03应该看的是上面这个 class文件还是下面这个?

看上面这个,因为下面这个其实是进行了一个包装,相当于一个半生类,因为现在没有写半生类,所以生成了一个空的,所以 object 对应的类就是上边那个。

点击打开显示:

public final class varDemoo3$

{

public static finalMODULE$;

private string name;

private final int age:

这是对应的底层反编译代码。

相关文章
|
1月前
|
存储 Java 编译器
Scala 变量
Scala 变量
30 3
|
7月前
|
IDE Java 编译器
scala的两种变量类型 var 和 val
scala的两种变量类型 var 和 val
160 2
scala的两种变量类型 var 和 val
|
7月前
|
Java 编译器 API
Scala学习--day01变量与数据类型、运算符
Scala学习--day01变量与数据类型、运算符
|
7月前
|
存储 Scala
Scala变量和数据类型
Scala变量和数据类型
60 1
|
7月前
|
Java Shell API
Scala入门【变量和数据类型】
Scala入门【变量和数据类型】
|
分布式计算 Java 大数据
|
Java 编译器 Shell
scala中的变量、方法、函数
Scala是一门多范式的编程语言,一种类似java的编程语言,是可扩展语言,并集成面向对象编程和函数式编程的各种特性的混合功能编程语言。 Scala被编译后在Java虚拟机上运行。
214 0
scala中的变量、方法、函数
|
分布式计算 Java 编译器
Scala快速入门-1-声明变量
因为Spark是由Scala开发的,所以在开发Spark应用程序之前要对Scala语言学习。虽然Spark也支持Java、Python语言,但是作为一名Java程序猿,还是决定要学习Scala哈。 Scala是运行在JVM上一门语言。开发效率非常高、语法丰富简洁,三两行Scala代码能搞定Java要写的一大坨代码。 Scala的语法糖太甜~~
|
Java Scala 开发者
Scala 下界介绍和应用实例 | 学习笔记
快速学习 Scala 下界介绍和应用实例
Scala 下界介绍和应用实例 | 学习笔记
|
Scala 开发者
Scala 上界介绍和应用实例2 | 学习笔记
快速学习Scala上界介绍和应用实例2
Scala 上界介绍和应用实例2 | 学习笔记