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

二十四、常用API之Object

前面学习的Java的语法基础, 后面的几篇介绍一下Java的常用API
那么什么是API?(Application Programming Interface,应用程序编程接口
API就是一组用于构建和集成应用软件的定义和协议。
学习类的过程就是学习Java的过程:换句话说学Java就是学习类

  • 首先,了解这个类是干啥的(看介绍)JDK帮助文档由官方类的解释
  • 看构造方法
  • 看常量或者静态属性
  • 看有哪些方法,静态方法还是成员方法 (这个API能实现什么功能)
  • 调用方法 (使用其中的功能)

Object是老祖宗类,所有类都继承Object类并实现了他所有的功能和方法

Object类型的构造方法
1、Object():空参数构造方法,该构造方法内,第一行没有super(),因为Object没有父类

用途:① 创建Object类型的对象

​ ② 子类去使用,所有的子类都会直接的或者间接的访问到这个顶层父类的构造方法
在JAVA中所有的类都默认继承Object类

public class Demo01 {public static void main(String[] args) {//使用空参构造创建对象Object o1 = new Object();Person p = new Person();p.equals(o);//可以调用Object类中的方法,因为所有的类都是Object的子类,所以可以使用Object类中的方法Object o2 = new Person();//父类的引用指向子类对象//Object类型根据多态关系,可以接收任意类型的对象//所有的类都直接的或者间接的继承自Object类}
}
class Person{
}

1.toString

toString()方法在Object类里定义的,其返回值类型为String类型,返回类名和它的引用地址
1、public String toString() 返回对象的字符串表示,默认使用Object类的toString方法打印的对象, 在 idea中我们可以右键生成to String,或者alt+insert生成to String

2、对象返回一个地址值和全类名没有什么意义,所以建议将toString方法进行重写

  • 重写的原则:返回该对象中所有成员变量的值

3、重写之后使用该方法,或者打印一个对象名,都是打印的toString方法返回的结果,重写之后,打印的结果就是一个类名和属性值的集合

public class Demo02 {public static void main(String[] args) {Person p = new Person("小黑",20);System.out.println(p.toString());System.out.println(p);// System.out.println(p.getClass().getName() + "@" + Integer.toHexString(p.hashCode()));//一般自定义类中都要重写toString方法,如果不重写打印地址值没有意义//重写不需要自己手写,而是通过alt + insert 或者鼠标右键生成Person p2 = new Person("小明",222);System.out.println(p2);}
}
class Person{private String name;private int age;
//    如果不重写toString方法,默认调用的就是父类的方法功能    也就是object中的打印全类名+@+哈希值
//    @Override
//    public String toString() {
//        return "Person{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                '}';
//    }public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}
}

2.equals

特点:是一个方法,并非运算符只适用于引用数据类型

1、public boolean equals(Object obj) 比较两个对象是否相同

2、比较的是Object类型,比较的是地址值,地址值是否相同

3、在实际生活中,比较地址值没有意义,因此在自定义类中都需要重写该方法

4、重写的原则:比较两个对象的属性值是否相同,如果属性值相同则认为是同一个对象

5、== 和 equals区别:比较的规则不同:

① ==比较任意数据类型,可以比较基本数据类型,也可以比较引用数据类型 比较的是地址值

② equals只能比较引用数据类型,equals方法在重写之前,比较是两个对象的地址值,重写之后比较的是对象的属性值

public class Demo03 {public static void main(String[] args) {Man m = new Man();System.out.println(m.hashCode());//hashCode方法 重写之前是根据地址值生成的哈希值Man m2 = new Man();      //重写之后,是根据属性值产生对应的哈希值//属性值相同,哈希值相同//属性值不同,哈希值大概率不同System.out.println(m2.hashCode());System.out.println(m == m2);System.out.println(m.equals(m2)); //equals方法重写之前比较的是地址值,重写之后比较的是属性值}
}
class Man{//以后在使用自定义类的时候 一般都要重写 toString 和equals方法private String name;private int age;@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Man man = (Man) o;return age == man.age && Objects.equals(name, man.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}@Overridepublic String toString() {return "Man{" +"name='" + name + '\'' +", age=" + age +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Man() {}public Man(String name, int age) {this.name = name;this.age = age;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 洛杉矶裸机云大宽带服务器的特性和优势
  • 第4章 课程发布:模块需求分析,课程预览(模板引擎 静态页面),课程审核,课程发布(分布式事务,页面静态化:熔断降级),课程搜索(es索引)
  • AR增强现实汽车装配仿真培训系统开发降低投入费用
  • 8. 隔行变色
  • 【思考Spring Security框架的相关问题】
  • 香橙派AIpro做目标检测
  • 【JS|第21期】JavaScript模块化:深入解析三种文件暴露方式
  • buuctf题目讲解-1
  • Docker实战教程(一)
  • 大语言模型里的微调vs RAG vs 模板提示词
  • 用vue2+elementUI封装手机端选择器picker组件,支持单选、多选、远程搜索多选
  • 类与对象-继承-同名成员处理
  • SCSA第四天
  • VSCode设置字体大小
  • 机器学习与深度学习:区别与联系(含工作站硬件推荐)
  • 【刷算法】求1+2+3+...+n
  • ES6系列(二)变量的解构赋值
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript创建对象的四种方式
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • TypeScript实现数据结构(一)栈,队列,链表
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 模型微调
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 系统认识JavaScript正则表达式
  • postgresql行列转换函数
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​批处理文件中的errorlevel用法
  • ​如何使用QGIS制作三维建筑
  • ​油烟净化器电源安全,保障健康餐饮生活
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.ajax中的eval及dataType
  • (~_~)
  • (8)STL算法之替换
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (day6) 319. 灯泡开关
  • (function(){})()的分步解析
  • (分布式缓存)Redis分片集群
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (四)汇编语言——简单程序
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)EXC_BREAKPOINT僵尸错误
  • **python多态
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 使用反射注册事件
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • /proc/stat文件详解(翻译)
  • @31省区市高考时间表来了,祝考试成功
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析