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/ ...
随机推荐
- oen /var/run/nginx.pid failed
nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory) [root@TES ...
- Laravel5.1学习笔记6 响应
基本响应 附加头信息到响应 附加Cookie到响应 其他响应 View视图响应 JSON响应 File下载 重定向 重定向到命名路由 重定向到控制器Action 附带闪回Session数据重定向 响应 ...
- Android 使用SQLite存储以及读取Drawable对象
在进行Android开发过程中,我们经常会接触到Drawable对象,那么,若要使用数据库来进行存储及读取,该如何实现? 一.存储 //第一步,将Drawable对象转化为Bitmap对象 Bitma ...
- HTML 5的基本标签
1. 文件开始标签<html> 在任何的一个HTML文件里,最先出现的HTML标签就是<html>,它用于表示该文件是以超文本标识语言(HTML)编写的.<html&g ...
- 解决Fiddler抓包上不了网的问题:
以前安装Fiddler 没有配置过相关设置,经常出现就是打开fiddler后,浏览器就无法上网了,刚开始觉得可能是因为而公司上网是需要自己的代理的,但fiddler打开后默认127.0.0.1作为IE ...
- jquery radio、 checkbox、 select 操作
转载:http://www.haorooms.com/post/checkandselect $("input[id^='code']");//id属性以code开始的所有inpu ...
- Node.js 常用Mongoose方法
Node.js 手册查询-Mongoose 方法 一.Schema 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力.可以说是数据属性模型(传统意义的表结构 ...
- console.log、toString方法与js判断变量类型
Java调用system.print.out()是会调用toString方法打印js里的console.log也是控制台打印,很多时候,我们以为也是调用toString方法,其实并不是.我们在chro ...
- JavaEE的起步
因为某些原因,现在要从.net开发转向J2EE了,在这里记录一下学习经历
- python学习笔记之小小购物车
#coding=utf-8 ''' Created on 2015-6-18 @author: 悦文 ''' def goods_list(): shangpin={"} print &qu ...