初识Scala (一)

1.变量

变量:var |var a=10  等价于var a:Int =10
常量:val |val b=20  等价于var b:Int =20
     asInstanceOf[T]  数据类型转换
     isInstanceOf[T]  判断是否是某种数据类型
默认值:
    scala> var a:Int=_
    a: Int = 0

    scala> var a:Double=_
    a: Double = 0.0

    scala> var a:String=_
    a: String = null

    scala> var a:Boolean=_
    a: Boolean = false

2.类型

Any:任何类的父类,Object类的子类
AnyRef:Any的子类,所有引用数据类型的超类
AnyVal:Any的子类,所有基本数据类型的超类


基本数据类型:
    九种基本数据类型中的八种与java一样,多一个Unit
    Scala中的Unit类型类似于java中的void,无返回值。主要的不同是在Scala中可以有一个Unit类型值,也就是(),
    然而java中是没有void类型的值的。除了这一点,Unit和void是等效的。
    一般来说每一个返回void的java方法对应一个返回Unit的Scala方法。


引用数据类型:
  Null:AnyRef的子类
    表示引用类型的值为空,但在scala中我们这种场景下通常不使用Null,使用Option
  None:Option类型的两个子类之一,另一个为some
  Nothing:所有类型的子类型,表示没有值。
    也表示程序异常终止。对于一个函数而言,如果返回值是Nothing,表明函数发生了异常。
  Nil:表示没有值的集合

注意:
    Scala的数据类型首字母大写
    示例:Int,Long,Float,Double……

3.类、对象、构造器

1、类和对象
类:
    由class声明,在类中书写非静态的变量、方法等。
    不含任何静态的代码。
对象:
    由object声明,在对象中书写静态的变量、方法等。
    不含任何非静态的代码。主方法在对象中声明。
    所有对象均单例。

#即使在类中声明main方法,该方法也是一个叫做main的普通方法


2、示例:
object MainTest {
  def main(args: Array[String]): Unit = { //主函数的固定写法
    val a=new Scala01()    //实例化
    print(a.min(1,2))    //调用类中的方法
  }
}

class Scala01 {
  def min(x:Int,y:Int):Int={
    if(x>y) y else x 
  }
}

备注:
    val的垃圾回收快于var
    实例化时,类中除了普通方法外,其他所有东西都会执行,因为这些东西相当于定义在构造器中
    1.类名 - 对于所有的类名的第一个字母要大写吗?
      是的 class MyFirstScalaClass
    2.方法名称 - 所有的方法名称的第一个字母用小写吗?
      是的 def myMethodName()


3、构造器
object MainTest {

  def main(args: Array[String]): Unit = {
    val a=new Scala01(1,2,3)
  }
}
 //主构造器
class Scala01(val x:Int,val y:Int) {
  var z:Int=_   //接收任意的Int类型数据
 //附属构造器
 //每个附属构造器第一个行必须调用主构造器或者其它附属构造器
  def this(x:Int,y:Int,z:Int){
    this(x,y) //必须
    this.z=z    //给全局变量赋值
    print(x+y+z)
  }
}


4、伴生类和伴生对象(重要)

A、名称相同的类和对象,类叫做对象的伴生类,对象叫做类的伴生对象
B、对象中的方法和属性(包括私有)可以直接在类中通过"类名.方法"调用
C、类中的方法和属性(包括私有)可以直接在对象中通过"对象名.方法"调用


5、apply方法


    创建对象不用new

class Scala01(x:Int,y:Int) {

}
object Scala01{//在这个伴生对象中重写apply方法创建对象就不要new了
  def apply(x: Int, y: Int): Scala01 = {//返回一个Scala01对象
    new Scala01(x, y) 
  }
}

object MainTest {
     /**
      * 类名() =》 Object apply
      * new出来的对象() class apply
      */

  def main(args: Array[String]): Unit = {
    val a=Scala01(1,2)    //创建对象不用new   object apply
    val test = new Scala01
    test()     //class apply new出来的
  }
}
识别 下方二 维码 ,即可关注公众号获取最新大厂技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值