• Java static , final和常量设计


    staic

    static 是静态的,Java中特殊的关键字。
    Java中的static关键字(可作用在)
    1.变量 2.方法 3.类 4.匿名方法块
    static 变量-个类的所有对象的共有成员变量。

    • static变量只依赖于类存在(通过类既可以访问),不依赖于对象实例存在。即通过类名即可访问。
    • 同一个类所有的对象实例,都共享存储在一个空间的静态变量。
      静态变量在类中的作用如下:
      1.静态变量可以被类的所有实例共享,因此静态变量可以作为实例之间的共享数据,增加实例之间的交互性。
      2.如果类的所有实例都包含一个相同的常量属性,则可以把这个属性定义为静态常量类型,从而节省内存空间。例如,在类中定义一个静态常量 PI。
      注意:在类中定义静态的属性(成员变量),在 main() 方法中可以直接访问,也可以通过类名访问,还可以通过类的实例对象来访问。

    static 方法

    • 静态方法也无需通过对象来引用,而通过类名可以直接访问。
    • 在静态方法中,只能使用静态变量,不能使用非静态变量。
    • 静态方法禁止使用非静态方法。
      静态方法与实例方法的区别如下:
      1.静态方法不需要通过它所属的类的任何实例就可以被调用,因此在静态方法中不能使用 this 关键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法。另外,和 this 关键字一样,super 关键字也与类的特定实例相关,所以在静态方法中也不能使用 super 关键字。
      2.在实例方法中可以直接访问所属类的静态变量、静态方法、实例变量和实例方法。
      static块
    • 只在类第一次被加载时调用。
    • 换句话说,在程序运行期间,这段代码只运行一次。
    • 执行顺序:static块 -> 匿名块 -> 构造函数。

    总结:
    -static变量:不管有多少个对象,内存中只有一份。
    -static方法:可以用类名直接引用,无需用类名来引用。
    -stacti块:只执行一次,并且static块 -> 匿名块 -> 构造函数。
    注:不建议编写块代码,因为块代码会给程序带来混淆。建议将块代码封装成函数再调用。

    单例模式

    单例模式,又名单态模式,Singleton
    限定某一个类在运行过程中,只能保留一个实例对象在内存里。
    单例模式:

    • 保证一个类有且只有一个对象。
    • 采用static来共享对象实例
    • 采用private构造函数,防止外界new操作。

    总结:

    • 设计模式:是经过验证的,用于某些场合的解决方案。
    • GoF提出23种设计模式:创建型,结构型和行为型。
    • 单例模式保证一个类在内存空间中只有一个对象。

    final

    Java中的final关键字同样可以用来修饰 1.类 2.方法 3.字段
    final的类不能被继承
    父类中如果有final的方法,子类中不能改写此方法。
    final对象的指针固定了,因此因此只能修改对象内部的值,而不能指向一个新的对象(内存空间)。
    final的变量,不能再次赋值。

    • 如果是基本类型的变量,不能修改其值。
    • 如果是对象实例,则不能修改其指针。(但是可以修改对象内部的值)
      注意:注意:final 修饰的变量不能被赋值这种说法是错误的,严格的说法是,final 修饰的变量不可被改变,一旦获得了初始值,该 final 变量的值就不能被重新赋值。

    总结:
    1.final类:不能被继承
    2.final方法:不能被子类改写
    3.final变量:基本类型不能修改值,对象类型不能修改指针。

  • 相关阅读:
    [极客大挑战 2019]BuyFlag
    [极客大挑战 2019]BabySQL
    [网鼎杯 2018]Fakebook
    C语言学习笔记_内存数据和字符串
    剑指OFFER_数据流中的中位数
    剑指OFFER_滑动窗口的最大值
    剑指OFFER_矩阵中的路径
    C语言学习笔记_指针相关知识
    剑指OFFER_机器人的运动范围
    剑指OFFER_剪绳子
  • 原文地址:https://www.cnblogs.com/Acapplella/p/13326424.html
Copyright © 2020-2023  润新知