Scala基础入门1【带你找到门】

一、scala介绍

Scala 是 Scalable Language 的简写,是一门多范式的编程语言

scala特性

面对对象特性

Scala是一门面对对向语言,和java一样,scala底层就是java,可以和无缝对接。与java不同的是它是一种纯对象语言,每一个值都是对象。对象的数据类型和行为有类的特质描述。
scala对于抽象类的机制的扩展有两种途径:

  • 一种途径是子类继承和java一样
  • 另一种途径是灵活的混入机制,避免了多重继承的问题。

函数式编程

Scala是一种函数式语言,函数是可以当作值来使用,甚至可以当作参数传递。支持高阶函数,允许嵌套多层函数

Scala数据类型层次结构

  • Any:所有类型的超类(顶级类型)
  • AnyVal:表示值类型的超类
  • AnyRef:表示引用类型的超类,对应java.lang.Object
  • Unit:表示无值,类似Java中的void
  • Nothing:所有类型的子类
  • Null:表示null或空引用
    在这里插入图片描述

扩展性

  • 任何方法可用作前缀或后缀操作符
  • 可以根据预期类型自动构造闭包。

并发性

Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。

二、Scala基础语法

  1. scala对大小写很敏感,例如:hello和Hello有着不一样的含义
  2. 类名: 第一个字母要大写
  3. 方法名称: 所i有的方法名称的第一个字母用小写
    def mathodName()
  4. scala注释和java是相同的
  5. 空行和空格
    一行中只有空格或者带有注释,Scala会认为其是空行,编译时直接忽略
  6. 换行符
  7. Scala中换行符可以表示一个语句的结束,当然也可以像java一样用分号结束

Scala转义字符

\b\u0008退格(BS) ,将当前位置移到前一列
\t\u0009水平制表(HT) (跳到下一个TAB位置)
\n\u000a换行(LF) ,将当前位置移到下一行开头
\f\u000c换页(FF),将当前位置移到下页开头
\r\u000d回车(CR) ,将当前位置移到本行开头
"\u0022代表一个双引号(")字符
\u0027代表一个单引号(’)字符
\\u005c代表一个反斜线字符 ‘’

变量

变量声明

  1. 首先变量和常量的概念基本和java一样。
    常量:在程序运行中值不会改变的量
    变量:在程序运行过程中值会放生改变的量。
  2. 变量的声明方式:
形式一:
var 变量名:变量类型=赋给变量的值
eg:	var myVar : String = "bianliang"

形式二:
var 变量名=赋给变量的值
eg:	var myVar=12
注释:不写变量类型,scala可以自动识别类型。这就是Scala飘逸所在,入门不知门在哪的原因之一。
当然,如果这么写必须赋初值,否则会报错。

形式三:(多个变量声明)
val xmax, ymax = 666
  1. 常量的声明方式:
形式一:
val 常量名:变量类型=赋给常量的值
eg:	val myVal : String = "bianliang"

形式二:
val 常量名=赋给常量的值
eg:	val myVal=12

Scala访问修饰符

私有(Private)成员

用private修饰的成员,只有包含了该成员定义的类或者对象内部可见。
案例演示

class Outer{
  class inner{
    private def mathod(): Unit ={
      println("哈哈哈");
    }
    class innerSt{
      mathod()   //正确
    }
    mathod()    //正确
  }
  mathod()    //报错
}

保护(Protected)成员

scala保护乘员属性,与java不同。相比之下安全性更高,比java更加严格。再scala中被protected修饰的成员,只有再定义了该成员的类的子类能够访问的到。
案例演示:

class Father{
  protected def fatherMath(): Unit ={println("嘿嘿嘿")}
  }
  class Son extends Father {
    fatherMath()
  }
  class AdoptedSon{
    (new Father).fatherMath()
  }

公共(Public)成员

Scala中,如果没有指定任何的修饰符,则默认为 public。这样的成员在任何地方都可以被访问。
案例演示:

class Father{
   def fatherMath(): Unit ={println("嗯嗯嗯")}
  }
  class Son extends Father {
    fatherMath()
  }
  class AdoptedSon{
    (new Father).fatherMath()
  }

作用域保护(private[x]、protected[x])

这里的x指代某个所属的包、类或单例对象。如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。
案例演示:

package abc{
  package ab{
    private[abc] class GrandFather{
      protected[ab] def mathod(): Unit ={
        println("嘻嘻嘻")
      }
    }
  }
  package ac{
    import ab._
    object Action{
      val s=new GrandFather
      s.mathod()  //报错
    }
  }
}

循环中与java不一样的部分

for 循环过滤

再scala的for循环中可以用一个或多个if来过滤元素。
案例演示:

for( var x <- List
      if condition1; if condition2...
   ){
   statement(s);

for 使用 yield

可以将for循环返回的值作为一个变量存储
案例演示:

var retVal = for{ var x <- List
     if condition1; if condition2...
}yield x
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值