Scala基础02

一、重温

1、部署Scala

(1)解压

(2)环境变量

(3)JDK1.8以上

2、scalac/scala

3、常量VS变量

4、数据类型

asInstanceOf

isInstanceOf

二、Scala编程

1、IDEA创建工程

2、IDEA安装scala插件

(1)

(2)

(3)

(4)改为2.11.8

(5)抽取出来单独的version的作用

(6)

(7)

三、函数/方法

1、格式

def 函数名(x:Int,y:String,......) : 返回值类型 =     {

    xxxxxx    //最后一行代码默认是整个函数的返回值

}

2、无返回值

IDEA:def sayHello() {按回车补全}

PS:当调用的h函数没有参数时,还可以省略()【有一种函数除外】

3、条件函数

val x = 100

if(x > 0){

    true

}else{

    false

}

也可以:

if (x > 0) true else false

4、to

[]:

5、until

[):

6、Range

[):

until = Range

看until的源码

1.until(10) = 1 until 10

1.to(10) = 1 to 10

7、Range(1,10,step)

step不等于0

8、for

for ( i <- 0 to 10 until i%2 ==0){

    println(i)

}

也可以嵌套if使用

9、遍历foreach(数组的时候详细讲解)


Array("若泽","老J","hadoop","spark").foreach(sb => println(sb))

四、默认参数


    def loadSparkConf(fileName:String = "spark-default.conf"): Unit ={
          println(fileName)
}
      loadSparkConf()
      loadSparkConf("spark-ruoze.conf")
  }

这种函数带有默认参数,如果不传值将会输出默认参数

五、命名参数(了解即可)

根据变量名传参,不用记住,知道即可。

六、可变参数

1、例子

相加的函数,为防止可能不断添加新变量,所以写成这种形式是最为可扩展的。


def sum(nums:Int*) = {

        var result = 0

        for (num <- nums){    //增强for循环

            result += num

    }

            result

}

            println(sum(1.to(10):_*))    //    _*将数组、列表转为可变参数


:_*可以将列表、数组通通转为可变参数,从而可以进行数学运算。

七、面向对象编程

1、属性、方法


package com.ruozedata.day02
/*
类、属性
 */
object simpleClassApp {
  def main(args: Array[String]): Unit = {
    val people = new People()
    people.name = "郑鸿彬"
    println(people.name + "age:" +people.age)
    println(people.eat())
  }
}
//定义类
class People{
  //定义属性
  var name:String = _  //_表示占位符,String类型表示null,Int类型表示0以此类推
  val age = 10
  //定义方法
  def eat(): String={
    name + "吃香蕉"
  }
}

2、私有属性

(1)正常定义一个属性

可以直接访问到

(2)加上private

无法访问。

(3)通过定义方法来实现外部访问私有属性

3、pom.xml

(1)添加spark-core的依赖

(2)spark的入口类

SparkContext

(3)研究此类

里面还有很多私有的属性和方法只有在这个包里才可以使用

4、构造函数

(1)创建一个构造函数

(2)定义一个类(构造函数)

(3)创建一个方法不调用

结果仍是

(4)总结


package com.ruozedata.day02
/*
   构造函数
 */
object ConstructApp {

  def main(args: Array[String]): Unit = {
    val girl = new Girl("cindy",18,"1366000000","深圳市南山区" )
    println(girl.name + ":" + girl.age + ","+ girl.city + "," + girl.phone + "," + girl.address )
  }
}

//定义一个构造函数
class Girl(val name: String,val age:Int){     //name、age可以当作属性使用,所以将这种类的创建方式叫做构造函数

  println("girl enter")
  def hate: Unit ={
    println(name + "hate 子栋")
  }
  var phone:String =""
  var city:String = "渔村"
  //附属构造函数(java里面的重载)
  //第一行必须调用主构造器或者其他的附属构造器
  def this(name:String,age:Int,phone:String){
    this(name,age)
    this.phone = phone
  }
  var address = ""
  def this(name: String,age:Int,phone:String,address:String){
    this(name,age,phone)
    this.address = address
  }
  println("girl leave")
}

1)构造函数与类相似,但是它可以在定义的时候将传参作为属性,可供外部调用

2)可以在构造函数里面定义属性

3)可以在附属函数里面重写扩展该主构造函数

5、面向对象三大特性

(1)继承

1)创建一个继承Girl的类,Cindy


lass Cindy(name:String,age:Int,major:String) extends Girl(name:String,age:Int){   //Cindy继承了Girl,拥有name和age两大属性
  println("Cindy enter")


  println("Cindy leave")

2)new的时候发现major无法显示,说明major是在Girl里面没有的,需要在Cindy类里定义一下

3)

创建子对象的时候,会先调用父类的构造方法

4)override

如果你想重写父类中已有的属性或者方法,需要在属性或者方法前,添加override修饰符

(2)抽象类

类中有一个或者多个方法/属性没有实现:只有定义,不实现

是不能直接使用的,必须要通过实现了该抽象类的属性和方法来使用

1)创建抽象类


package com.ruozedata.day02
/*
     抽象类
 */
object AbstractApp {

}


abstract class Animal{
//属性或者方法只有定义
  var name:String
  var age:Int

  def speak
}

class Dog extends Animal

2)子类要不定义为抽象类不实现,要不就得实现父类的方法

3)实现父类的方法

Alt+Enter

4)抽象类的子类重写父类中的方法或者属性不需要使用override

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值