Java基础学习之--理解Object类 原创 sbp810050504 2018-12-09 23:45:07 博主文章分类:java ©著作权 文章标签 java wait notify 文章分类 Java 后端开发 ©著作权归作者所有:来自51CTO博客作者sbp810050504的原创作品,请联系作者获取转载授权,否则将追究法律责任 看Java API的Object类, 一共11个方法。按使用的频度排名: toString() 这个方法最常用在打日志,定位代码问题。 equals()和hashCode(), 这两个方法的使用经典例子是HashMap的源码 public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); int hash = hash(key); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; } equals() 比 hashCode() 要常用一点。 wait() 和 notify() 这个开发很少会直接用到,但是间接用到的场景不少,属于偏内功的点。wait/notify属于Object类最难理解的点了,因为它的基石是多线程。学习思路还是三步走。 step 1: 看文档说明 wait() Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object. notify() Wakes up a single thread that is waiting on this object's monitor. 这个文档说明,看完基本一头雾水,两个方法都提到了如下的核心概念thread, object's monitor。 先把这些概念放一边,看看是怎么用的。 step 2: 运行Demo 给个demo辅助理解,一个线程是干活的,另一个线程是管事的。管事的等活干完验收。 public class WaitNotifyDemo { static class Worker extends Thread{ private volatile int status=0; // 1: 完成, -1: 出错 @Override public void run(){ try { System.out.println(Thread.currentThread().getName() +": 开始干活"); Thread.sleep(3000); System.out.println(Thread.currentThread().getName() +": 完成任务"); status = 1; // 通知主线程 synchronized (this){ this.notify(); } } catch (InterruptedException e) { e.printStackTrace(); status = -1; } } public int getStatus(){ return status; } } public static void main(String[] args) throws InterruptedException { Worker worker= new Worker(); worker.start(); synchronized (worker){ int status; while ((status=worker.getStatus())!=1){ worker.wait(); if(status==-1) throw new RuntimeException("出错了"); } } System.out.println("任务已经完成"); } } step3: 折腾demo 接下来, 我试了一下, 把notify的代码去掉,也能正常运行。 这就让人困惑了,文档明明说必须调用notify,wait才能结束。接下来再看文档: A thread can also wake up without being notified, interrupted, or timing out, a so-called spurious wakeup 所以, wait方法必须在while循环中调用。好,解答了一点疑惑。但是每次Worker线程结束时没有调用notify,主线程就能正常退出, 这个也说不通。 唯一的解释是: JVM内部在某个地方调用了notify。看openjdk的源码, 果然如此:从start0开始, 定位到线程在退出时会调用lock.notify_all(thread);。只是这里的代码是JVM内部的代码,比较底层。 其实,这个例子更简洁的写法是worker.join()。 如果看Thread.join()的源码,发现它的实现恰好就是调用了wait。 clone() 这个需要理解深度克隆, 知识点不复杂。 getclass() 这个放在后面,但是用得还挺多的,特别是写框架。 finalize() 这个已经不他推荐使用了, 尽量不干扰GC的节奏。 总结一下,Object类是Java的基石。这里比较难一点的就是wait/notify. 学习Java的API, 如果想理解透彻一点,估计绕不开JVM的c++源码。 赞 收藏 评论 分享 举报 上一篇:ES学习笔记之-AvgAggregation的实现过程分析 下一篇:ES学习笔记之-集成测试的简单学习 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 Boost学习之深入理解asio库 Asio简介Boost C++ 库 Asio,它是异步输入输出的核心。 名字本身就说明了一切:Asio 即异步输入/输出。该库可以让 C++ 异步地处理数据,且平台独立。 异步数据处理就是指,任务触发后不需要等待它们完成。 相反,Boost.Asio 会在任务完成时触发一个应用。 异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。异步任务的典型例子是网络应用 句柄 #include 应用程序 Java之并发工具类的详细解析 3. 并发工具类3.1 并发工具类-HashtableHashtable出现的原因 : 在集合类中HashMap是比较常用的集合对象,但是HashMap是线程不安全的(多线程环境下可能会存在问题)。为了保证数据的安全性我们可以使用Hashtable,但是Hashtable的效率低下。代码实现 :package com.itheima.mymap;import java.util.H java System i++ MyBatisPlus理解学习 官网:://mp.baomidou./ MyBatis Plus,简化 MyBatis !1.概述需要的基础:把我的MyBatis、Spring、SpringMVC就可以学习这个了!为什么要学习它呢?MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成!本质:MyBatis 本来就是简化 JDBC 操作的!特性无侵入:只做增强不做改变,引入它不会 User Test 乐观锁 Java基础之Object类 Object类Java中所有类的基类Java中所有类都是间接或直接继承Object类Object类的引用数据类型变量可以保 java ide 数据类型 Java基础12:深入理解Class类和Object类 专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK, Java 06java基础进阶之Object类、包装类 Object类的概念:java.lang.Object是java中所有类的直接父类或者间接父类,就比如:class A{}class B extends A{}所有类的对象都可以声明成Object引用Object o1=new A()Object o2=new B()Object的子类继承了Object的方法getClass()方法:返回一个对象的实际类型(返回类名)equ... 父类 引用类型 基本类型 Java学习之String类的理解 string类string类的概述(理解)String类代表字符串,java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例,也就是说,java程序中所有的双引号字符串,都是string类的对象。string类在java.lang包下,所以使用的时候不需要导包String类的特点(理解)字符串不可变,它们的值在创建后不能被更改虽然string的值不可变的,但是他们可以被共享字符串效果上 字符串 string类 字节数组 夯实Java基础系列9:深入理解Class类和Object类 目录 "Java中Class类及用法" "Class类原理" "如何获得一个Class类对象" "使用Class类的对象来生成目标类的实例" "Object类" "类构造器public Object();" "registerNatives()方法;" "Clone()方法实现浅拷贝" "getCl java 程序员 求职 面试 黄小斜 【Java】基础21:Object类 顶层父类Object object java 编程语言 父类 类名 Java Review之Object类 Object类介绍介绍Object类是所有java类的根基类,所有的类都是从它继承下来。方法组成getClass()用于获取运行时类对象toString()一种类型对象进行打印输出或者与字符串类型进行拼接的时候,这个类型的对象都会自动调用toString()方法转换成字符串类型再进行后续操作,如果这个类型没有自己实现toString方法,则调用Object类的,默认返回这个类的ClassName+ java 黑马程序员--Java基础学习笔记【Object类、String类】 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Object类在Java类继承结构中,java.lang.Object类位于顶端。所有类都直接或间接继承Object类。(接口不能继承Object类,接口中隐含定义了Object类的所有公共方法,但是全抽象)Object类型的引用变量 String类 Object类 C#学习入门之object类 object 类型在 .NET Framework 中是 Object 的别名。 在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 Object 继承的。 可以将任何类型的值赋给 object 类型的变量。 将值类型的变量转换为对象的过程称为“装箱”。 将对象类型的变量转换为值类型的过程称为“取消装箱 object java中Object类的equals理解 所有类都从Object类中继承了equals方法Object类中equals方法源代码如下:[java]view plaincopypublicbooleanequals(Objectobj) { returnthis==obj; }Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equal... qt JAVA基础6.55——Object类toString() /*一个特殊的类Object:它是JAVA中所有对象的直接或间接父类,根父类(基类),它里面定义的功能是所有对象都应该具备的。记住:当定义一个新类时,没有指明要继承某类,它默认继承Object类。*/class Animal{}class Cat extends Animal{}class Test{ public static void main(String[] arg 父类 java JAVA基础6.56——Object类equals() /*一个特殊的类Object:它是JAVA中所有对象的直接或间接父类,根父类(基类),它里面定义的功能是所有对象都应该具备的。记住:当定义一个新类时,没有指明要继承某类,它默认继承Object类。==和Objcet里面的equals其实比较的就是两对象的内存地址是否一致。*/class Cat { int num; public boolean equals(Object c) 父类 当前对象 内存地址 大数据基础之java常用API一(Object类、String类、StringBuilder类) 大数据基础之java常用API一(Object类、String类、StringBuilder类) 字符串 java 构造方法 java 判断基础类 object类型 # Java中判断基础类Object类型的方法## 引言在Java开发中,我们经常需要判断一个对象的类型,特别是判断一个对象是否属于基础类Object的某个子类。本文将介绍一种简单的方法来实现Java中判断基础类Object类型的操作。## 流程图```mermaidflowchart TD A[开始] --> B{判断对象类型} B --> C[使用instance 子类 Java System java基础知识回顾之java Thread类学习(十一)--join方法的理解 join方法的源码: 给一个例子来理解: 输出结果: 代码运行整个过程说明入下图: ide 主线程 线程优先级 线程创建 子线程 理解Java中对象基础Object类 一、Object简述 源码注释:Object类是所有类层级关系的Root节点,作为所有类的超类,包括数组也实现了该类的方法,注意这里说的很明确,指类层面。 所以在Java中有一句常说的话,一切皆对象,... java 子类 显式 数据类型 向上转型 Java基础学习总结(7)——Object类 一、Object类介绍 Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继... 字符串 父类 java 类继承 引用类型