• static、final、transient等关键字的作用


    static

    • static方法:静态方法,不依附与对象,可以直接通过类来获取使用。由于这个特性,静态方法不能调用非静态方法或成员变量,因为这两者都依附于对象。  而非静态方法可以调用静态成员变量或方法。
    • static变量:静态变量,被所有对象共享,类初次加载的时候被初始化。而非静态变量在创建对象的时候被初始化。
    • static代码块:可以用来优化程序性能,原因:因为静态代码块只会在类初始化的时候执行一次,按static的顺序的执行。
    • static内部类:静态内部类可以拥有静态成员,只能访问外部类的静态成员。静态内部类创建方式与非静态内部类创建方式不同。//假设类A有静态内部类B和非静态内部类C,创建B和C的区别为: A a=new A();    A.B b=new A.B();    A.C c=a.new C();
    • static导包:将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便

    final

    • final类:该类不可被继承,final类的成员方法被隐式的指定为final方法,final类中的成员变量可根据情况是否final修饰。
    • final方法:禁止子类对该方法的修改。
    • final变量:如果是基本数据类型的变量,则值不能改变。如果是引用类型的变量,那么该引用不能改变,大师对象本身可以改变。

    transient 

    • 被transient修饰过后的变量,不再是对象持久化的一部分
    • transient只能修饰变量,不能修饰方法或和类。本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
    • 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化
    • 注意:对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关

    Volatile

    • 内存可见
    • 禁止重排
    • 不能保证原子性
    • 实现的原理:加入volatile后,汇编代码会多出一个lock的前缀指令,该指令保证了禁止重排,强制更新主内存,其他CPUT对应的缓存失效
  • 相关阅读:
    mysql修改密码策略
    YUM方法安装mysql5.7版本
    redis-5.0.5安装(linux centos)
    centos7 安装php7扩展
    Linux df
    Spotlight监控工具使用
    Linux 安装iostat命令
    转载:数据库连接池到底应该设置多大?
    cqlsh 一个错误
    Linux Top命令详解
  • 原文地址:https://www.cnblogs.com/luliangliang/p/9600349.html
Copyright © 2020-2023  润新知