clone()

Object类源码:protected native Object clone() throws CloneNotSupportedException; 这里有个问题:为什么Sun公司会用protected来修饰clone()方法呢,而不用public呢?有知道的朋友请指教 native表示该方法的实现不只是通过java实现的,还用C、C++实现 克隆一个对象的方法 1.先覆盖克隆方法 2.实现Cloneable接口 3.方法调用,抛出异常 ------------- public class ExecClone01{ //3.抛出异常 public static void main(String[] args) throws Exception{ Machine m1 = new Machine("Lenovo"); Machine m2 = m1.clone(); System.out.println(m1 == m2);//打印 false,说明克隆成功 System.out.println(m2.name);//打印 Lenovo } } //2.实现Cloneable()接口 class Machine implements Cloneable{ String name; public Machine(String name){ this.name = name; } //1.覆写clone()方法,抛出异常 @Override public Machine clone() throws CloneNotSupportedException{//jdk5.0之后覆写的返回类型可以改变,但是必须是父类返回类型的子类类型->协变返回类型 Object obj = super.clone(); return (Machine)obj; } } ------------- public class ExecClone02 { //3.方法调用的时候需要抛出异常 public static void main(String[] args) throws CloneNotSupportedException{ OS o1 = new OS("Win10"); OS o2 = o1.clone(); System.out.println(o1 == o2); System.out.println(o2.name); } } //要求OS类可以实现克隆 //2.实现一个接口: Cloneableclass OS implements Cloneable{ String name; public OS(String name){ this.name = name; } //1.先覆盖clone()方法 ->抛出异常CloneNotSupportedException @Override public OS clone() throws CloneNotSupportedException{ Object obj = super.clone(); return (OS)obj; } } -------------

finalize()

protected void finalize() throws Throwable {} 对象的"遗言"方法 当gc回收一个对象的时候,主动会调用这个对象的finalize方法 面试题:final和finalize之间的区别? final表示最终的 修饰符,可以修饰类、方法、变量 finalize是Object类里面的一个方法,当gc回收一个对象的时候会主动调用的一个方法

toString()

public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 用来制定打印一个对象,显示的内容 当打印一个对象时,实际上打印的是该对象的toString方法,Object类本身打印对象,显示 类型@XX,String类中覆盖了Object类的toString方法,返回内容,所以打印出的是内容 ------------- public class Test01{ public static void main(String[] args){ Person p = new Person("王天二",22,'男',true); System.out.println(p); //XXX先生/女士 今年XXX岁 是个已婚/未婚人士 } } class Person{ String name; int age; char gender; boolean isMarry; public Person(String name,int age,char gender,boolean isMarry){ this.name = name; this.age = age; this.gender = gender; this.isMarry = isMarry; } @Override public String toString(){//当要进行较多拼接时,最好是采用StringBuffer进行拼接,效率更高 return name + (gender == '男'?"男士":"女士") + " 今年" + age + "岁" + " 是个" + (isMarry?"已婚":"未婚") + "人士"; } } -------------

equals()

public boolean equals(Object obj) { return (this == obj); } Object类本身比较的是两个对象的地址 程序员可以按照自己的意愿将内存里面不同的两个对象视为相等对象 -> 逻辑相等也就是说,制定一个类型比较的规则,当什么条件成立的时候,可以将两个不同的对象视为相等对象 Object类中equals()源代码如下: //对象1.equals(对象2) public boolean equals(Object obj){//普通方法,需要用对象来调用 //this:当前调用equals方法的对象 //obj:表示参数传来要参与比较的另一个对象 //==:比较地址 return (this == obj); } ------------- public class ExecEquals01 { public static void main(String[] args){ Student stu1 = new Student("王天一",12,"A"); Student stu2 = new Student("陈浩南",24,"O"); Student stu3 = new Student("山鸡",25,"A"); System.out.println(stu1.equals(stu2)); //打印 false System.out.println(stu1.equals(stu3)); //打印 true } } /** 定义一个Student类型 属性:name age blood 创建对象时 完成所有属性的赋值 只要两个学生的血型一样就视为相等对象 */ class Student{ String name; int age; String blood; public Student(String name,int age,String blood){ this.name = name; this.age = age; this.blood = blood; } @Override public boolean equals(Object obj){//覆写的条件 1.发生在有继承关系的子类中 2.权限修饰符大于父类被覆写方法权限修饰符;返回类型jdk5.0之前必须一致,jdk5.0之后可以是父类方法返回类型的子类类型,称为协变返回类型;方法签名(方法名和方法参数)必须一致 3.抛出异常的范围必须小于父类被覆写的方法抛出的异常 String blood1 = this.blood; String blood2 = ((Student)obj).blood; return blood1.equals(blood2); } } ------------- public class ExecEquals02 { public static void main(String[] args){ Food f1 = new Food("豆腐西施",12.5,"热菜"); Food f2 = new Food("西红柿炒鸡蛋",12.5,"热菜"); Food f3 = new Food("豆腐西施",12.5,"热菜"); System.out.println(f1.equals(f2)); System.out.println(f1.equals(f3)); } } /** 定义一个Food类型 属性:name price type 两个菜的所有属性一样就视为两个对象相等 考虑一行实现 */ class Food{ String name; double price; String type; public Food(String name,double price,String type){ this.name = name; this.price = price; this.type = type; } @Override public boolean equals(Object obj){ return (this.name).equals(((Food)obj).name) && (this.price == ((Food)obj).price) && (this.type.equals(((Food)obj).type)); } } -------------

hashCode()

public native int hashCode(); 制定一个对象的散列特征码 散列:将一大组数据分散为不同的小组 HashSet HashMap的底层是基于哈希表实现的 比如:将19 5 62 81 93 66分为4组,可以将每个数对4取余 x%4 [0] [1]93 81 5 [2]66 62 [3]19 注意:当equals()方法被重写时,通常有必要重写hashCode()方法,以维护 hashCode()方法的常规协定,该协定声明相等对象必须具有相等的哈希码 ---------- public class Test04 { public static void main(String[] args){ Teacher tea1 = new Teacher("二爷",10000.0,'女',true); Teacher tea2 = new Teacher("二爷",1232,'女',false); Teacher tea3 = new Teacher("二爷",10000.0,'女',true); System.out.println(tea1.equals(tea2)); //打印 false System.out.println(tea1.equals(tea3)); //打印 true System.out.println(tea1.hashCode()); //打印 685487 System.out.println(tea2.hashCode()); //打印 676718 System.out.println(tea3.hashCode()); //打印 685487 } } class Teacher{ String name; double salary; char gender; boolean isMarry; public Teacher(String name,double salary,char gender, boolean isMarry){ this.name = name; this.salary = salary; this.gender = gender; this.isMarry = isMarry; } @Override public boolean equals(Object obj){ if(obj == null)return false; if(!(obj instanceof Teacher))return false; if(obj == this)return true; return this.name.equals(((Teacher)obj).name)&& this.salary == (((Teacher)obj).salary)&& this.gender == (((Teacher)obj).gender)&& this.isMarry == (((Teacher)obj).isMarry); } @Override public int hashCode(){ return name.hashCode() + (int)salary + gender + (isMarry?1:0); } } -----------

Object类中的五种方法的更多相关文章

  1. 并发编程(六)Object类中线程相关的方法详解

    一.notify() 作用:唤醒一个正在等待该线程的锁的线程 PS : 唤醒的线程不会立即执行,它会与其他线程一起,争夺资源 /** * Object类的notify()和notifyAll()方法详 ...

  2. 说说Object类下面有几种方法呢?

    今天说一道基础题型,不过很多人会忽略或者至少说不完整,但是面试时被问到的几率还是很大的. 面试题 Object有几种方法呢? Java语言是一种单继承结构语言,Java中所有的类都有一个共同的祖先.这 ...

  3. Object类中通用方法之:toString()方法

    1.Java所有的对象都是Object类的实例,都可以直接调用该类中定义的方法,这些方法称为通用方法 2.toString()方法即为Object类中定义的通用方法之一 3.平时我们如果在控制台直接打 ...

  4. Object类的equals()方法总结

    1.equals()是Object中的方法,作用在于检测一个对象是否等于另一个对象. 2.在Object类中equals()方法是判断两个对象是否有相同的引用 ,即是否是相同的对象. 3.String ...

  5. 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)

    java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...

  6. Object类中方法详解

    目录 概述 hashCode方法 getClass方法 toString方法 equals方法 clone方法 finalize方法 概述 Object 是类层次结构的根类.每个类都使用 Object ...

  7. html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式

    先上代码   <script type="text/javascript" language="javascript">   var idTmr; ...

  8. [Python之路] object类中的特殊方法

    一.object类的源码 python版本:3.8 class object: """ The most base type """ # d ...

  9. Java面试系列第2篇-Object类中的方法

    Java的Object是所有引用类型的父类,定义的方法按照用途可以分为以下几种: (1)构造函数 (2)hashCode() 和 equals() 函数用来判断对象是否相同 (3)wait().wai ...

随机推荐

  1. python之selectors

    selectors是select模块的包装器,ptython文档建议大部分情况使用selectors而不是直接使用selectors 样例代码如下 # -*- coding: utf-8 -*- __ ...

  2. Qt基于tcp协议网络编程

    基于Qt网络编程: 基于tcp协议 c/s模式编程 所需要的类:QTcpServer QTcpSocket 利用qt基于tcp协议编写c/s模式程序: 两个类中的信号: QTcpServer : ne ...

  3. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--F-等式

    链接:https://www.nowcoder.com/acm/contest/90/F 来源:牛客网 1.题目描述 给定n,求1/x + 1/y = 1/n (x<=y)的解数.(x.y.n均 ...

  4. ABAP术语-Lock Object

    Lock Object 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/29/1085742.html Object type in the ...

  5. LVS-DR模式实现调度负载

    本篇文章主要梳理一下LVS前端调度过程及用户请求过程 实验架构 准备工作 添加各主机路由联通主机通信 Client IP route add default gw 172.20.17.19 Route ...

  6. JAVAOOP多线程

    进程每个独立运行的任务对应一个进程,每个进程可以产生多个线程 特点:1,进程是系统运行程序的基本单位 2,每一个进程都有自己独立的一块内存空间,一组系统资源 3,每一个进程的内部数据和状态都是完全独立 ...

  7. JS数组push一个对象

    这个是正确的数据添加对象 var dypieArr = []; var dyArr = []; var arrStr = ''; for(var i = 0; i < dataStreet.le ...

  8. centos安装zabbix(server+agent)

    本文包含zabbix_server编译安装,zabbix_agent编译安装,中文字体修正 Mysql模板监控,Nginx模板监控,以及简单的web页面的使用 中文乱码的解决方案 zabbix乱码是字 ...

  9. python学习之对象的三大特性

    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...

  10. 嵌入式框架Zorb Framework搭建三:列表的实现

    我是卓波,我是一名嵌入式工程师,我万万没想到我会在这里跟大家吹牛皮. 嵌入式框架Zorb Framework搭建过程 嵌入式框架Zorb Framework搭建一:嵌入式环境搭建.调试输出和建立时间系 ...