Object 类详解代码块单例设计模式

2023年 8月 13日 115.9k 0

Object 类详解

equals

  • == 是一个比较运算符既可以判断基本类型,又可以判断引用类型
  • ==·如果判断基本类型,判断的是值是否相等。示例: int i=10; double d=10.0:
  • ==·如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
  • equals: 是Object类中的方法,只能判断引用类型
  • 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如IntegerString
  • hashCode

  • 提高具有哈希结构的容器的效率!
  • 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的!
  • 两个引用,如果指向的是不同对象,则哈希值是不一样的
  • 哈希值主要根据地址号来的!, 不能完全将哈希值等价于地址。
  • 后面在集合,中 hashCode 如果需要的话,也会重写
  • toString

  • 默认返回:全类名+@+哈希值的十六进制,【查看 Object 的 toString 方法】
  • 子类往往重写 toString 方法,用于返回对象的属性信息
  • 重写 toString 方法,打印对象或拼接对象时,都会自动调用该对象的 toString 形式.当直接输出一个对象时,toString 方法会被默认的调用, 比如 System.out.println(monster); 就会默认调用 monster.toString()
  • finaliz

  • 当对象被回收时,系统自动调用该对象的 finalize 方法。子类可以重写该方法,做一些释放资源的操作
  • 什么时候被回收:当某个对象没有任何引用时,则 jvm 就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来 销毁该对象,在销毁该对象前,会先调用 finalize 方法。
  • 垃圾回收机制的调用,是由系统来决定(即有自己的 GC 算法), 也可以通过 System.gc() 主动触发垃圾回收机制,但是我们在实际开发中,几乎不会运用 finaliz
  • 类方法使用注意事项和细节讨论

    什么时候需要用类变量

    当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):

  • 类变量与实例变量(普通属性)区别类变量是该类的所有对象共享的,而实例变量是每个对象独享的。
  • 加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量
  • 类变量可以通过类名.类变量名或者对象名.类变量名来访问,
  • 但java设计者推荐我们使用类名.类变量名方式访问。【前提是满足访问修饰符的访问权限和范围】

  • 实例变量不能通过类名.类变量名方式访问。
  • 类变量是在类加载时就初始化了,也就是说,即使你没有创建对象,只要类加载了就可以使用类变量了
  • 类变量的生命周期是随类的加载开始,随着类消亡而销毁。
  • main()方法

  • 在 main()方法中,我们可以直接调用 main 方法所在类的静态方法或静态属性。
  • 但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静 态成员
  • 代码化

    基本介绍

    代码化块又称为初始化块,属于类中的成员[即是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。

    但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。

    [修饰符]{
    代码

    };

    说明注意:
    1)修饰符可选,要写的话,也只能写static
    2)代码块分为两类,使用static修饰的叫静态代码块,没有static修饰的,叫普通代码块/非静态代码块

    3)逻辑语句可以为任何逻辑语句(输入输出、方法调用、循环、判断等)
    4)**;**号可以写上,也可以省略。

    自我理解:

  • 相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化的操作
  • 如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性
  • 代码块使用注意事项和细节讨论

    1)static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就执行。
    2)类什么时候被加载[重要背!]
    2.1.创建对象实例时(new)
    2.2.创建子类对象实例,父类也会被加载
    2.3.使用类的静态成员时(静态属性,静态方法)
    3)普通的代码块,在创建对象实例时,会被隐式的调用。被创建一次,就会调用一次。
    如果只是使用类的静态成员时,普通代码块并不会执行。
    小结:

  • static代码块是类加载时,执行,只会执行一次

  • 普通代码块是在创建对象时调用的,创建一次,调用一次

  • 类加载的3种情况,

  • ​ 3.1、命令行启动应用时候由JVM初始化加载

    ​ 3.2、通过Class.forName ()方法动态加载

    ​ 3.3、通过ClassLoader.loadClass ()方法动态加载

    4)创建一个对象时,在一个类调用顺序是:(重点,难点):

    4.1调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)
    

    ​ 4.2调用普通代码块和普通属性的初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如s果有多个普通代码块和多个普通属性初始化,则按定义顺序调用)

    4.3调用构造方法
    

    单例设计模式

    所谓类的单例设计模式, 就是采取一定的方法保证在整个的软件系统中,对某个类只能存 在一个对象实例,并且该类只提供一个取得其对象实例的方法

    单例模式有两种方式:

    2.1饿汉式

    2.2懒汉式
    单例模式应用实例
    演示饿汉式和懒汉式单例模式的实现:
    1)构造器私有化=》防止直接 new
    2)类的内部创建对象
    3)向外暴露一个静态的公共方法。Getinstance

    饿汉式VS懒汉式

  • 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例而懒汉式是在使用时才创建
  • 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。(后面学习线程后,会完善)
  • 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题
  • 在我们javaSE标准类中,java.lang.Runtime就是经典的单例模式。
  • final关键字

    基本介绍
    final中文意思:最后的,最终的.
    final可以修饰类、属性、方法和局部变量.
    在某些情况下,程序员可能有以下需求,就会使用到final:

    1)当不希望类被继承时,可以用final修饰.

    2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰。

    3)当不希望类的的某个属性的值被修改,可以用final修饰

    4)当不希望某个局部变量被修改,可以使用final修饰

    final使用注意事项和细节讨论

    1)final修饰的属性又叫常量,一般用XX XX XX来命名

    2)final修饰的属性在定义时,必须赋初值,并且以后不能再修改,赋值可以在如下位置之一【选择一个位置赋初值即可】:

    2.1定义时:如 public final double TAX RATE=0.08;
    2.1在构造器中
    2.1在代码块中。

    3)如果final修饰的属性是静态的,则初始化的位置只能是

    3.1定义时

    3.2在静态代码块不能在构造器中赋值。

    4)final类不能继承,但是可以实例化对象。

    5)如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承。

    6)一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法。

    7) final不能修饰构造方法(即构造器)

    8 ) (Integer,Double,Float, Boolean等都是final),String也是final类

    9 ) final和 static往往搭配使用,效率更高,不会导致类加载.底层编译器做了优化处理

    class Demo{
    public static final int i=16;//
    static{
    System.out.println("132465“)

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论