Scala学习

本文详细介绍了Scala编程的基础知识,包括程序结构、数据类型、变量、运算符和流程控制。重点讲解了Scala的值类型转换、函数式编程、面向对象编程以及异常处理。此外,还讨论了函数的定义、递归、过程和惰性求值等高级概念,为读者深入理解Scala提供全面指导。
摘要由CSDN通过智能技术生成

Scala程序结构

1.Object是一个关键字,表示一个伴生对象;

2.如该文件只出现了一个object HelloScala 就会在编译后两个 .class文件;

3.第一个文件是HelloScala.class这个表示他的伴生类,但是空的;

4.第二个文件是HelloScala$.class对应的是Object  HelloScala,但是本质是调用但是本质调用它对应的一个静态 属性MODULE$

5.这两个文件的关系和main函数

object HelloScala {

// 1. def 表示一个方法或者函数;

// 2. main 表示入口;

// 3. args: Array[String] 表示形参, args 是形参名 Array[String] 是形参类型表示一个Array数组;

// 4. :Unit 表示返回值类型为Unit,等价于 java 的 void

// 5. = 表示 后面写的是函数体/方法体 , 它还有返回值类型推导的作用

    def main(args: Array[String]):Unit = {
         // 表示是 输出, 输出, 类似 System.out.println("hello, scala世界 !")
         // 在 scala 语句后,不 需要带 ; //体现简洁 体现简洁
         println("hello, scala世界 !")
     }
}

 

为什么一个object A 对应两个class文件

1.scala中,一切都是对象;

2.把静态的内容和非静态内容分开;

A类的非静态的内容(属性,方法)放在class A中;

A类的静态的内容(属性,方法)放在object A中;

 

Scala语言输出:三种方式

1.字符串通过+号连接;

2.printf用法,字符串通过%传值,(格式化输出);

3.字符串通过$引用;

{ } 可以进行运算

 

变量

Scala要求变量在声明时就赋值

1.变量声明基本语法

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

2.注意事项

1)声明变量时,类型可以省略(类型推断);

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

3)在声明/定义一个变量时,可用var或val来修饰;var 修饰的变量可改, val 修饰的变量是不可变的

val线程安全,效率高;等同加上final;

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

5)变量声明时,需要初始值;

 

数据类型

1.Scala数据类型介绍

1.Scala中的数据类型都是对象;

2.Scala数据类型分两大类AnyVal(值类型)和AnyRef(引用类型);他们都是对象。

 

对上图说明:

1.Any是所有类的根类型,即所有类的父类(基类);

2.在Scala中类分为两个大的类型分支(AnyVal [值类型,即可以理解成就是java的基本数据类型],AnyRef为引用类型)

3.在AnyVal虽然叫值类型,但仍然是类(对象);

4.在scala中有两个特别的类型(Null),还有一个是Nothing;

5.Null类型只有一个实例null,它是bottom class,是AnyRef的子类;

6.Nothing类型是所有类的子类,它的价值是在于因为它是所有类的子类,就可将Nothing类型对象返回给任意的变量或方法;

7.在Scala中,Unit类型比较特殊,这个类型只有一个实例()

 

Scala数据类型列表

 

字符类型(char)

1.字符常量是用单引号(' ')括起来的单个字符。如:var c1='a'

2.Scala允许使用转义字符'\'来将其后的字符转变为特殊字符型常量。如:var c3='\n'

3.可以直接给Char赋一个整数,然后输出时,会按照对应的unicode字符输出['\u0061' 97]

4.Char类型是可进行运算的,相当于一个整数,因它都对应有Unicode码

 

Unit类型、Null类型和Nothing类型

Unit:表示无值,和void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,()

Null:null,Null类型只有一个实例值null;

Nothing:Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。当一个函数,确定没有正常的返回值,可用Nothing来指定返回类型,这样的好处,可把返回的值(异常)赋给其它的函数或变量。

def f1():Nothing = { throw new Exception() }

 

注意:

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是其他任意类型的子类,还能跟要求返回值方法兼容。

 

值类型转换

值类型隐式转换

当 Scala程序在进行赋值或者运算时,精度小的类型自动转换为大的数据类型,这个就是自动类型转换 (隐式转换 implicit conversion)。

自动类型转换细节说明

1) 有多种类型的数据混合

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值