Scala入门02

来源:互联网 发布:ai软件工具介绍 编辑:程序博客网 时间:2024/05/29 18:06
  • 练习代码01:
package com.lijie.test//第一个private表示包可见性在com.lijie下面的包可以访问这个类,其他包不能访问//第二个private表示私有构造方法,表示只能在伴生对象才能new//protected也可以修饰表示子类能访问private[lijie] class Scala01 private {  //不可以修改  val a = "10086"  //可以修改  var b = 123  //伴生对象能使用  private var c: String = "lijie"  //本类才能使用  private[this] var d: Int = 10086  //默认没有值,需要用_或者null表示  var e:String = _  //可以使用本类的private[this]属性  private def fun01 = {    println(d)  }  private[this] def fun02 = {    println(Scala01.CON)  }  //可以访问本类的private[this]方法  private def fun03 = {    fun02  }  //指定包访问  private[test] def fun04 = {    println(d)  }}//伴生对象,一般和类在同一个文件里面,名字和类一样object Scala01 {  //伴生对象里面定义的都是常量,并且可以控制包访问权限  private[lijie] val CON = "lijie"  def main(args: Array[String]): Unit = {    val s = new Scala01//    print(s.a)//    s.b = 1232//    s.fun01//    s.fun04    s.e  }}
  • 练习代码02
package com.lijie.test//类名后面的是该类的主构造器,如果不写和java一样有个默认的无参构造//如果写了有参数的构造器,无参数的构造器就不提供,和java一样//主构造器参数相当于已经定义了两个成员变量了//前面没有val或者var表示private[this],比如下面的c//可以定义初始值,如下d默认为10011//当定义初始值并且用val,表示对象生成了就不能改变这个值,但是可以在new对象的时候构造函数传入其它值class Scala02(val a: Int, var b: String, c: String,var d:Int = 10011,val e:String = "world") {}object Scala02 {  def main(args: Array[String]): Unit = {    val obj01 = new Scala02(10086, "lijie","hello",10086,"aaa")    //如果定义了默认值,new对象可以不传这个默认值    val obj02 = new Scala02(10086,"lijie","hello")  }}
  • 练习代码03
package com.lijie.testimport scala.io.Sourceclass Scala03 {  //下面表示主构造器里面的方法---------------------------  //这是在主构造器,在new的时候会执行,这里在new时候会被初始化  var a = 10086  //new的时候被执行  println(a)  //上面表示主构造器里面的方法---------------------------  //这个是成员方法  def method01(a: Int, b: Int) = {    a + b  }}object Scala03 {  def main(args: Array[String]): Unit = {    val obj01 = new Scala03  }}
  • 练习代码04
package com.lijie.test//object 单例对象object Scala04 {  def main(args: Array[String]): Unit = {    val obj01 = Scala04    val obj02 = Scala04    //com.lijie.test.Scala04$@72b6507e    //com.lijie.test.Scala04$@72b6507e    println(obj01)    println(obj02)  }}
  • 练习代码05
package com.lijie.testclass Scala05(a: Int) {}object Scala05 {  def apply() = {    println("执行了apply方法")  }  def apply(name: String) = {    println("执行了apply方法" + name)  }  //技巧,使用apply创建对象  def apply(a: Int) = {    new Scala05(a)  }  def main(args: Array[String]): Unit = {    //这样会调用object的apply()的方法    val obj01 = Scala05()    val obj02 = Scala05("lijie")    //相当于调用的List或Array的apply的apply方法    List(1, 2, 3, 4, 5)    Array(1, 2, 3, 4, 5)    //可以使用apply方法创建对象,如上面的def apply(a: Int)方法    val obj03 = Scala05(10086)    //com.lijie.test.Scala05@66987c7d输出    println(obj03)  }}

练习代码06

package com.lijie.test//主构造器class Scala07(val a: Int) {  var b: String = _  //辅助构造器  def this(a: Int, b: String) {    //必须先调用主构造器    this(a)    this.b = b  }}//extends App表示应用程序对象,不用main方法就可以执行object Scala07 extends App{  object name extends App {    //主构造器创建对象      val obj01 = new Scala07(1)      //辅助构造器创建对象    val obj02 = new Scala07(1,"lijie")  }}
1 0