Scala编程基础(4)

定义

1,在Scala中,类并不用声明为public

2,Scala源文件中可以包含多个类,所有这些类都具有公有可见性

3,用val修饰的变量是只读属性,有getter但没有setter,相当与Java中用final修饰的变量

4,用var修饰的变量既有getter又有setter

5,类私有字段 private,只能在类的内部使用,伴身对象可以访问

6,对象私有字段 private[this],访问权限更加严格的,类的方法只能访问到当前对象的字段

7,所有的类名的第一个字母要大写

构造器

1,类后面定义的构造器是主构造器  

2,gender:String相当于定义了一个private[this]的成员变量

class User(val id: Int, var name: String, gender: String, var age: Int = 30)

3,主构造器和辅构造器(也可以认为Java中构造器的重载)

注意:主构造器会执行类定义中的所有语句

class User(val id: Int, var name: String, gender: String, var age: Int = 18) {
  //默认赋一个空值
  var money: Int = _

  //定义了一个辅助的构造器
  def this(id: Int, name: String, gender: String, age: Int, money: Int) = {
  //一定要在第一行显示调用主构造器
    this(id, name, gender, age)
    this.money = money
  }
}

object User {
  def main(args: Array[String]): Unit = {
    val user = new User(1, "neo", "男")
    println(user.id + "," + user.name + "," + user.age + "," + user.money)

    val u1 = new User(1, "neo", "男", 20, 1000)
    println(u1.id + "," + u1.name + "," + u1.age + "," + u1.money)
  }
}

4,主构造器执行顺序

package oop.t2

import scala.io.Source

class TestConstructor {

  //主构造器里的内容会被执行
  var name: String = "abc"

  println(name)


  try {
    val str: String = Source.fromFile("H:\\hive.txt").mkString
    println(str)
  } catch {
    case e: Exception => e.printStackTrace()
  } finally {
    println("finally")
  }

  //会加载方法的定义,但是不会调用
  def sayHi(): Unit = {
    println("hi .....")
  }
}

object TestConstructor {
  def main(args: Array[String]): Unit = {
    var t = new TestConstructor

  }
}

对象

单例对象

在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的

  1. 存放工具方法和常量
  2. 高效共享单个不可变的实例

伴生对象

如果有同样一个类与该object名字一样,则称该object为该类的伴生对象,相对应,该类为object的伴生类。如果一个类有它的伴生对象,这个类就可通过object的名字访问到所有成员,但object不在该类的作用范围。类和伴生对象之间可以相互访问私有的方法和属性(伴生对象一般跟类在同一个文件里)

apply

通常我们会在类的伴生对象中定义apply方法,当遇到类名(参数1,...参数n)apply方法会被调用

class Person(val id: Int, var name: String) {
  def show() = {
    println("id:" + id + ",name:" + name)
  }
}

object Person {
  def apply(id: Int, name: String): Person = {
    println("调用了Person的apply方法")
    var p = new Person(id, name)
    p
  }
}

object Test {
  def main(args: Array[String]): Unit = {
    val person = Person(1, "张三")
    person.show()
  }
}

main方法 和 扩展App特质

def main(args: Array[String]){}

object TestApp extends App {
  println(
11)
}

继承

特质

猜你喜欢

转载自blog.csdn.net/mua_mua_mua/article/details/83151903
今日推荐