zoukankan      html  css  js  c++  java
  • 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对应的缓存失效
  • 相关阅读:
    模拟手机售电影票
    flex布局
    如何制作快速加载的HTML页面
    css布局列表,自适应
    iOS项目中常见定时器
    iOS中TableView的分割线顶格样式的实现
    iOS本地化项目上传到gitHub
    iOS初学者易懵逼的Timer延时
    iOS同种界面moda和push方式切换
    iOS之push和modal大不同
  • 原文地址:https://www.cnblogs.com/luliangliang/p/9600349.html
Copyright © 2011-2022 走看看