Scala新版本学习(1):
1.进官网:https://www.scala-lang.org/

上面就是进入Scala社区后的一个画面,官方对Scala的简单介绍是:Scala将面向对象和函数式编程集合在一个简洁的高级语言中,Scala的静态类型有助于避免复杂应用程序中的错误。Scala既有动态语言那样灵活简洁,同时又保留了静态类型带来的安全保障和执行效率,加上其强大的抽象能力,既能够处理脚本化的临时任务,又能处理高并发场景下的分布式互联网大数据应用。
2.Scala六个特性。
(1)可以和java无缝整合,即在Scala中可以调用java包中的类,或者在Java中也可以调用Scala包中的类。Scala也是运行在JVM上的,因此Java和Scala堆栈可以自由混合以实现完全无缝集成。
(2)类型推断。类型系统不会那么静止。不适用于类型系统。让类型系统来适应你。Scala中,val只能修饰常量,不可变;var是变量的修饰符。定义变量或者常量只能用var或者val。在定义之后,系统会自动的进行类型的推断。
(3)并行和分布式
对集合使用数据并行操作,使用actors(类似于线程)进行并行和分布式。
(4)特质:将Java风格的界面的灵活性与类的强大功能相结合。考虑有原则的多重继承。
(5)模式匹配:匹配值,匹配类型。
(6)高阶函数:方法中的参数可以是另一个方法。函数式编程的一个体现。
3.安装/配置环境变量
1. windows安装,配置环境变量
Ø 官网下载scala2.10:http://www.scala-lang.org/download/2.10.4.html
Ø 下载好后安装。双击msi包安装,记住安装的路径。
Ø 配置环境变量(和配置jdk一样)
l 新建SCALA_HOME

上个步骤完成后,编辑Path变量,在后面追加如下:
;%SCALA_HOME%\bin;%SCALA_HOME%\jre\bin

- 打开cmd,输入:scala - version 看是否显示版本号,确定是否安装成功
4. REPL:读取--->求值--->打印--->循环。Scala解释器读取到一个表达式,对它进行求值,将它打印出来,接着继续读取下一个表达式。发生的过程是,输入的内容被快速的编译成字节码,然后这段字节码交由Java虚拟机执行。
5.声明值和变量
(1)val 定义的值实际上是一个常亮,无法改变其内容。如下:

(2)var可以声明变量类型的值

(3)在赋值的时候,不需要给出值或者变量的类型,这个信息可以从你用来初始化它的表达式推断出来。
(4)在必要的时候也可以指定数据的类型:

从上面可以看到,变量或者函数的类型总是在变量或者函数名称的后面。
(5)在变量声明或者赋值语句之后,并没有用分号,仅当同一行代码中存在多条语句的时候才需要用分号隔开。

6.常用类型:
(1)Scala7种数值类型+1个Boolean类型。Scala并不可以区分基本类型和引用类型。可以对数字执行如下的方法:
如下图中,可以将int类型的1转换为字符串"1"

1.to(10),将会产出range(1,2,3,4,5,6,7,8,9,10),Int值首先被转换成RichInt,然后再应用to方法

(2)Scala中基本类型和包装类型之间的转换是Scala编译器的工作。比如创建一个Int[]数组,最终在虚拟机上得到的是一个int[]数组。Scala用底层的java.lang.String类表示字符串,不过其通过StringOps类给字符串追加了上百种操作。
"Hello".intersect("Wolrd") //输出"lo"。在这个表达式中,java.lang.String对象"Hello"被隐式地转换成了一个StringOps对象,接着StringOps类的intersect()方法被应用。

(3)BigInt对应于java.math.BigInteger,BigDecimal对应于java.math.BigDecimal。
在Scala中,我们用方法而不是强制类型转换,来做数值类型之间的转换。例如:99.44.toInt得到99,99.toChar得到'C',toString将任意的对象转换为字符串。要将包含数字的字符串转换成数值,使用toInt或者toDouble。例如

(4)a.+(b)。这里的+是方法名。Scala可以用几乎任何方法来为方法命名。
通常可以用a 方法 b《======》a.方法(b)。这里的方法是一个带有两个参数的方法(一个是显式的一个是隐式的)
如1 to 10 <===> 1.to(10)
(5)Scala没有提供++和--操作符,取而代之的是+=1或者-=1。
7.调用函数的方法。
(1)scala.math中定义的函数,sqrt(2),pow(2,4),min(3,Pi),在使用函数的之前,先要引入相应的包。
import scala.math._ //在Scala中,_字符是“通配符”,类似java中的*。
(2)Scala没有静态方法,但是它有个类似的特性,叫做单例对象。通常一个类应该有个伴生对象,其方法和Java的静态方法是一样的。
8.apply方法
(1)如果s是一个字符串,那么s(i)是该字符串中的第i个字符。如下图所示:

