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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值