Object类方法简介二
在学了Object类前面的三个常用方法后,又遇到它的另外三个方法——clone()、finalize()、getClass(),这三个方法不经常使用,但因为在学习过程遇到了,就简单的对它们的使用做一个总结。
1.对象克隆——clone()方法
protected Object clone() throws CloneNotSupportedException;
使用该方法可以克隆一个对象,即创建一个对象的副本。要使类的对象能够克隆,该类必须实现Cloneable接口。这个接口里面没有定义任何方法,属于标识接口,即给类一个特殊标签。
public class Student implements Cloneable
{
private int num;
private String name;
public Student(int num,String name)
{
this.num=num;
this.name=name;
}
@Override
public boolean equals(Object o)
{
return this.num==((Student)o).num;
}
@Override
public String toString()
{
return "学号:"+num+",姓名:"+name;
}
public static void main(String args[]) throws CloneNotSupportedException
{
Student s1 = new Student(1001,"Mary");
Student s2 = (Student)s1.clone();
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true
System.out.println(s1.getClass().getName());//ClassNotes.Student
System.out.println(s1.hashCode());//
System.out.println(s2.hashCode());//
System.out.println(s1);//学号:1001,姓名:Mary
System.out.println(s2);//学号:1001,姓名:Mary }
}
这个例子使用了Object类的五种方法,其中clone()方法声明抛出CloneNotSupportedException异常,程序在main()方法的声明中抛出了该异常。
2.getClass()方法
该方法,它会返回一个你的对象所对应的一个Class的对象,这个返回来的对象保存着你的原对象的类信息,比如你的原对象的类名叫什么,类里有什么方法,字段等,和反射相关。
Date date = new Date();
Class<?>cls = date.getClass();//得到类的包名
3.对象终结——finalize()方法
protected void finalize() throws Throwable;
在对象被销毁之前,垃圾回收站允许对象调用该方法进行清理工作,清除在对象外被分配的资源。
public class Student implements Cloneable
{
@Override
protected void finalize() throws Throwable
{
System.out.println("The object is destroyed");
}
public static void main(String args[])
{
Student s1 = new Student();
Student s2 = new Student();
s1 = null;
s2 = null;
System.gc();//执行垃圾回收
}
}
输出结果:
The object is destroyed
The object is destroyed
GC在回收对象之前自动调用finalize()方法,而且需要显示地调用垃圾回收方法(System.gc()),并且需要有new出来的尚未被销毁的匿名对象的存在,finalize()方法才一定会被调用。在某些情况下,finalize ()方法可能不会运行完成或可能根本不运行,JVM不保证此方法总被调用。
Object类方法简介二的更多相关文章
- 多线程(二)Object类方法、线程的操作sleep(),join(),interrupt(),yield()
四.Object类简介 Object类是所有类的超类,之所以放在线程部分是因为其方法很多是和线程有关的.比如以下三个: wait()方法.wait(long timeout)和wait(long ti ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
{Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) Django基础七之 ...
- Java菜鸟学习笔记--面向对象篇(十六):Object类方法
Object类 什么是Object类? Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法Object类是类层次结构的根,Object类 ...
- Windbg 脚本命令简介 二, Windbg command
Windbg 脚本命令简介 二, Windbg script command $<, $><, $$<, $$><, $$>a< (Run Scri ...
- Java Object类方法解析
Java Object类方法解析 在Java中Object是所有类的父类,任何类都默认继承Object,其提供的方法主要有以下几种: registerNatives() hashCode和equale ...
- WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter
注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...
- Hibernate框架简介(二)基本使用增、删、改、查
一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬 ...
- Page Object设计模式(二)——poium测试库
一.简介 poium是一个基于Selenium/appium的Page Object测试库,最大的特点是简化了Page层元素的定义. 项目地址:https://github.com/SeldomQA/ ...
随机推荐
- Linux学习教程
前言 “Linux?听说是一个操作系统,好用吗?” “我也不知道呀,和windows有什么区别?我能在Linux上玩LOL吗” “别提了,我用过Linux,就是黑乎乎一个屏幕,鼠标也不能用,不停地的敲 ...
- BZOJ 4010 拓扑排序+heap
思路: 反向图求最大拓扑序 反向输出 //By SiriusRen #include <queue> #include <cstdio> #include <cstrin ...
- F - Modular Exponentiation
Problem description The following problem is well-known: given integers n and m, calculate 2n mod m, ...
- Kali linux 2016.2(Rolling)之 Nessus安装及Plugins Download Fail 解决方法
最近,因科研需要,学习Nessus. Nessus是一款优秀的漏洞扫描软件,在其v6 HOME版本中在线更新漏洞插件不成功,采用离线更新,成功地更新了插件,在此将更新方法进行分享. 1.Nessus软 ...
- springMVC上传图片,json交互(三)
@RequestMapping 通过@RequestMapping注解可以定义不同的处理器映射规则. @RequestMapping(value="item")或@RequestM ...
- OI知识点
- 【SQL】BETWEEN操作符
BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围. 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围.这些值可以是数值.文本或者日期. 注意: ...
- oracle从入门到精通复习笔记续集之PL/SQL(轻量版)
复习内容: PL/SQL的基本语法.记录类型.流程控制.游标的使用. 异常处理机制.存储函数/存储过程.触发器. 为方便大家跟着我的笔记练习,为此提供数据库表文件给大家下载:点我下载 为了要有输出的结 ...
- 创建dml触发器
-实现删除学生信息时把该学生的成绩记录全部清空 --判断触发器是否存在 if exists(select * from sysobjects where name = 'delete_student' ...
- AS3.0+PHP写入mySQL
php中$_POST变量是一个数组,用于收集来自method="post"的值,内容是有HTTP POST方法发送的变量名称和值. 从带有POST方法的表单发送的信息,对任何人都是 ...