美文网首页
关于Android中不太常用的关键字

关于Android中不太常用的关键字

作者: 2a4cbef4cb15 | 来源:发表于2019-08-21 17:07 被阅读0次

    final

    • 修饰的属性为常量,只能赋值一次,复制后不能被修改,该常量必须被初始化,且初始化必须在声明时或在构造方法中直接赋值。(当我们用static final修饰一些容器类例如ArrayList,HashMap的实例变量,容器不能改变但是可以修改容器里存放的数据)
    • 修饰方法时,修饰的方法不能被子类重写,
    • 修饰类时,类不能被继承

    有时候有人会问final修饰方法时与private修饰的方法有什么区别?
    其实这两个关键字是没有什么关系的,private是表示可见性的关键字,而final是一个表示禁止覆盖的关键字,只不过他们在修饰方法时达到的效果是一样的
    此处参考
    https://www.iteye.com/blog/zangxt-461227

    static

    static可以修饰属性、方法、代码块、内部类(静态内部类或嵌套内部类)

    • static修饰的属性在类加载的时候初始化,初始化后可以改变
    • static修饰的属性所有对象都只有一个值
    • static修饰的属性强调他们只有一个

    static修饰属性、方法、代码块跟该类的具体对象无关,不创建对象也能调用static修饰的属性、方法等
    static与“this、super”不在一起使用,static跟对象无关,而this、super正好跟具体的对象有关。

    static不能修饰局变量。

    static final

    static修饰的属性强调他们在类里只有一个,final修饰的属性表明该属性是一个常数(创建后不能被修改)。

    static final修饰的属性表示一旦被赋值就不可以再修改,并且可以通过类名访问,并且该属性只能在声明时赋值,不能再构造方法中进行赋值。

    static final修饰方法,表示该方法不能被重写,且可以在没有实体对象的时候用类名直接调用。

    transient

    • 一旦变量被transient修饰,变量将不再是对象序列化的一部分,该变量内容在序列化后无法获得访问,一个静态变量不管是否被transient修饰,均不能被序列化。
    • transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

    volatile

    volatile能实现变量的修改可见性。被volatile修饰的成员变量每次被线程访问时,都强迫从共享内存中重读该成员变量的值,而且,当成员变量发生变化时,强迫线程将变化后的值写回到共享内存中,这样在任何时候,两个不同线程总是看到某个成员变量的同一个值。
    但是volatile不能保证在对变量进行操作时候的原子性。
    volatile修饰的变量可以保证有序性。volatile标记的变量不会被编辑器优化,禁止指令重排。当对volatile修饰的属性进行读写操作时(单线程),其前面的代码必须已经执行完成,结果对后续的操作可见。

    相关文章

      网友评论

          本文标题:关于Android中不太常用的关键字

          本文链接:https://www.haomeiwen.com/subject/iyqisctx.html