码迷,mamicode.com
首页 > 其他好文 > 详细

Scala主构造器和辅助构造器

时间:2014-09-05 16:05:21      阅读:875      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   java   ar   strong   文件   div   

注:1.本文主要参考自《快学Scala》2.使用jd-gui反编译

  Scala的构造方法跟Scala很相似,也可以有任意多的构造器。在Scala中构造器分为主构造器和辅助构造器

在Scala中可以包括一个主构造器和任意多个辅助构造器

主构造器

在Scala中,每个类都有主构造器。而且主构造器的定义是跟类定义交织在一起的。

主构造器的参数是直接放置在类名后面的,如下:

class Person(val name:String,val age:Int) {
   //your code
}

主构造器还会执行类语句(不属于任何方法的语句)

class Person(val name:String,val age:Int) {   
  println("hello") //该语句属于主构造器
}

主构造器让人感到疑惑的地方主要在于:构造器参数使用不同的形式传递,生成的class文件也是不同的,我们随便列举几种

形式1-val类参数:(在这种形式中,类参数会作为class文件的字段,并且会生成scala形式的getter)

class Person4(val name:String) {
   
}

生成的class文件如下:

public class Person4
{
  private final String name;
  
  public String name()
  {
    return this.name;
  }
  
  public Person4(String name) {}
}

形式2-var参数:(该形式的类参数会作为class文件的字段出现,并且会生成scala形式的getter和setter)

class Person4(var name:String) {
   
}

生成的class文件如下:

public class Person4
{
  private String name;
  
  public Person4(String name) {}
  
  public void name_$eq(String x$1)
  {
    this.name = x$1;
  }
  
  public String name()
  {
    return this.name;
  }
}

形式3-普通方法参数

1.如果类参数没有在类方法中用到,该类参数相当于只用于类的主构造函数。

class Person4(name:String) {
   
}

该形式生成的class文件如下

public class Person4
{
  public Person4(String name) {}
}

2.如果类参数在类方法中有用到的话,相当于private[this],即相当于对象私有

class Person4(name:String) {
   def sayHi(){
     println(name)
   }
}

生成的class文件如下

public class Person4
{
  private final String name;
  
  public void sayHi()
  {
    Predef..MODULE$.println(this.name);
  }
  
  public Person4(String name) {}
}

 

主构造器参数还可以是private var、private val形式,这些都比较简单,跟val、var相似,只是get或者set也是private的而已

读者可以自己验证。

 

辅助构造器

在scala中,辅助构造器的名字必须是this(相比于java中,当类名字改变的时候,就不必在修改构造函数的名字了),而且每个辅助构造器都必须以

主构造函数或者先前定义的辅助构造器开始定义,否则编译不通过。

class Person4(name:String) {
  
  var age:Int = 0
  var city:String = ""
  
  def this(name:String,age:Int,city:String){
    this(name)
    this.age = age
  }
  
}

Scala主构造器和辅助构造器

标签:style   blog   color   使用   java   ar   strong   文件   div   

原文地址:http://www.cnblogs.com/sysman/p/3958157.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!