当前位置: 首页 > news >正文

四川省建设厅官方网站三内人员深圳营销策划公司

四川省建设厅官方网站三内人员,深圳营销策划公司,wordpress 菜单结构,做网站界面设计注意什么目录 一、Object类:万物之源的方法解析 1. 核心方法全景图 2. 关键方法深度剖析 2.1 equals与hashCode的契约关系 2.2 clone方法的三重陷阱 2.3 finalize方法的死亡警告 二、面向对象三大支柱解析 1. 封装(Encapsulation)安全防线 2…

目录

一、Object类:万物之源的方法解析

1. 核心方法全景图

2. 关键方法深度剖析

2.1 equals与hashCode的契约关系

2.2 clone方法的三重陷阱

2.3 finalize方法的死亡警告

二、面向对象三大支柱解析

1. 封装(Encapsulation)安全防线

2. 继承(Inheritance)的继承与突破

3. 多态(Polymorphism)的动态之美

三、十大经典陷阱全解

陷阱1:equals方法错误覆盖

陷阱2:hashCode可变对象

陷阱3:构造方法中调用可覆盖方法

陷阱4:数组元素类型擦除

陷阱5:静态方法"覆盖"

陷阱6:clone方法浅拷贝灾难

陷阱7:多态中的private方法

陷阱8:接口默认方法冲突

陷阱9:继承破坏封装

陷阱10:错误使用instanceof

四、最佳实践指南

1. Object方法规范

2. 面向对象设计原则

3. 并发环境安全策略

深度总结


一、Object类:万物之源的方法解析

1. 核心方法全景图

public class Object {// 构造方法(隐式存在)public Object() {}// 对象标识方法public native int hashCode();public boolean equals(Object obj) { /*...*/ }// 线程通信方法public final void wait() throws InterruptedException { /*...*/ }public final void notify() { /*...*/ }// 类型信息方法public final Class<?> getClass() { /*...*/ }public String toString() { /*...*/ }// 对象拷贝方法protected native Object clone() throws CloneNotSupportedException;// 资源回收方法protected void finalize() throws Throwable { /*...*/ }
}

2. 关键方法深度剖析

2.1 equals与hashCode的契约关系

@Override
public boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;return age == user.age && Objects.equals(name, user.name);
}@Override
public int hashCode() {return Objects.hash(name, age); // 必须与equals比较字段一致
}

黄金法则

  1. equals返回true时,hashCode必须相同

  2. hashCode相同,equals不一定为true

  3. 违反规则将导致HashMap等集合类工作异常

2.2 clone方法的三重陷阱

class Data implements Cloneable {int[] values = {1,2,3};@Overridepublic Data clone() {try {Data cloned = (Data) super.clone();cloned.values = values.clone(); // 深拷贝数组return cloned;} catch (CloneNotSupportedException e) {throw new AssertionError();}}
}

避坑指南

  • 必须实现Cloneable接口(标记接口)

  • 浅拷贝可能导致数据共享

  • 深拷贝需要逐层处理引用对象

2.3 finalize方法的死亡警告

// 反例:依赖finalize释放资源
@Override
protected void finalize() throws Throwable {closeFile(); // 不保证执行时间,甚至可能永不执行
}// 正解:显式资源管理
public void close() {closeFile();// 标记对象为可回收状态
}

二、面向对象三大支柱解析

1. 封装(Encapsulation)安全防线

public class BankAccount {private double balance; // 私有化数据// 受控访问方法public synchronized void deposit(double amount) {if (amount > 0) balance += amount;}public synchronized void withdraw(double amount) {if (amount <= balance) balance -= amount;}
}

封装层级控制

修饰符类内部同包类子类其他包
private
default
protected
public

2. 继承(Inheritance)的继承与突破

class Animal {public void move() {System.out.println("Animal moving");}
}class Bird extends Animal {@Override  // 明确表示方法覆盖public void move() {super.move();  // 调用父类实现System.out.println("Flying");}
}

继承限制

  • 单继承限制(Java类只能单继承)

  • 构造方法不可继承

  • final类/方法不可继承/覆盖

3. 多态(Polymorphism)的动态之美

Animal animal = new Bird();
animal.move(); // 运行时类型决定方法调用(输出Flying)List<Animal> zoo = Arrays.asList(new Bird(), new Fish());
zoo.forEach(Animal::move); // 不同子类表现不同行为

实现条件

  1. 继承关系或接口实现

  2. 方法覆盖(override)

