Java开发基础知识之学习篇——Object类

JDK中所有类的基类——java.lang.Object

1、类构造器

  创建java对象的途径之一,通过new关键字调用构造器完成对象的实例化,或通过构造器对象进行相应的初始化。在JDK的objec类源码中,系统会自动添加一个无参构造器。

public object(){
    Object obj = new Object(); //构造一个Object类的对象
}

2、registerNatives方法

  静态代码块是一个类子啊初始化过程中必定会执行的内容,所以在类加载时会执行该方法,通过该方法来注册本地方法。

private static native void registerNatives();
    static{
        registerNatives();
    }    

3 、getClass方法

  首先该方法由final声明本地方法,不能被重写,作用是返回运行时类对象,通过这个类对象可以获得该运行时类的相关属性和方法。

  class是一个类的属性,能获取该类编译时的类对象;而getClass()是一个类的方法,它是获取该类运行时的类对象。

public final native Class<?> getClass();

4、hashcode方法

public native int hashCode();

  这是一个有native 声明的本地方法,作用是返回对象的哈希码(int 类型的数值)

  哈希算法(散列算法),是将数据依据特定算法产生的结果直接指定到一个地址上,这个结果就是由hashcode方法产生的。当集合要添加新元素时,会先调用这个元素的hashcode方法,就能定位到它该放置的位置上。

  1)如果这个位置上没有元素,则直接存储在这个位置上,不用在进行任何比较;

  2)如果这个位置上已经有元素,就调用他的equals方法与新元素进行比较,相同的话就不存了;不同的话(hash冲突),那么就在这个key的位置上产生一个链表,将所有hashcode相同的对象存放在这个单链表上。

  如果两个对象的equals值比较相等,那么他们的hashcode值一定相等;如果两个对象的equals值比较不相等,那么他们的hashcode可能相等、可能不相等。

5、equals方法

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

  1)Object中的equals方法是比较对象的地址是否相同;equals方法可以被重写,重写后equals方法比较的是两个对象值是否相同

  2)使用遵循几个原则:自反性、对称性、传递性、一致性

  3)和“==”区别?参见本人其他文章

6、clone方法

protected native Object clone() throws CloneNotSupportedException;

  clone方法是创建并返回一个对象复制后的结果

  如果一个类没有实现Cloneable接口(只是标记接口),那么对此类对象进行赋值时,会出现CloneNotSupportedException异常。

  clone生成的新对象和原对象的关系,区别在于两个对象间是否存在相同的引用或者对应的内存地址是否存在共用的情况;若存在,则为“浅复制”,否则为“深复制”,深复制时需要将共同关联的引用也复制完全。

7、toString方法

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

  一般打印某个对象时,默认调用toString()方法

  getClass().getName()是返回对象的全类名,Integer.toHexString(hashcode())是以16进制无符号整数形式返回此哈希码的字符串表示形式

8、notify方法

public final native void notify(); 

  唤醒可能等待该对象的对象锁的其他线程。由JVM(与优先级无关)随机挑选一个处于wait状态的线程

  子啊调用notify()之前,线程必须获取该对象的对象锁,执完notify()方法后,不会马上释放锁,直到退出synchronized代码块,当前线程才会释放锁;notify一次只能随机通知一个线程进行唤醒

9、notifyAll方法

public final native void notifyAll();

  使所有正在等待池中等待同一个共享资源的全部线程从等待状态退出,进入可运行状态,让它们同时竞争对象锁,只有获得锁的线程才能进入就绪状态

10、wait方法

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 >0){
      timeout++;
    }
    wait(timeout);
}
public final void wait() throws INterruptedException {
    wait(0);
}

  wait方法会引起当前线程阻塞,直到另一个线程在对应的对象上调用notifyh或者notifyAll方法,或者达到了方法参数中指定的时间。

  调用wait方法的当前线程一定要有拥有对象的监视器锁。

  wait方法会把当前线程放在对应的等待队列中,在这个对象中所有同步请求都不会得到响应。线程调用不会调用线程,线程一直处于休眠状态。

  如果当前线程被其他线程在当前线程等待之前或正在等待时被调用了interrupt()中断了,那么就会抛出interruptExceptio异常。

 

