Java Object
Posted 难道还怪我咯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Object相关的知识,希望对你有一定的参考价值。
public class Object
<span style="white-space:pre"> </span>//静态本地方法的声明并在静态代码块调用
<strong>private static native void registerNatives();</strong>
static
registerNatives();
public final native Class<?> getClass();
public native int hashCode();
<span style="white-space:pre"> </span>//该方法比较的是当前对象和其他对象的内存地址。所有要比较两个对象是否相等时候,要复现该对象的对应类定义的该方法
public boolean equals(Object obj)
return (this == obj);
//复制该对象,完全一致
protected native Object clone() throws CloneNotSupportedException;
//需要复写该方法,不然就是hashcode值
public String toString()
return getClass().getName() + "@" + Integer.toHexString(hashCode());
//线程通信
public final native void notify();
//线程通信
public final native void notifyAll();
<pre name="code" class="java">//线程通信
public final native void wait(long timeout) throws InterruptedException;
//线程通信
public final void wait(long timeout, int nanos) throws InterruptedException if (timeout < 0) throw new IllegalArgumentException("timeout value is negative"); if (nanos < 0 || nanos > 999999) throw new IllegalArgumentException( "nanosecond timeout value out of range"); if (nanos >= 500000 || (nanos != 0 && timeout == 0)) timeout++; wait(timeout);
public final void wait() throws InterruptedException
wait(0);
//释放资源
protected void finalize() throws Throwable
这是Java中最顶层的类。Java中的任何类都是默认继承该objcet类的。对于该类的一些特征进行如下分析:
1、静态代码块、静态方法、静态属性
都是属于类的,可以直接用类名调用,当然任何该类对象都可以调用它们,这也是一种数据共享的方式。
2、静态代码块、构造方法的执行顺序
先执行静态代码块且只执行一次,再执行构造方法(每次创建实例都执行)。对象在实例化的过程中,调用无参数构造方法则执行无参构造。
如果使用有参构造实例化一个对象,则调用有参构造。
验证:定义一个person类
public class Person extends Object
static String comm = null;
static
System.out.println("-----------------Person静态代码块执行--------------");
comm = "共享变量的方式之一";
public Person()
System.out.println("Person构造方法实例化");
public Person(String name, String age)
this.age = age;
this.name = name;
System.out.println("Person有参构造方法实例化<<<<<<<<<<<");
在另外一个类中的main方法中进行测试:
public static void main(String[] args)
System.out.println("Study静态main执行");
Person p =new Person();
Person p2 =new Person();
Person p3=new Person();
Person p5=new Person("codeMonkey","99");
运行效果:
-----------------Person静态代码块执行--------------
Person构造方法实例化
Person构造方法实例化
Person构造方法实例化
Person有参构造方法实例化<<<<<<<<<<<
3、equals方法
如果没有复写该方法则默认是object'的方法,比较的是两个对象的地址。object中:
public boolean equals(Object obj)
return (this == obj);
所有要比较两个对象是不是相等必须复写该方法和hashcode方法。如下以person类为例:
@Override
public int hashCode()
final int prime = 31;
int result = 1;
result = prime * result + ((age == null) ? 0 : age.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
@Override
public boolean equals(Object obj)
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
//还要比较属性值
Person other = (Person) obj;
if (age == null)
if (other.age != null)
return false;
else if (!age.equals(other.age))
return false;
if (name == null)
if (other.name != null)
return false;
else if (!name.equals(other.name))
return false;
return true;
4、拷贝方法,该方法可以复制出其类对象相同的对象。
该类需要复写clone方法如下以person为例:
@Override
protected Object clone() throws CloneNotSupportedException
// return super.clone();
return this;
测试方法:
Person p5=new Person("codeMonkey","99");
//Student s5=new Student(100000);
try
Person p6= (Person) p5.clone();
System.out.println("Person对象测试拷贝方法"+("我是"+p6.getName()+"我"+p6.getAge()+"岁了是码神"+p6.comm));
System.out.println("Person对象clone() p5-->hashcode"+(p5.hashCode()));
System.out.println("Person对象clone() p6-->hashcode"+(p6.hashCode()));
System.out.println("Person对象clone() p5.equals(p6)"+(p5.equals(p6)));
System.out.println("Person对象clone() p5==(p6)"+(p5==p6));
System.out.println("==========================================");
Person p7= (Person) p5.clone();
System.out.println("Person对象测试拷贝方法"+("我是"+p6.getName()+"我"+p6.getAge()+"岁了是码神"+p6.comm));
System.out.println("Person对象clone() p5-->hashcode"+(p5.hashCode()));
System.out.println("Person对象clone() p7-->hashcode"+(p7.hashCode()));
System.out.println("Person对象clone() p5.equals(p7)"+(p5.equals(p7)));
System.out.println("Person对象clone() p5==(p7)"+(p5==p7));
catch (CloneNotSupportedException e)
// TODO Auto-generated catch block
e.printStackTrace();
结果:
-----------------Person静态代码块执行--------------Person有参构造方法实例化<<<<<<<<<<<
Person对象测试拷贝方法我是codeMonkey我99岁了是码神共享变量的方式之一
Person对象clone() p5-->hashcode-1097621311
Person对象clone() p6-->hashcode-1097621311
Person对象clone() p5.equals(p6)true
Person对象clone() p5==(p6)true
==========================================
Person对象测试拷贝方法我是codeMonkey我99岁了是码神共享变量的方式之一
Person对象clone() p5-->hashcode-1097621311
Person对象clone() p7-->hashcode-1097621311
Person对象clone() p5.equals(p7)true
Person对象clone() p5==(p7)true
以上是关于Java Object的主要内容,如果未能解决你的问题,请参考以下文章