零基础学习java------day11------常用API
API概述
API(application Programming Interface, 应用程序编程接口),是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
比如我需要在一个程序里面嵌入语音识别交互功能,那么这个功能如果让我们自己从零开始实现,肯定是不现实的,所以市场上面就出现了提供这个语音识别功能的公司,这些公司会提供给应用程序编程的接口,大家把这些类称为Xxx Voice API. 我们只需要调用相应的方法就可以实现我们想做的事情,底层实现不需要我们关注。本章涉及的java API指的就是JDK中提供的各种功能的java类
一 Object
1. 构造方法:
public Object()
2. 成员方法
2.1 方法介绍
public int hashCode() 返回对象的hashCode值(默认地址值根据特定算法运算得到的一个整数值),可重写(源码不可见,此方法是用native修饰,用native修饰的方法一般都是用其他语言实现(C),效率高)
public final Class getClass() 返回字节码对象(Class对象),里面包含了类中的所有信息,不能被重写(此方法使用final修饰)
public String toString(): 返回对象的字符串形式(默认是全类名+地址值),可重写
public boolean equals(Object obj): 判断两个对象是否是同一个对象,默认用==实现,可重写
1. hashCode:
一般用hashCode判断两个对象是不是同一个对象,如果hashCode不相等,则肯定不是一个对象,如果hashCode相等,则一定是同一个对象
public class ObjectClass { public static void main(String[] args) { Person p = new Person(); Person p1 = new Person(); System.out.println(p.hashCode()); //804564176 System.out.println(p1.hashCode()); // 1421795058 } } class Person{ String name; }
可见对象p和对象p1不是同一个对象(注释为得到的hashCode值)
2. getClass:
其余代码同上
Class clazz = p.getClass(); // 获取p的字节码对象 Person类的字节码对象 System.out.println(clazz); // class com._51doit.javase.day11.Person System.out.println(clazz.getSimpleName()); // Person System.out.println(clazz.getName()); // com._51doit.javase.day11.Person System.out.println(clazz.getPackage()); // package com._51doit.javase.day11
3. toString:
System.out.println(p.toString()); //com._51doit.javase.day11.Person@2ff4acd0 全类名+@+hashcode值的16进制(hashcode值是10进制) System.out.println(p); //com._51doit.javase.day11.Person@2ff4acd0
println()内部实现是toString,toString源码如下,由此可理解打印的结果
4. equals
格式:对象1.equals(对象2)
(1)equals和 ==
equals:判断两个对象是否是同一个对象(默认是==实现的,可重写)
==:连接基本数据类型(比较的是值)
连接引用数据类型(比较的是地址值)
(2)equals和hashCode的用法
一般我们在比较对象是否是同一个对象的时候,是同时使用hashCode和equals
a. 先用hashCode 作比较:
如果hashCode 不同: 一定不是同一个对象
如果hashCode 相同: 不一定,继续比较equals:( 这样比较的原因:hashCode方法的实现是C语言,效率高)
equals:
true 说明是同一个对象
false: 不是同一个对象
b. 为了保证equals 和hashCode 结果的一致性
我们在重写equals 方法的同时,也要重写hashCode,约定俗称(即当equals定义相等的条件改变时,hashCode也要改变)
自动重写:右键-->source-->generate hashCode and equals
练习
定义一个Teacher类,并创建2个对象,如果两个对象的属性值相同,就认定为同一个对象,打印对象:System.out.println(t),打印的格式为(姓名:张三,年龄:18,工资:20000)
public class Exer1 { public static void main(String[] args) { Teacher t1 = new Teacher(); Teacher t2 = new Teacher(); System.out.println(t1); if(t1.hashCode() == t2.hashCode()) { if(t1.equals(t2)) { System.out.println("true"); }else { System.out.println("false"); } }else { System.out.println("false"); } } } class Teacher{ String name="张三"; int age = 18; double salary = 20000; public String toString() { return "姓名:"+name+",年龄:"+age+",工资:"+salary; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); long temp; temp = Double.doubleToLongBits(salary); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Teacher other = (Teacher) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (Double.doubleToLongBits(salary) != Double.doubleToLongBits(other.salary)) return false; return true; } }
原文地址:https://www.cnblogs.com/jj1106/p/11349199.html
- 机器学习敲门砖:任何人都能看懂的TensorFlow介绍
- 跟小编来体验一下微信小程序
- DeepVO:基于深度循环卷积神经网络的端到端视觉里程计
- 是人工智障还是蹭热度?我一定是抱走了假的二次元老婆
- 重庆日报:丹妮拉·鲁斯认为人工智能是人类的助手
- 深度学习系列(2):前向传播和后向传播算法
- 未来5年,什么样的人最抢手
- 腾讯AI Lab俞栋:AI的发展需要合作伙伴一起AI in ALL
- NLP+2vec︱认识多种多样的2vec向量化模型
- 深度学习数据集(一)
- 将Spring Boot应用程序部署到Bluemix
- Opencv学习(一)——安装配置遇到的问题
- The .NET of Tomorrow
- 国内自动驾驶企业在美国首秀其最新L4级自动驾驶货运卡车
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Java——对象序列化
- Android——MPAndroidChart折线图/柱状图/饼形图的使用
- Java——对String类型的时间进行加减操作
- Java——枚举基础应用总结(多例设计模式、Enum类、枚举的实际应用)
- Java——Annotation注解基本总结(简介、覆写、过期声明、压制警告)
- JavaWeb——一文快速入门BootStrap(栅格系统、全局CSS样式、组件、插件、基于BootStrap的官网案例实战)
- JavaWeb——XML入门详解(概述、语法、约束、Jsoup解析、Xpath解析)
- JavaWeb——CSS应用实例详解(概述、语法、选择器、属性、用户登录界面实例)
- JavaWeb——JavaScript精讲之事件监听机制与表单校验案例实战
- Java——扩展概念(匿名内部类、包装类、装箱与拆箱、数据类型的转换)
- Java——接口的基本总结(基本定义、使用接口定义标准、工厂设计模式、代理设计模式、抽象类与接口的区别)
- JavaWeb——HTML表单标签详解(input、label、select、textarea)
- Java——设计辅助概念(final关键字、对象多态性基本概念)
- JavaWeb——JavaScript精讲之DOM、BOM对象与案例实战(动态添加删除表格)
- JavaWeb——JavaScript精讲之ECMAScript标准(基本语法、JavaScript对象)