环境搭建
创建一个新项目,选择maven工程
点击next,写入项目名,然后finish
注意:默认下,maven不支持scala的开发,需要引入scala框架,右键项目点击-》add framework
pport....,在下图选择Scala
注意:如果是第一次引入框架,use libary看不到,需要配置,配置就是选择你的scala 安装目录,然后工具就会自动识别,就会显示use libary。
创建项目的源文件目录
步骤:右键main目录创建一个diretory,写个名字比如scala,右键scala目录,mark diretory,选择source root即可
在scala包下,创建包com.某某某.scala-1包名,并创建Object
编写输出Hello scala案例
scala程序基本架构
class scala_one {
定义变量:
val/var 变量名:变量类型 = 变量值
val a: Int = 1
定义方法:
def 函数名(参数名:参数类型):返回值类型={方法体}
def hello(arg: String): Unit = {
println(arg)
}
}
object scala_one {
Scala程序的入口
def main(args: Array[String]): Unit = {
println("hello,scala") }
完全面向对象:scala完全面向对象,故scala去掉了java中非面向对象的元素,如static关键字,void类型
1.static
scala无static关键字,由object实现类似静态方法的功能(类名.方法名),object关键字和class的关键字定义方式相同,但作用不同。class关键字和java中的class关键字作用相同,用来定义一个类;object的作用是声明一个单例对象,object后的“类名”可以理解为该单例对象的变量名。
2.void
对于无返回值的函数,scala定义其返回值类型为Unit类
}
Scala程序反编译
object在底层会生成两个类 scala_one, scala_one$
scala_one中有个main函数,调用 scala_one$ 类的一个静态对象 MODULES$
scala_one$.MODULE$. 对象时静态的,通过该对象调用Hello$的main函数
可以理解我们在main中写的代码在放在scala_one$的main,在底层执行Scala编译器做了一个包装
下面我们说明一下Scala程序的执行流程:
scala_one源码
objscala_one {
def main(args: Array[String]): Unit = {
//4. 可以理解我们在main中写的代码在放在Hello$的main,在底层执行scala编译器做了一个包装
println("hello,scala") }}
scala_one.class类
//1. object在底层会生成两个类 Hello , Hello$
//2. Hello中有个main函数,调用 Hello$ 类的一个静态对象 MODULES$
public final class scala_one{
public static void main(String[] paramArrayOfString) {
scala_one$.MODULE$.main(paramArrayOfString); }}
scala_one$.class类
public final class scala_one${
public static final MODULE$;
static { new (); }
public void main(String[] args) {
//3. scala_one$.MODULE$. 对象是静态的,通过该对象调用scala_one$的main函数
Predef..MODULE$.println("hello,scala");}
private scala_one$(){
MODULE$ = this;}}
解释:
scala中如果使用object关键字声明类,在编译时,会同时产生两个类:当前类和当前类$。
使用当前类$的目的在于模拟静态语法,可以通过类名直接访问方法。
scala将当前类$这个对象称之为伴生对象,伴随着类所产生的对象,这个对象中的方法可以直接使用。
开发注意事项:
Scala源文件以“.scala" 为扩展名。
Scala程序的执行入口是object 中的main()函数。
Scala语言严格区分大小写。
Scala方法由一条条语句构成,每个语句后不需要分号,
(Scala语言会在每行后自动加分号)。(至简原则)
如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号。
官方编程指南
查看scala-docs-2.11.8文档,可以获得Scala的API操作
变量和数据类型
用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性。
注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。
1)基本语法
(1)单行注释://
(2)多行注释:/* */
(3)文档注释:/**
*
*/
代码规范
使用一次tab操作,实现缩进,默认整体向右边移动,用shift+tab整体向左移。
或者使用ctrl + alt + L来进行格式化。
运算符两边习惯性各加一个空格。比如:2 + 4 * 5。
一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅。
标识符的命名规范
Scala对各种变量、方法、函数等命名时使用的字符序列称为标识符。即:凡是自己可以起名字的地方都叫标识符。
命名规则
Scala中的标识符声明,基本和Java是一致的,但是细节上会有所变化,有以下四种规则:
以字母或者下划线开头,后接字母、数字、下划线
以操作符开头,且只包含操作符(+ - * / # !等)
第一种和第二种拼接,第一种在前,二者以下划线分隔
用反引号`....`包括的任意字符串,即使是关键字(39个)也可以
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
变量
基本语法
var | val 变量名 [: 变量类型] = 变量值
说明:在Scala中声明一个变量时,可以不指定类型,编译器根据值确定
案例实操
声明变量时,类型可以省略(编译器自动推导,即类型推导)
类型确定后,就不能修改,说明Scala是强数据类型语言。
变量声明时,需要初始值。
在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改
val修饰的变量在编译后,等同于加上final通过反编译看下底层代码
通过反编译软件,得到对应的底层的.class是
public final class TestVar${
public static final MODULE$;
private int num1;
private final int num2;
var修饰的对象引用可以改变,val修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)
字符串输出
基本语法
字符串,通过+号连接。
printf用法:字符串,通过%传值。
字符串,通过$引用。
案列实操