  3. 向上转型(父类引用指向子类对象)

三、十大经典陷阱全解

陷阱1:equals方法错误覆盖

// 错误:参数类型不是Object
public boolean equals(User other) {return this.name.equals(other.name);
}// 正确写法
@Override
public boolean equals(Object o) {// ...类型检查与转换
}

陷阱2:hashCode可变对象

class User {String name;@Overridepublic int hashCode() {return name.hashCode();}
}// 存入HashMap后修改name值,导致无法检索
User u = new User();
map.put(u, 1);
u.name = "new";  // hashCode改变
map.get(u); // 返回null

陷阱3:构造方法中调用可覆盖方法

class Base {public Base() {init();  // 危险!}protected void init() {}
}class Derived extends Base {private String data;@Overrideprotected void init() {data.length(); // NPE,此时data尚未初始化}
}

陷阱4:数组元素类型擦除

Object[] array = new String[10];
array[0] = 123; // 运行时抛出ArrayStoreException

陷阱5:静态方法"覆盖"

class Parent {static void method() {System.out.println("Parent");}
}class Child extends Parent {static void method() { // 实际是隐藏,不是覆盖System.out.println("Child");}
}Parent p = new Child();
p.method(); // 输出Parent(按编译时类型调用)

陷阱6:clone方法浅拷贝灾难

class Data implements Cloneable {int[] arr = {1,2,3};@Overridepublic Data clone() {return (Data) super.clone(); // 浅拷贝导致数组共享}
}Data d1 = new Data();
Data d2 = d1.clone();
d2.arr[0] = 100; // d1的数组也被修改

陷阱7:多态中的private方法

class Parent {private void method() {System.out.println("Parent");}
}class Child extends Parent {public void method() { // 实际是全新方法,不是覆盖System.out.println("Child");}
}Parent p = new Child();
p.method(); // 编译错误,Parent.method()不可见

陷阱8:接口默认方法冲突

interface A {default void method() {System.out.println("A");}
}interface B {default void method() {System.out.println("B");}
}class C implements A, B { // 编译错误,必须显式解决冲突@Overridepublic void method() {A.super.method(); // 选择实现}
}

陷阱9:继承破坏封装

public class Account {protected double balance; // 暴露内部状态// 子类可能直接修改balance导致状态不一致
}// 正确做法
private double balance;
protected void setBalance(double newBalance) {// 添加校验逻辑
}

陷阱10:错误使用instanceof

Object obj = "hello";
if (obj instanceof String str) { // Java 16+模式匹配System.out.println(str.length());
}// 反模式:未检查类型直接转换
String s = (String) new Object(); // ClassCastException

四、最佳实践指南

1. Object方法规范

  • 重写equals必须同时重写hashCode

  • toString()应返回有意义的描述信息

  • 避免使用finalize(),改用try-with-resources

  • 实现Cloneable接口时进行深拷贝

2. 面向对象设计原则

  1. 单一职责原则:每个类只做一件事

  2. 开放封闭原则:对扩展开放,修改关闭

  3. 里氏替换原则:子类可以替换父类

  4. 接口隔离原则:细化接口功能

  5. 依赖倒置原则:依赖抽象而非实现

3. 并发环境安全策略

// 线程安全的账户操作
public class SafeAccount {private final Object lock = new Object();private double balance;public void transfer(double amount) {synchronized(lock) {balance += amount;}}
}

深度总结

Object类的核心地位:作为所有类的超类,其方法规范是Java类型体系的基石,正确理解和实现这些方法是编写健壮Java程序的前提。

面向对象本质:通过封装隐藏实现细节,利用继承建立类型层次,借助多态实现灵活扩展,三者协同构建可维护、可扩展的软件系统。

避坑关键点

  • equals/hashCode必须成对重写

  • clone方法需谨慎处理对象引用

  • 构造方法中避免调用可覆盖方法

  • 多态行为受限于方法可见性

  • 接口默认方法需解决冲突

掌握这些核心机制和最佳实践,能够显著提升面向对象设计能力。建议在IDE中开启代码检查(如SonarLint的equals检查规则),并通过单元测试验证对象相等性和多态行为,确保系统健壮性。

http://www.dtcms.com/a/483763.html

相关文章:

  • MySQL中的“事务”
  • 上海做网站公司有哪些seo发布网站
  • 湖北长安建设集团股份有限公司网站深圳企业注销流程
  • 网站搭建收费参考成功的品牌推广案例分析
  • 贵阳网站建设优化wordpress主题分享吧
  • 【Java-collection体系集合】
  • 网站上传面板上海网站开发技术最好公司
  • 免费网站开发自己注册域名怎么注册
  • 网站可信网店运营ppt
  • 信息安全的定义与重要性
  • 公司做网站服务费怎样做账H5平台网站建设
  • 数据结构1:顺序表
  • 网站外链要怎么做黑马程序员学费多少钱
  • 江苏网站建设怎么样做本地婚恋网站
  • 在线培训网站温州网站建设制作设计公司
  • 做公众号推送的网站seo的含义是什么意思
  • typescript 写鼠标监听事件应该怎么写
  • 著名设计案例网站怎么样做英文网站
  • 搬瓦工如何搭建做网站企业 网站备案 法人
  • 分割等和子集 Java
  • 景点网站应该怎么做目前做win7系统最好的网站
  • 漳州市建设局网站6机械设计网站有哪些
  • 3.git的分支携带问题是什么?怎么解决?
  • 网站建设与维护面试免费网站申请域名39939cn
  • Chrome和IE获取本机ip地址
  • 个人网站建设及实现外贸是什么工作
  • 【下载安装】navicate
  • 河北保定建设集团招聘信息网站游戏推广赚佣金
  • 找人制作网站 优帮云wordpress apache 伪静态
  • 大模型前世今生(十四):保持训练稳定性