scala中cannot resolve symbol println_Scala 变量和数据类型

276ba475196afeee48782bf87bbf2407.png

变量和数据类型

2.1 注释

用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性。

注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。

1)基本语法

(1)单行注释://

(2)多行注释:/* */

(3)文档注释:/**

*

*/

2)案例实操

package com.atguigu.chapter03

object TestNotes {

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

//(1)单行注释://

println("dalang")

//(2)多行注释:/* */

/*

println("dalang")

println("jinlian")

*/

//(3)文档注释:/**

//*

//*/

/**

* println("qingge")

println("qingge")

println("qingge")

*/

}

}

3) 代码规范

(1)使用一次tab操作,实现缩进,默认整体向右边移动,用shift+tab整体向左移

(2)或者使用ctrl + alt + L来进行格式化

(3)运算符两边习惯性各加一个空格。比如:2 + 4 * 5。

(4)一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅

2.2 标识符的命名规范

Scala对各种变量、方法、函数等命名时使用的字符序列称为标识符。即:凡是自己可以起名字的地方都叫标识符。

1)命名规则

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

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

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

(3)第一种和第二种拼接,第一种在前,二者以下划线分隔

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

2)案例实操

hello // ok

hello12 // ok

1hello // error

h-b // error

x h // error

h_4 // ok

_ab // ok

Int // ok , 因为在Scala Int是预定义的字符,不推荐

Float // ok

_ // error ,单独一个下划线不可以作为标识符

Abc // ok

+*- // ok

+a // error

$a // ok , 但不要让scala的标识符出现$,因为scala编译器会使用$

3)Scala关键字(39个)

• package, import, class, object, trait, extends, with, type, for

• private, protected, abstract, sealed, final, implicit, lazy, override

• try, catch, finally, throw

• if, else, match, case, do, while, for, return, yield

• def, val, var

• this, super

• new

• true, false, null

2.3 变量

1)基本语法

var | val 变量名 [: 变量类型] = 变量值

说明:在Scala中声明一个变量时,可以不指定类型,编译器根据值确定

2)案例实操

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

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

(3)变量声明时,需要初始值

package com.atguigu.chapter03

object TestVar {

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

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

var age = 18

age = 30

//(2)类型确定后,就不能修改,说明Scala是强数据类型语言。

// age = "tom" // 错误

//(3)变量声明时,需要初始值

// var name //错误

}

}

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

object TestVar {

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

var num1 = 10 // 可变

val num2 = 20 // 不可变

num1 = 30 // 正确

//num2 = 100 //错误,因为num2是val修饰的

}

}

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

object TestVar {

var num1 = 10 // 可变

val num2 = 20 // 不可变

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

num1 = 30 // 正确

//num2 = 100 //错误,因为num2是val修饰的

}

}

通过反编译软件,得到对应的底层的.class是

public final class TestVar$

{

public static final MODULE$;

private int num1;

private final int num2;

(6)var修饰的对象引用可以改变,val修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)

object TestVar {

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

// p1是var修饰的,p1的属性可以变,而且p1本身也可以变

var p1 = new Person()

p1.name = "dalian"

p1 = null

// p2是val修饰的,则p2的属性可以变,但是p2本身不可变(即p2的内存地址不能变)

val p2 = new Person()

p2.name="xiaolian"

// p2 = null // 错误的,因为p2是val修饰的

}

}

class Person{

var name : String = "jinlian"

}

2.4 字符串输出

1)基本语法

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

(2)printf用法:字符串,通过%传值。

(3)字符串,通过$引用

2)案例实操

package com.atguigu.chapter02

object TestCharType {

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

var name: String = "jinlian"

var age: Int = 18

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

println(name + " " + age)

//(2)printf用法字符串,通过%传值。

printf("name=%s age=%dn", name, age)

//(3)字符串,通过$引用

println(s"name=$name age=$age")

println(

s"""

name=${name}

age=${age}

"""

)

}

}

2.5 键盘输入

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

1)基本语法

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

2)案例实操

需求:可以从控制台接收用户信息,【姓名,年龄,薪水】。

import scala.io.StdIn

object TestInput {

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

// 1 输入姓名

println("input name:")

var name = StdIn.readLine()

// 2 输入年龄

println("input age:")

var age = StdIn.readShort()

// 3 输入薪水

println("input sal:")

var sal = StdIn.readDouble()

// 4 打印

println("name=" + name)

println("age=" + age)

println("sal=" + sal)

}

}

