JAVA常用类:Object类

常用类

JAVA常用类有以下几种,分别为:

  • Object类
  • 包装类
  • Math类
  • Random类
  • String类
  • StringBuilder和StringBuffer
  • 事件日期类
  • File类

Object类

Object是所有类的父类,任何类都默认继承Object。

该类中主要有以下方法:

  • toString()
  • getClass()
  • equals()
  • clone()
  • finalize()

其中toString(),getClass(),equals是其中最重要的方法。


【查看Object类源码】

注意: Object类中的getClass(),notify(),notifyAll(),wait()等方法被定义为final类型,因此不能重写。


1. clone()方法

clone与copy的区别

        假设现在有一个Employee对象,Employee tobby =new Employee(“CMTobby”,5000),

通常我们会有这样的赋值Employee cindyelf=tobby,这个时候只是简单了copy了一下reference,

cindyelf和tobby都指向内存中同一个object(tobby 和cindyelf 其实都是同一个对象的引用),这样cindyelf或者tobby的一个操作都可能影响到对方。

        打个比方,如果我们通过cindyelf.raiseSalary()方法改变了salary域的值,那么tobby通过getSalary()方法得到的就是修改之后的salary域的值,显然这不是我们愿意看到的。我们希望得到tobby的一个精确拷贝,同时两者互不影响,这时候, 我们就可以使用Clone来满足我们的需求。Employeecindy=tobby.clone(),这时会生成一个新的Employee对象,并且和tobby具有相同的属性值和方法。


2. toString()方法

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

        Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。

        该方法用得比较多,一般子类都有覆盖。

        我们推荐在学习阶段所有有属性的类都加上toString() 方法!

public static void main(String[] args){
    Object o1 = new Object();
    System.out.println(o1.toString());
}

可以看到运行结果如下:


3. getClass()方法

public final native Class<?> 1 getClass();

        返回次Object的运行时类类型。

        不可重写,要调用的话,一般和getName()联合使用,如getClass().getName();

public static void main(String[] args) {
    Object o = new Object();
    System.out.println(o.getClass());
    //class java.lang.Object
}

4. finalize()方法

protected void finalize() throws Throwable { }

        该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用, 所以这里不做讲解,感兴趣的同学可以自己去查阅资料。


5. equals()方法

public boolean equals(Object obj) {
    return (this == obj);
}

        Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一对象。

        所谓同一对象就是指内存中同一块存储单元,如果this和obj指向的hi同一块内存对象,则返回true,如果this和obj指向的不是同一块内存,则返回false。

        注意:即便是内容完全相等的两块不同的内存对象,也返回false。

        如果希望不同内存但相同内容的两个对象equals时返回true,则我们需要重写父类的equal方法

String类已经重写了object中的equals方法(这样就是比较内容是否相等了)。

【演示:查看String类源码equals方法】

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

6. hashCode()方法

public native int hashCode();

返回该对象的哈希码值。

        该方法用于哈希查找,可以减少在查找中使用equals的次数,重写了equals方法一般都要重写

hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

        一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash Code() == obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。


7. wait()方法

        wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。

        wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

        调用该方法后当前线程进入睡眠状态,直到以下事件发生。

(1)其他线程调用了该对象的notify方法。

(2)其他线程调用了该对象的notifyAll方法。

(3)其他线程调用了interrupt中断该线程。

(4)时间间隔到了。

        此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。


8. notify()方法

public final native 1 void notify();

        该方法唤醒在该对象上等待的某个线程。

public final native void notifyAll();

        该方法唤醒在该对象上等待的所有线程。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值