zoukankan      html  css  js  c++  java
  • Object 对象的方法有哪些?分别有什么作用?

    1.clone方法

    保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

    主要是JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里讲参数改变,这是就需要在类中复写clone方法。

    2.getClass方法

    final方法,获得运行时类型。

    3.toString方法

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

    4.finalize方法

    该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

    finalize方法在垃圾回收时一定会被执行,而如果在此之前显示执行的话,也就是说finalize会被执行两次以上,而在第一次资源已经被释放,那么在第二次释放资源时系统一定会报错,因此一般finalize方法的访问权限和父类保持一致,为protected。

    5.equals方法

    该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。

    6.hashCode方法

    该方法用于哈希查找,可以减少在查找中使用equals的次数,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

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

    如果不重写hashcode(),在HashSet中添加两个equals的对象,会将两个对象都加入进去。

    7.wait方法

    wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

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

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

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

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

    (4)时间间隔到了。

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

    8.notify方法

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

    9.notifyAll方法

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

    ps:

    值得注意的一点是,Object及其所有子类都不是线程安全的(但都是可重入的)。因此,你不能有两个线程同时访问一个Object对象,除非这个对象的内部数据都已经很好地序列化(例如为每个数据访问加锁)。

     

    如果判断一个类是否线程安全的,

    看多个线程同时访问该类中的一个成员变量,是否需要枷锁。

     

    可以说,没有线程安全的类,即多线程访问的时候,几乎都需要加锁。

  • 相关阅读:
    微信小程序中showToast 提示
    微信小程序传code 拿token 后台报40029 状态吗,是为什么?
    双语开发思路
    input的number类型只能输入正数,禁止负数输入
    css全站字体,中文英文不同,粗细统一
    截取字符,超出的用省略号代替js实现 substring
    导航切换悬浮最上层
    VUE常用写法
    支付问题回调跳不过去问题
    窗口打开方式
  • 原文地址:https://www.cnblogs.com/47Gamer/p/13625920.html
Copyright © 2011-2022 走看看