2.6 数据类型关系

34bfb3920c0492819f245ddffd56ee28.png

Scala数据类型关系总结

1)Scala中一切数据都是对象,都是Any的子类。

2)Scala中数据类型分为两大类:数值类型(AnyVal)、引用类型(AnyRef),不管是值类型还是引用类型都是对象。

3)Scala数据类型仍然遵守,低精度的值类型向高精度值类型,自动转换(隐式转换)

4) Scala特殊的类型之Null,它只有一个实例就是Null,它是所有引用类型(AnyRef)的子类。

5)Scala特殊类型之Nothing,是所有数据类型的子类,主要在一个函数没有正常返回值使用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。

2.7 整数类型(Byte、Short、Int、Long)

Scala的整数类型就是用于存放整数值的,比如12,30,3456等等。

1)整型分类

数据类型

描述

Byte [1]

8位有符号补码整数。数值区间为 -128 到 127

Short [2]

16位有符号补码整数。数值区间为 -32768 到 32767

Int [4]

32位有符号补码整数。数值区间为 -2147483648 到 2147483647

Long [8]

64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 = 2的(64-1)次方-1

2)案例实操

(1)Scala各整数类型有固定的表数范围和字段长度,不受具体操作的影响,以保证Scala程序的可移植性。

object TestDataType {

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

// 正确

var n1:Byte = 127

var n2:Byte = -128

// 错误

// var n3:Byte = 128

// var n4:Byte = -129

}

}

(2)Scala的整型,默认为Int型,声明Long型,须后加‘l’或‘L’

object TestDataType {

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

var n5 = 10

println(n5)

var n6 = 9223372036854775807L

println(n6)

}

}

(3)Scala程序中变量常声明为Int型,除非不足以表示大数,才使用Long

2.8 浮点类型(Float、Double)

Scala的浮点类型可以表示一个小数,比如123.4f,7.8,0.12等等。

1)浮点型分类

数据类型

描述

Float [4]

32 位, IEEE 754标准的单精度浮点数

Double [8]

64 位 IEEE 754标准的双精度浮点数

2)案例实操

(1)Scala的浮点型常量默认为Double型,声明Float型常量,须后加‘f’或‘F’。

object TestDataType {

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

// 建议,在开发中需要高精度小数时,请选择Double

var n7 = 2.2345678912f

var n8 = 2.2345678912

println("n7=" + n7)

println("n8=" + n8)

}

}

//运行的结果

n7=2.2345679

n8=2.2345678912

2.9 字符类型(Char)

1)基本说明

字符类型可以表示单个字符,字符类型是Char,16位无符号Unicode字符(2个字节),区间值为U+0000到U+FFFF。

2)案例实操

(1)字符常量是用单引号 ' ' 括起来的单个字符。

(2)可以直接给Char赋一个整数,然后输出时,会按照对应的unicode字符输出

object TestCharType {

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

//(1)字符常量是用单引号 ' ' 括起来的单个字符。

var c1: Char = 'a'

println("c1=" + c1)

//(2)可以直接给Char赋一个整数,然后输出时,会按照对应的unicode字符输出

println("c1码值=" + c1.toInt)

}

}

(3)Char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码。

object TestCharType {

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

var c2: Char = 98 // 正确,因为直接将一个数值给char,编译器只判断是否越界

var c3: Char = 'a' + 1 // 错误,Int高->char低,编译器判断类型

var c4: Char = ('a' + 1).toChar

}

}

(4)t :一个制表位,实现对齐的功能

(5)n :换行符

(6) :表示

(7)" :表示"

object TestCharType {

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

//(4)t :一个制表位,实现对齐的功能

println("姓名t年龄")

//(5)n :换行符

println("西门庆n潘金莲")

//(6) :表示

println("c:岛国avi")

//(7)" :表示"

println("同学们都说:"大海哥最帅"")

}

}

2.10 布尔类型:Boolean

1)基本说明

(1)布尔类型也叫Boolean类型,Booolean类型数据只允许取值true和false

(2)boolean类型占1个字节。

2)案例实操

object TestBooleanType {

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

var isResult : Boolean = false

var isResult2 : Boolean = true

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值