(2)def apply(n:Int):Char
也即是:"Hello".apply(4)等价于"Hello"(4)

(3)将字符串转换为BigInt的apply方法,会产生一个新的的BigInt对象,不需要使用new关键字

(4)使用伴生对象的apply方法是Scala创建对象的常用方法。如Array(1,4,9,16)返回一个数组,就是Array伴生对象的apply方法。
Scala新版本学习(1):的更多相关文章
- scala新版本学习(3)
1.REPL:读取->求值->打印->循环.Scala程序将输入的内容快速的编译成为字节码,然后字节码文件交给Java虚拟机进行执行. 2.val是值不可变,var值可变.在变量声明 ...
- Scala新版本学习(2):
1.本章要点; (1)if表达式有值: (2)块也有值,是它最后一个表达式的值 (3)Scala的for循环就像是"增强版的"Java for循环 (4)分号不是必须的 (5)vo ...
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- Scala学习(一)--Scala基础学习
Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学 ...
- Scala 递归学习的例子
为了学习Spark,我开始了学习Scala.加油! 递归的一个题目: 代码: // Why x is Float, but when we use 3.0 for example, it return ...
- scala基础学习(一)
scala学习 scala与java的不同之处: 1.scala中任何一个操作符都是一个方法. s = 1+2; 可以写作:s=(1).+(2) 2.异常捕获采用模式匹配的方式. try { v ...
- Scala系统学习(四):Scala变量
变量是保存存储值的内存位置的名称.这意味着当创建变量时,可以在内存中保留一些空间. 根据变量的数据类型,编译器分配内存并决定可以存储在预留内存中的内容.因此,通过为变量分配不同的数据类型,可以在这些变 ...
- Scala系统学习(三):Scala基础语法
如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...
- Scala入门学习随笔
推荐学习视频:慕课网http://www.imooc.com/learn/613,讲师:辰风 ScalaAPI:http://www.scala-lang.org/api/current/#packa ...
随机推荐
- Robotframework之SSHLibrary库
Robotframework之SSHLibrary库 使用robotframework做自动化测试,在流程中可能需要远程连接机器做一些简单操作,比如连接linux服务器,外面平时用的工具去连接 ...
- vue调试工具vue-devtools安装
vue-devtools是一款基于chrome浏览器的插件,用于vue应用的调试,这款vue调试神器可以极大地提高我们的调试效率.帮助我们快速的调试开发vue应用. 这里介绍一下vue-devtool ...
- JSTL核心标签库详解
<c:out>标签 标签用于输出一段文本到浏览器中. 属性名 是否支持EL 属性类型 属 性 描 述 value true Object 指定要输出的内容 escapeXml true B ...
- 3、kubeadm初始化Kubernetes集群
同步时间 # ntpdate time.nist.gov k8s集群组成 k8s部署环境 https://kubernetes.io/docs/setup/independent/create-cl ...
- js Date格式转化
Date格式转化为日期 年-月-日(格式随意修改) GetDateStr(dd, AddDayCount) { dd.setDate(dd.getDate() + AddDayCount)// 获取 ...
- cmake生成Makefile时指定c/c++编译器
cmake .. -DCMAKE_CXX_COMPILER:FILEPATH=/usr/local/bin/g++ -DCMAKE_C_COMPILER:FILEPATH=/usr/local/bin ...
- Qt qss 动态属性-不同条件不同显示
一. 1.为了用户界面外观的动态变化,属性选择器可以与动态属性组合使用. 2.当一个属性值变化时,所引用的样式不会自动更新.相反地,必须手动触发更新才会生效.unpolish()用于清理之前的样式,而 ...
- JAVA文件上传 ServletFileUpLoad 实例
1. jsp <%@ page language="java" contentType="text/html" pageEncoding="u ...
- Java组件介绍
1.String string对象的不变性.被final关键字修饰. 使用charat方法替代startwith/endwith方法(提高性能) 使用buffer(方法同步,性能较差)和builder ...
- 【LeetCode】15、三数之和为0
题目等级:3Sum(Medium) 题目描述: Given an array nums of n integers, are there elements a, b, c in nums such t ...