直接运行scala源码
scala E:Demo.scala
运行字节码
scala E:Demo
查看字节码
javap -p E:workspace_ideamyscala argetclassesDemo.class
scala没有静态成员,静态成员放到object中
object是单例对象,存放的是所有的静态成员,编译后,对应的是java的标准单例模式
scala中成员变量的编译
//源码
class S { var v1 = 1 private var v11 = 1 val v2 = 2 private val v22 = 2 @BeanProperty //用于生成java的标准get和set方法,不能用于 private 变量 var v3 = 3 @BeanProperty val v33 = 3 }
//编译后
public class S { private int v1; private int v11;
private final int v2; private final int v22;
private int v3; private final int v33;
public int v1(); public void v1_$eq(int);
private int v11(); private void v11_$eq(int);
public int v2();
private int v22();
public int v3(); public void v3_$eq(int);
public void setV3(int);
public int v33();
public int getV3();
public int getV33(); public S(); }
主构造之默认空参构造
class 主构造{} //或class 主构造 (){}
public class 主构造 { public 主构造(); }
主构造之有参构造:含无var、val的参数1
class 主构造 (var v1:Int,val v2:String,v3:Boolean){} //可用private修饰,可给变量赋值默认参数
public class 主构造 { private int v1; private final java.lang.String v2; public int v1(); public void v1_$eq(int); public java.lang.String v2(); public 主构造(int, java.lang.String, boolean); //v3不在成员位置 }
主构造之有参构造:含无var、val的参数2
class 主构造 (var v1:Int,val v2:String,v3:Boolean){ def showV3()={ v3 } }
public class 主构造 { private int v1; private final java.lang.String v2; private final boolean v3; //v3被使用,sh升格为常量字段;该字段是对象私有的 public int v1(); public void v1_$eq(int); public java.lang.String v2(); public boolean showV3(); public 主构造(int, java.lang.String, boolean); }
辅助构造
class 辅助构造{ var v = 0 var n = "" def this(v:Int){ this() this.v=v } def this(v:Int,n:String){ this(v) this.n = n } } object 辅助构造{ //伴生对象 def main(args: Array[String]): Unit = { val v1 = new 辅助构造 val v2 = new 辅助构造(1) val v3 = new 辅助构造(1,"ww") } }
public class 辅助构造 { private int v; private java.lang.String n; public static void main(java.lang.String[]); public int v(); public void v_$eq(int); public java.lang.String n(); public void n_$eq(java.lang.String); public 辅助构造(); public 辅助构造(int); public 辅助构造(int, java.lang.String); }