1 scala中简单类的定义和调用
class One {
private var age:Int=8
def say(x:Int)=this.age=x
def hello=println("age:"+age)
}
注意:
scala中没有参数的函数或方法,调用时可以不使用() ,但是hello方法定义时没有加入(),所以调用时也不能使用();
def main(args: Array[String]): Unit = {
var x:One=new One
x.say(18)
x.hello
}
2 scala类属性生成的getter和setter方法
class Hello{
private var age:Int=8
var sname:String="hello"
}
通过编译命令编译该文件
> scalac d.scala
生成编译后的文件Hello.class
通过javap命令查询编译成功的字节码文件
>javap -private Hello
Compiled from "d.scala"
public class Hello {
private int age;
private java.lang.String sname;
private int age();
private void age_$eq(int);
public java.lang.String sname();
public void sname_$eq(java.lang.String);
public Hello();
}
注意:
私有属性生成对应私有的getter和setter方法
重写对属性的get和set方法
class Hello{
private var age:Int=8
var sname:String="hello"
def xage_=(x:Int){
this.age=x
}
def xage=this.age
}
调用
var x:Hello=new Hello
x.xage=68
val y=x.xage
注意:
如果属性是val,该属性只有getter方法
3 Bean属性
首先导入
import scala.beans.BeanProperty
class Three {
@BeanProperty var age:Int=_
}
调用中证明@BeanProperty标记的属性生成了四个方法
(
public int age();
public void age_$eq(int);
public void setAge(int);
public int getAge();
public Three();
)
var x=new Three
x.setAge(8)
x.getAge
x.age=6
x.age=66
3 辅助构造器
scala中可以有多个辅助构造器,辅助构造器特点:
A:名称必须是this;
B:辅助构造器中第一句必须通过this调用主构造器或其他已经声明的辅助构造器
class Four {
def this(age:Int){
this()
println("constructor age:"+age)
}
}
4 主构造器
主构造器的特点A:参数放在类名之后,如果参数包含var或val则该参数被编译成成员属性;
B:在类中的书写的所以语句当做主构造器中的代码;
5 单例对象
scala类中没有静态方法或静态属性,但是scala的object对象提供class的单个实例,注意单例对象不能提供
构造函数;
object Three {
def say: Unit ={
println("three say...")
}
def main(args: Array[String]): Unit = {
Three.say
}
}
6 伴生对象
在类的同一个文件中提供与类同名的伴生对象,该伴生对象可以被类中方法和属性调用
class Three{
private var xage:Int=9
def say: Unit ={
println("three say...")
Three.incre
}
}
object Three {
def incre={
printf("ok..........")
}
}
apply方法返回伴生对象
自定义apply方法,并实例化
class Three(var xname:String){
println("i am "+xname)
}
object Three{
def apply(x:String): Three = new Three(x)
}
调用apply方法
val h=Three.apply("xx")
val h2=Three("abc")