原文地址:https://www.cnblogs.com/cokeHuan/p/12435252.html

时间: 2024-08-26 17:03:08

Java开发基础知识之学习篇——Object类的相关文章

Java开发基础知识之学习篇——双亲委派机制

Java自带的类加载器: 启动类加载器(Bootstrap ClassLoader):这是由C++语言实现的一个加载器,是虚拟机的一部分,随虚拟机启动运行.负责将存放在/lib目录下面或者被-Xbootclasspath参数所指定的路径中的类. 扩展类加载器(Extension ClassLoader):负责加载/lib/ext目录中的,或者被java.ext.dir系统变量指定路径中的所有类库.如果把自己的jar包放到此位置,会首先用这个加载器加载. 应用程序类加载器(Application

Java开发基础知识之学习篇——String

String .StringBuffer 和StringBuilder 的区别是什么?从几个方面来解释. 1.可变性 String类中使用final关键字字符数组保存字符串,它的长度是不可变的. StringBuffer 和 StringBuilder 都继承自AbstractStringBuilder类,而在AbstractStringBuilder中也是使用字符数组保存字符串,但是没有用final关键字修饰,所以这两种对象都是可变的. 2.线程安全性 String中的对象是不可变的,就是常量

Java开发基础知识之规范篇——排版规范

网上流行的开发规范有很多,阿里巴巴.华为开发规范等等,当往往看得最舒服的才是最适合自己! 简单汇总了一下以往自己在项目开发中的编码风格规范: 1.程序块要采用缩进风格编写,缩进的空格数为4个. 2.分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐.在函数体的开始.类和接口的定义.以及if.for.do.while.switch.case语句中的程序都要采用如上的缩进方式. 3.较长的语句.表达式或参数(>80字符)要分成多行书写,长表达式要在低优先级操作符处

Java基础知识强化26:Object类之Object类的概述

1.Object类 类Object是类层次结构的根类,每个类都使用 Object作为超类.所有对象(包括数组)都实现这个类的方法 每个类直接或者间接继承自Object类 2.Object类无参构造: public  Object() 回想面向对象中为什么说:子类的构造方法默认访问的是父类的无参构造. 答:这是因为所有类的共同父亲Object只有一个无参构造. 来自为知笔记(Wiz)

Java基础知识强化27:Object类之hashCode()方法、getClass()方法

1. Object类的hashCode()方法,如下: public  int  hashCode():返回该对象的哈希码值,这个值和地址值有关,但是不是实际地址值(哈希码值是根据实际地址值转化过来的整数值),你可以理解为地址值. 2. Object类的getClass()方法,如下: public  final  Class  getClass():返回此 Object 的运行时类(返回的类型是Class类,实际返回的是Class类的对象实体)                       Cl

Java基础知识强化28:Object类之toString()方法

1. Object类的toString()方法: public  String  toString():返回该对象的字符串表示 2. 案例演示: (1)Student类: 1 package cn.itcast_02; 2 3 public class Student { 4 private String name; 5 private int age; 6 7 public Student() { 8 super(); 9 } 10 11 public Student(String name,

java基础学习总结——Object类

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——Object类 一.Object类介绍 Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object.所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗.

iOS开发——总结篇&amp;IOS开发基础知识

IOS开发基础知识 1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例 实例一: Person *person = [[Person alloc] init]; //父

IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息:比如用户信息.聊天历史记录.好友列表等等,长连接则是用于实时的聊天消息或指令的接收和发送. 作为IM系统中不可或缺的技术,Http短连的重要性无可替代,但Http作为传统互联网信