Features 特性

1、基于JVM,完全兼容Java

2、同样具有跨平台,可移植,垃圾回收

3、比Java更加的面向对象【完全面向对象】

4、函数式编程

5、面向大数据处理,对集合容器框架有一定的增强

6、是Spark的底层

History 发展历史

Pizza & Scala

JDK1.5 的泛型、增强FOR、自动类型转换

JDK8.0 类型推断、Lambda表达式

Download 下载

官网下载地址:

https://www.scala-lang.org/download/

现在是分了3和2两种大版本,我看的教程都是讲2的

所以这里找到是2版本:

点进去之后拉到最下面才是安装包的下载地址(总是放在一些你看不到的位置):

Installation 安装

MSI安装版直接无脑下一步就行, 我这里下的是解压版,还需要自己手动配置环境变量

然后在Path变量里面追加一个:

%SCALA_HOME%\bin

保存关闭之后,在Win + R打开cmd,输入命令scala。

如果开启了SHELL模式,这样就行了

C:\Users\Administrator>scala
Welcome to Scala 2.13.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_291).
Type in expressions for evaluation. Or try :help. scala>

With IntelliJ IDEA 与IDEA的配置:

首先IDEA需要安装支持Scala的一个插件工具

搜索插件市场可以直接找到,下载安装

然后在创建项目的时候,对项目名称右键添加框架,选择Scala框架:

首次安装需要让IDEA知道SDK在哪,SDK就是我们下载的Scala包,这里要提供给IDEA路径位置

如果没有,IDEA也提供下载来实现

Scala独有的程序单元:

编写一个Hello.scala(选择Object创建)

object Hello {
def main(args : Array[String]) : Unit = {
println("Hello Scala")
}
}

Scala支持原生Java语法

object Hello {
def main(args : Array[String]) : Unit = {
println("Hello Scala")
System.out.println("Hello Scala By Origin Java Syntax")
}
}

笔记:

/**
* 关键字 object 声明一个单例对象 通过一个HelloScala的派生类创建的实例
* main 从外部可以直接调用的方法
* def 方法名称(参数名称: 参数类型):返回类型 = {方法体}
*
*/
object HelloScala {
def main(args: Array[String]): Unit = {
println("hello scala")
}
}

反引号修饰变量名:

    /**
* 或者是使用反引号处理
* 这样定义允许声明任意字符
*/
val `hero-name` = "asdas"
// 调用的时候也需要加上反引号
println(`hero-name`)

操作符声明:

    /**
* 可以支持以操作符的变量声明
* 但是操作符不可以和数字字符结合声明
*/
val -+%#@ = "asadas"

支持模版语法和格式化组合处理:

    /**
* 支持模版语法和格式化输出同时结合使用
*/
val π = 3.14
print(f"the π is ${π}%2.4f")

打印结果:

the π is 3.1400

Syntax Of Scala Scala语法

声明变量

Java语法:

int val = 100;

Scala语法:

var val:Int = 100

变量和常量:

Java:

int a = 100; // 变量
final int b = 200; // 常量

Scala:

var a:Int = 120 \\ 变量
val b:Int = 130 \\ 常量

注意是【var】和【val】

自动类型推导:

类似JavaScript,声明只需要知道常量变量和字面值是什么即可

var num = 100

常量和引用问题:

object Hello {
def main(args : Array[String]) : Unit = {
val p = new P
// p = null // × 常量p不能改变引用
p.name = "others value" // √ p指向的对象的其他属性允许改变
}
} class P {
var name : String = "none"
}

多行字符串的处理:

object Hello {
def main(args : Array[String]) : Unit = {
var sql =
"""
| SELECT
| A.columnName1,
| A.columnName2,
| B.columnName3
| FROM
| tableName1 A
| JOIN tableName2 ON A.columnName1 = B.columnName2
| AND associateCondition1
| AND associateCondition1
| WHERE
| 1 = 1
| AND condition 1
| AND condition 2
|""".stripMargin
}
}

支持模板语法:

注意前面要加一个s

object Hello {
def main(args : Array[String]) : Unit = { val name = "小明"
val age = 29 var sql =
s"""
| SELECT
| A.columnName1,
| A.columnName2,
| B.columnName3
| FROM
| tableName1 A
| JOIN tableName2 ON A.columnName1 = B.columnName2
| AND associateCondition1
| AND associateCondition1
| WHERE
| 1 = 1
| AND condition 1
| AND condition 2
| AND name = "$name"
| AND age = "$age"
|""".stripMargin
}
}

数据类型:

Scala脱离C的影子,完全由对象支配

scala.Any 等同于 java.lang.Object,是所有数据类型的基类

子类划分为AnyVal(任意字面值)和 AnyRef(任意引用)

特殊类型:

Unit:

表示无值,和其他语言中 void 等同。用作不返回任何结果的方法的结果
类型。Unit 只有一个实例值,写成()。
 
print(Unit)
编写打印Unit,语法层面编译器不会报错,但是构建的时候报错
`Unit` companion object is not allowed in source; instead, use `()` for the unit value
print(Unit)

按照提示的意思,更换成空括号就能打印这个空实例了

print(())

Null:

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

Nothing:

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

2、一些不同

public 修饰符 scala中没有public关键字,如果不声明访问权限,那么就是公共的

static 修饰符 scala中没有静态语法,所以不存在static关键字

