二、scala基本语法

一、开发注意事项

1) 以 “.scala" 为扩展名。

2) 程序的执行入口是 main()函数。

3) 严格区分大小写。

4) 每个语句后不需要分号(Scala 语言会在每行后自动加分号)

5) 如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号。

 
二、转义字符
 

常用的有  \t  \n  \\  \"  \r

三、输出3方式

1) 字符串通过+号连接(类似 java)。

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

3) 字符串通过$引用(类似 PHP

println("hello" + age + name)
printf("name=%s sal=%f\n", name, age)
println(s"第三种方式 name=$name sal = ${age + 1}")

四、厉害的可以看下源码

五、注释(略)

六、变量

变量可以看作内存中一个数据存储空间的表示,通过变量访问到值。

声明变量后一定要初始化-->使用

scala 中,小数默认为 Double ,整数默认为 Int

var | val 变量名 [: 变量类型] = 变量值,类型可以省略(编译器自动推导,即类型推导),类型确定后,就不能修改,说明 Scala 是强数据类型语言,var 修饰的变量可改变,val 修饰的 变量不可改

判断变量类型

var a = 10
println(a.isInstanceOf[Int])

结果为true

var和val的区别及其选择

在实际编程中,我们需要创建一个对象,并改变或者读取对象的属性,不希望改变对象本身,推荐使用val,同时val是线程安全的。

如果对象需要改变,则使用var。

val dog = new Dog
dog.age = 2
dog.name = "旺财"


class Dog {
 var age :Int = 0 
 var name:String = "" 
}

val修饰的变量等同是加了final

在对象的角度看来,var修饰的对象引用是可以改变,val修饰的对象引用不可改变,但是对象属性值是可以改变(如上案例)

七、+号在使用的过程作用

两边韦数字则作运算符相加

两边字符串则相连接

八、数据类型

都是对象,没有原生类型

分为值类型anyval,引用类型anyref,两者皆为对象,在scala中根类为any,并且认为一切皆为对象

注:scala 中,如果一个方法,没有形参,则可以省略()

区别于java: 在scala中Int是一个类,既意味着类的实例可以使用很多方法

var num:Int = 10
println(num.toDouble + "\t" +num.toString)

var isPass = true 
println(isPass.toString)

方法写在object中,main外

九、类型体系

1) scala 中有一个根类型 Any ,他是所有类的父类.

2) scala 中一切皆为对象,分为两大类 AnyVal(值类型)AnyRef(引用类型), 他们都是 Any 子类.

3) Null 类型是 scala 的特别类型,它只有一个值 null, 他是 bottom calss ,是 所有 AnyRef 类型的子

.

4) Nothing 类型也是 bottom class ,他是所有类的子类,在开发中通常可以将 Nothing 类型的值返回

给任意变量或者函数, 这里抛出异常使用很多.

def main(args: Array[String]): Unit = {
    println(sayHello)
  }
//比如开发中,我们有一个方法,就会异常中断,这时就可以返回 Nothing
//即当我们 Nothing 做返回值,就是明确说明该方法没有正常返回值
def sayHello: Nothing = {
  throw new Exception("抛出异常")
}

5) scala 中仍然遵守,低精度的值,向高精度的值自动转换(implicit conversion) 隐式转换

十、数据类型

整型

常用Int,查看一个类型的大小

println("long 的最大值" + Long.MaxValue + "~" + Long.MinValue)

浮点

默认double,因为精确度高,大概小数点后7位;

字符

单引号括起来,可使用转义符

boolean

适合流程控制

Unit 类型、 Null 类型和 Nothing 类型(目前不是很明白)

1) Null 类只有一个实例对象,null,类似于 Java 中的 null 引用。null 可以赋值给任意引用类型

(AnyRef),但是不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)

2) Unit 类型用来标识过程,也就是没有明确返回值的函数。由此可见,Unit 类似于 Java 里的 void

Unit 只有一个实例,(),这个实例也没有实质的意义

3) Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返

回,而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容。

object UnitNullNothingDemo {
  def main(args: Array[String]): Unit = {
    val res = sayHello()
    println("res=" + res)//返回值()
    val dog: Dog = null
//    val char1: Char = null //错误
    println("ok~~~")
  }
  //Unit 等价于 java 的 void,只有一个实例值()
  def sayHello(): Unit = {
  }
}

class Dog {
}

十一、值类型转换

值类型隐式转换

自动类型转换细节说明

1) 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后

再进行计算。 5.6 + 10 = double

2) 当我们把精度(容量)大 的数据类型赋值给精度(容量)小 的数据类型时,就会报错,反之就会进

行自动类型转换。

3) (byte, short) char 之间不会相互自动转换。

4) byteshortchar 他们三者可以计算,在计算时首先转换为 int 类型。

5) 自动提升原则: 表达式结果的类型自动提升为 操作数中最大的类型

强制类型转换

数据的 从 大——>小,但可能造成精度降低或溢出,格外要注意,var num : Int = 2.7.toInt

十二、值类型和 String 类型的转换

实际开发中,要将基本数据类型转成 String 类型。 或者将 String 类型转成基本数据类型

基本数据类型转成 String 类型:

语法: 将基本类型的值+"" 即可

String 类型转基本数据类型 :

语法:通过基本类型的 String toXxx 方法即可

注:"1.5"不能使用toInt,会报错,应该使用toDouble

十三、命名规范(类似java 略)

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值