Scala面向对象编程之继承
Scala面向对象编程之继承Scala中继承(extends)的概念
Scala 中,让子类继承父类,与 Java 一样,也是使用 extends 关键字;
继承就代表,子类可继承父类的 field 和 method,然后子类还可以在自己的内部实现父类没有的,子类特有的 field 和method,使用继承可以有效复用代码;
子类可以覆盖父类的 field 和 method,但是如果父类用 final 修饰,或者 field 和 method 用 final 修饰,则该类是无法被继承的,或者 field 和 method 是无法被覆盖的。
rivate 修饰的 field 和 method 不可以被子类继承,只能在类的内部使用;
field 必须要被定义成 val 的形式才能被继承,并且还要使用 override 关键字。 因为 var 修饰的 field 是可变的,在子类中可直接引用被赋值,不需要被继承;即 val 修饰的才允许被继承,var 修饰的只允许被引用。继承就是改变、覆盖的意思。
Java 中的访问控制权限,同样适用于 Scala
header 1
header 2 ...
类
类12345678910111213141516171819202122232425262728293031323334353637/*** 在Scala中,类并不用声明为public类型的。* Scala源文件中可以包含多个类,所有这些类都具有共有可见性。*/class Person { //用val修饰的变量是可读属性,有getter但没有setter(相当与Java中用final修饰的变量) val id="9527" //用var修饰的变量都既有getter,又有setter var age:Int=18 //类私有字段,只能在类的内部使用或者伴生对象中访问 private var name : String = "唐伯虎" //类私有字段,访问权限更加严格的,该字段在当前类中被访问 //在伴生对象里面也不可以访问 private[this] var pet = "小强"}//伴生对象(这个名字和类名相同,叫伴生对象)object Person{ def main(ar ...
集合 List、Set、Map
List在Scala中列表要么为空(Nil表示空列表),要么是一个head元素加上一个tail列表。
12345678910111213141516171819object ListApp { def main(args: Array[String]): Unit = { val list1 = List("Hello", "Scala", "Hadoop") println(list1) val list2 = "Spark" :: "Storm" :: "Kylin" :: "Scala" :: Nil println(list2) val list3 = scala.collection.mutable.ListBuffer[String]() // 判断list是否为空 if (list3.isEmpty){ println("我是空") ...
元组
元组映射是K/V对偶的集合,对偶是元组的最简单形式,元组可以装着多个不同类型的值。
创建元组
元组是不同类型的值的聚集;对偶是最简单的元组。
元组表示通过将不同的值用小括号括起来,即表示元组。
创建元组格式:
1val tuple=(元素,元素...)
例程:
12345678910111213141516171819202122232425/** * 元组 */object TupleApp { def main(args: Array[String]): Unit = { val tup = ("Hadoop", 3.1415, 12, Map("NO1" -> "美女"), Array("Hello", "Scala", "Hadoop", "Spark", "Storm")) println(tup._1) println(tup._4.getOrElse(&q ...
映射
映射在Scala中,把哈希表这种数据结构叫做映射。
12345678// 构建映射var scores1 = Map("NO1" -> "校花", "NO2" -> "美女", "NO3" -> "女神")val scores2 = Map(("NO1" -> "校花"), ("NO2" -> "美女"), ("NO3" -> "女神"))scores1 +=("NO4" -> "萝莉")//获取映射的指println(scores1("NO2"))println(scores2.getOrElse("NO4", "不在榜单中"))
结果
12美女不在榜单中
注意:通常我们在创建一个集合是会用val这个关键字 ...
数组
数组12345(1)定长数组定义格式: val arr=new Array[T](数组长度)(2)变长数组定义格式: val arr = ArrayBuffer[T]()
注意需要导包:import scala.collection.mutable.ArrayBuffer
例程12345678910111213141516171819202122232425262728293031323334object ArrayApp { def main(args: Array[String]): Unit = { // 数组声明 val arr = new Array[String](5) arr(1) = "HAHA" println(arr.mkString(",")) println("**********************************************************") // 初始化赋值 val arr2 = Array(&q ...
定义方法和函数
Scala中的+ - * / %等操作符的作用与Java一样,位操作符 & | ^ >> <<也一样。只是有一点特别的:这些操作符实际上是方法。
例如:
1234a + b是如下方法调用的简写:a.+(b)a 方法 b可以写成 a.方法(b)
定义方法
方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型。
定义函数
方法和函数的区别在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型一样被传递和操作,函数是一个对象,继承自FuctionN。N代表函数创建是有多少个参数。
函数对象有apply、curried(柯里化)、toString、tupled(元组)这些方法。而方法不具有这些特性。
如果想把方法转换成一个函数,可以用方法名跟上下划线的方式。
案例:首先定义一个方法,再定义一个函数,然后将函数传递到方法里面
方法代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484 ...
Scala基础
声明变量123456789101112131415object Hello { def main(args: Array[String]): Unit = { println("Hello Scala") // 使用val定义的变量值是不可变的,相当于Java里面final修饰的变量 val i = 1 //使用var定义的变量是可变的,在Scala中鼓励使用val var s = "Hello Scala" // Scala编译器会自动推断变量的类型,必要的时候可以指定类型 val str: String = "Hello Spark" }}
常用类型Scala和Java一样,有7种数值类型Byte、Char、Short、Int、Long、Float、Double类型和1个Boolean类型。
条件表达式Scala的条件表达式比较简洁,定义变量时加上if else判断条件。例如:
12345678910111213141516/*** ...
Linux安装Scala编译器
下载Scala地址https://www.scala-lang.org/download/2.11.8.html
解压Scala到指定目录1tar -zxvf scala-2.11.8.tgz -C /usr/java
配置环境变量,将scala加入到PATH中123vim /etc/profileexport JAVA_HOME=/usr/java/jdk1.8export PATH=$PATH:$JAVA_HOME/bin:/usr/java/scala-2.11.8/bin
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo最终效果如下
大概就几个步骤
1.安装 Docker CE
2.运行 Redis 镜像
3.Java 环境准备
4.项目准备
5.编写 Dockerfile
6.发布项目
7.测试服务
环境准备
系统:Ubuntu 17.04 x64
Docker 17.12.0-ce
IP:45.32.31.101
一、安装 Docker CE国内不建议使用:“脚本进行安装”,会下载安装很慢,使用步骤 1 安装,看下面的链接:常规安装方式
1.常规安装方式Ubuntu 17.04 x64 安装 Docker CE
2.脚本进行安装国内安装不建议使用脚本:
安装Docker CE
1234567891011121314151617$ curl -fsSL get.docker.com -o get-docker.sh$ sudo sh get-docker.sh<output truncated>If you would like to use Docker as a non-root user, yo ...