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

Object 类详解

equals

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

hashCode

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

toString

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

finaliz

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

类方法使用注意事项和细节讨论

什么时候需要用类变量

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

  1. 类变量与实例变量(普通属性)区别类变量是该类的所有对象共享的,而实例变量是每个对象独享的。
  2. 加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量
  3. 类变量可以通过类名.类变量名或者对象名.类变量名来访问,

但java设计者推荐我们使用类名.类变量名方式访问。【前提是满足访问修饰符的访问权限和范围】

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

main()方法

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

代码化

基本介绍

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

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

[修饰符]{ 代码

};

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

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

自我理解

  1. 相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化的操作
  2. 如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性

代码块使用注意事项和细节讨论

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

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

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

  3. 类加载的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懒汉式

  1. 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例而懒汉式是在使用时才创建
  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。(后面学习线程后,会完善)
  3. 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题
  4. 在我们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") }

相关推荐
㳺三才人子5 小时前
初探 Flask
后端·python·flask·html
星栈独行5 小时前
我在 Rust 全栈项目里用 JWT 做无状态认证
开发语言·后端·rust·前端框架·开源·github·web
Lei活在当下5 小时前
先用起来,再理解,关于协程Coroutine应该知道的事
android·java·jvm
Java爱好狂.5 小时前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
陈随易6 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
tongluowan0076 小时前
以ReentrantLock为例解释AQS的工作流程
java·模板方法模式·aqs·reentrantlock
装不满的克莱因瓶6 小时前
SpringBoot 如何将 lib 目录中jar包打包进最终的jar包里面
spring boot·后端·maven·jar·mvn
ltl7 小时前
Transformer 原论文实验结果:为什么 28.4 BLEU 足以改写路线图
后端
身如柳絮随风扬7 小时前
Java 项目打包与部署完全指南:JAR vs WAR,从构建到运行
java·firefox·jar
云烟成雨TD7 小时前
Spring AI Alibaba 1.x 系列【62】时光旅行(Time-Travel)
java·人工智能·spring