void 类型,Java中表示空,没有返回值,在scala中改用Unit来表示

方法声明需要在方法前缀def

方法的实现赋值给方法声明,所以需要等号连接

Scala是Full Complete OOP,全面向对象语言,没有静态语法

如果要调用静态语法,使用【半对象单例】来调用

读写文件操作

    // 读取操作
// 调用scala.io.Source类的fromFile方法 ,入参文件路径
val bufferedSource = Source.fromFile("C:/Users/Administrator/Desktop/SqlTemplate.sql")
// 逐行遍历打印内容
bufferedSource.foreach(print) // 写入文件操作
val writer = new PrintWriter(new File("C:/Users/Administrator/Desktop/ScalaWriteTest.sql"));
writer.write("testing for scala write files")
writer.close()

数据类型强转:

val aaa : Int = 2.5.toInt

三元运算操作:

val res = if(a) "res1" else "res2" 

范围遍历:

    // 范围遍历
for(i <- 1 to 100) {
println(1)
}

【Scala】01 基础了解的更多相关文章

  1. 相见恨晚的 scala - 01 [ 基础 ]

    简洁到不行,多一个分号都是不应该. 学习笔记: centOS 下安装 scala 和安装 jdk 一毛一样 . 1 . 不同于 Java 的变量声明 :( 但是和 js 很像 ) /** * Crea ...

  2. Java 之 I/O 系列 01 ——基础

    Java 之 I/O 系列 目录 Java 之 I/O 系列 01 ——基础 Java 之 I/O 系列 02 ——序列化(一) Java 之 I/O 系列 02 ——序列化(二) 整理<疯狂j ...

  3. Scala 语法基础

    一 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Java虚拟机上,并兼容现有的Java程序.Scal ...

  4. Scala零基础教学【1-20】

    基于王家林老师的Spark教程——共计111讲的<Scala零基础教学> 计划在9月24日内完成(中秋节假期之内) 目前18号初步学习到25讲,平均每天大约完成15讲,望各位监督. 初步计 ...

  5. linux 01 基础命令

    linux 01 基础命令 对于Linux要记住一个概念,一切皆文件,哪怕是目录,也是一个文件 1.修改用户密码 sudo passwd pyvip@Vip:~$ #pyvip表示用户名, Vip表示 ...

  6. Scala语言基础

    1. Scala语言的特点 a. 多范式编程语言,面向对象(抽象.封装)和函数式(过程.结果)编程 b. 代码简洁 ==>可读性较差 c. 代码会被变异成Java字节码,运行在JVM上 2. S ...

  7. 01.基础架构:一条SQL查询语句是如何执行的?学习记录

    01.基础架构:一条SQL查询语句是如何执行的?学习记录http://naotu.baidu.com/file/1c8fb5a0f2497c3a2655fed89099cb96?token=ff25d ...

  8. 01 基础版web框架

    01 基础版web框架 服务器server端python程序(基础版): import socket server=socket.socket() server.bind(("127.0.0 ...

  9. Scala语法01 - 基础语法

  10. 3.Scala语法01 - 基础语法

随机推荐

  1. openstack nova 报错

    openstack compute service list The server is currently unavailable. Please try again at a later time ...

  2. margin的用法 清除默认样式 display属性值 块状元素 内联元素 行内块元素

    margin的用法: 1,margin是在元素的宽高以外的 2,作用:控制元素之间的位置关系 3,margin不能改变盒子本身大小的 4,单一一个方向设置margin值: margin-left    ...

  3. 自建yum源

    自定义yum本地仓库 你不需要依赖外网的yum仓库,可能导致该仓库无法访问,下载软件失败.. 大公司,会自建yum仓库 防止出现网络问题,自建了yum仓库,本地yum仓库 你可以去阿里云上,部署一个在 ...

  4. 网络诊断工具traceroute的使用

    在 Linux 系统中,traceroute 是一个网络诊断工具,用于确定数据包从你的计算机到目标主机(如一个网站或远程服务器)所经过的路由路径. 如果你的系统中没有安装 traceroute,你可以 ...

  5. 随机二次元图片API第三弹

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 随机二次元图片API第三弹 日期:2020-3-10 阿珏 ...

  6. python重拾第九天-进程、线程、协程

    本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...

  7. P2467 [SDOI2010] 地精部落 学习笔记

    DP 显然我固定第一个是峰,然后再乘以2就是答案,因为一个合法的反转之后也是合法的而且谷峰颠倒了 发现如果设\(dp[i][j]\)表示前\(i\)个山脉,第\(i\)个山脉是高度\(j\)的答案,然 ...

  8. 高通平台mm-camera上电时序

    高通平台mm-camera上电时序 背景 作为高通平台Camera知识的一种补充. 参考文档:https://blog.csdn.net/m0_37166404/article/details/649 ...

  9. Nginx配置以及热升级

    目录 Nginx详解 1. Nginx关键特性 2. Nginx配置 2.1 event 2.2 http 2.2.1 log_format 2.2.2 sendfile 2.2.3 tcp_nopu ...

  10. Go 使用原始套接字捕获网卡流量

    Go 使用原始套接字捕获网卡流量 Go 捕获网卡流量使用最多的库为 github.com/google/gopacket,需要依赖 libpcap 导致必须开启 CGO 才能够进行编译. 为了减少对环 ...