zoukankan      html  css  js  c++  java
  • 关于scala的简单理解,对象,属性

    对于scala 的理解。首先从代码方面来理解,首先看下面的代码:

    scala:

    import scala.beans.BeanProperty

    object Demo2 {
    class Person{
    println("shanghai is a good place")
    @BeanProperty var sex: String=_
    }

    def main(args: Array[String]): Unit = {
    val sex = new Person()
    sex.setSex("male")
    print(sex.getSex)
    }
    }
    运行完成之后的结果为:

    shanghai is a good place
    male

    然后通过反编译工具对这段代码进行反编译生成的java代码如下:

    import scala.Predef.;
    import scala.reflect.ScalaSignature;

    public final class Demo2
    {
    public static void main(String[] paramArrayOfString)
    {
    Demo2..MODULE$.main(paramArrayOfString);
    }

    public static class Person
    {
    private String sex;

    public String sex()
    {
    return this.sex; }
    public void sex_$eq(String x$1) { this.sex = x$1; }
    public String getSex() { return sex(); }
    public void setSex(String x$1) { sex_$eq(x$1); }


    public Person()
    {
    Predef..MODULE$.println("shanghai is a good place");
    }
    }
    }

    从上面的反编译的结果可以有如下的总结:

    (1)在scala中,每个类都有主要的构造器,这个构造器和类交织在一起,他的参数直接成了类的字段。主构造器执行类体中的所有语句。

    除了主构造器之外,我们还有辅构造器,这个辅助构造器使用this,这一点和java当中的构造器不同。java的构造器必须和类名相同。这个就比较灵活。

    反编译后的类变成了静态的类。而且是public的静态类。

    (2)然后在类当中定义了一个变量sex,这个变量在scala当中作为私有的成员变量。(详见反编译后的代码),因为是在这个私有的成员中加上了

    @BeanProperty,这个时候就想java中的javabean一样。可以正常的使用get set方法,对变量进行赋值和取值。(反编译后的代码转化成为javabean的形式,但是还是有点不同)

    (3) 在主构造器中的语句都会执行。我们定义的输出。在反编译后可以看到,他会放在构造方法中去执行。

    总结:对于scala的语法。紧凑严谨
  • 相关阅读:
    TCP/IP协议三次握手流程
    MySQL 单向同步复制
    源码编译安装MySQL(rhel6.5)
    Android Studio编译输出apk文件修改文件名
    Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
    android通知栏Notification点击,取消,清除响应事件
    Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸
    Android SharePreference 在主进程和次进程间共享数据不同步出错
    Android API 21 Toolbar Padding
    Android Studio UML 插件 PlantUML 使用语法
  • 原文地址:https://www.cnblogs.com/gxgd/p/8819769.html
Copyright © 2011-2022 走看看