Java基本知识(一)

  • Java基本
    • equals和==
    • Serializable 和Parcelable
    • ArrayMap和HashMap
    • Thread,Runnable与Callable接口
    • synchronized 和volatile
    • java虚拟机和Dalvik虚拟机
    • sleep和wait

Java基本

equals和==

== 和 equals 都是用于比较基本类型和对象。

== equal
基本类型 值是否相等 不存在
对象 两个对象的内存引用,若引用完全相同,返回true 默认equals方法与==是一样的,一般重写equals方法

equals( )方法是Object( )类中,用于检查两个对象的相等性。
如:String中的equals 是判断两个字符串是否相等。而HashMap,HashSet等比较是否为同一个,会对HashCode进行比较。Hasecode返回一个离散的int型整数。在集合类操作中使用,为了提高查询速度。

Serializable 和Parcelable

Serializable: Java 序列化接口。需要添加readObject()和writeObject()方法,可以使用transient关键字进行修饰不必序列化的属性。 在硬盘上读写 读写过程中有大量临时变量的生成,内部执行大量的i/o操作,效率低。
Parcelable :Android 序列化接口 ,效率高,需要实现相应方法 ,对象不能保存到磁盘中。

ArrayMap和HashMap

HashMap:默认的存储大小就是一个容量为16的数组,即使里面没有任何元素,也要开辟内存空间。不断向HashMap里put数据时,当达到一定的容量限制时,HashMap的空间将会扩大,而且扩大后新的空间一定是原来的2倍。如:初始容量为16,初始负载因子loadFactor为0.75 ,当hashmap中元素个数超过16 * 0.75=12的时候,就把数组的大小扩展为2 * 16=32,如果HashMap数据量很大时是比较费内存的。
注:jdk1.8中若链表的结点数大于8,则会转化成红黑树(目的提高查询效率)

ArrayMap:是一个<key,value>映射的数据结构,内部是使用两个数组进行数据存储,一个数组记录key的hash值,另外一个数组记录Value值,它和SparseArray一样,也会对key使用二分法进行从小到大排序,在添加、删除、查找数据的时候都是先使用二分查找法得到相应的index,然后通过index来进行添加、查找、删除等操作。

Thread,Runnable与Callable接口

Thread启动线程都是使用start方法,然后JVM将此线程放到就绪队列中,如果有处理机可用,则执行run方法。

Runnable接口可以避免java单继承特性带来的局限,增强程序健壮性,代码能够被多个线程共享。

Callable接口要实现call方法,并且线程执行完毕后会有返回值,其他的两种方法都是重写run方法,没有返回值。Callable接口提供了一个call()方法可以作为线程执行体,但call()方法比run()方法功能更为强大:call()方法可以有返回值;call()方法可以声明抛出异常。

synchronized 和volatile

1,volatile仅作用于变量;synchronized则可以使用在变量、方法、和类。
2,volatile是一种稍弱的同步机制,不会造成线程的阻塞;在访问volatile变量时不会执行加锁操作。synchronized可能会造成线程的阻塞。因此volatile变量是一种比synchronized关键字更轻量级的同步机制。
3,volatile仅能实现变量的修改可见性,是在每次访问变量时都会进行刷新,因此每次访问都是在主内存中得到最新的版本,但不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性,但是效率相对要比volatile低。

volatile关键字,使一个变量在多个线程间可见,也就是一个线程处理另一个线程属性的时候能保证结果是最新的。当一个线程改了被volatile修饰的属性后,另一个线程再改那个属性,会执行缓存过期,通知其他线程重新读取那个属性值
假如一个属性int a = 0,当两个线程都读取那个属性的副本后,两个线程都得到的是0,然后将副本加1,写回去,这个时候两个线程都将a写为1,而不是2.因为线程是将属性副本拿到cpu进行+1然后直接复制给源属性的,所以造成数据出错,即不保证数据原子性。

java虚拟机和Dalvik虚拟机

Java虚拟机:
1、java虚拟机基于栈。 基于栈的机器必须使用指令来载入和操作栈上数据,所需指令更多更多。
2、java虚拟机运行的是java字节码。(java类会被编译成一个或多个字节码.class文件)

Dalvik虚拟机:
1、dalvik虚拟机是基于寄存器。
2、Dalvik运行的是自定义的.dex字节码格式。(java类被编译成.class文件后,会通过一个dx工具将所有的.class文件转换成一个.dex文件,然后dalvik虚拟机会从其中读取指令和数据
3、常量池已被修改为只使用32位的索引,以 简化解释器。
4、一个应用,一个虚拟机实例,一个进程(所有android应用的线程都是对应一个linux线程,都运行在自己的沙盒中,不同的应用在不同的进程中运行。每个android dalvik应用程序都被赋予了一个独立的linux PID(app_*))

sleep和wait

1,sleep是来自Thread,wait是来自Object中方法;
2,sleep方法没有释放锁,而wait方法释放了锁。
3,wait,notify,notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。
4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
5,sleep是Thread类的静态方法。sleep的作用是让线程休眠制定的时间,在时间到达时恢复,调用此方法会让当前线程暂停执行指定的时间,将执行机会(cpu)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复。wait是Object的方法,也就是说可以对任意一个对象调用wait方法,调用wait方法将会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者。

Jave基本知识(一)相关推荐

  1. 《Java和Android开发实战详解》——1.2节Java基础知识

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  2. [C/C++基础知识] 那些被遗忘的链表知识

    最近快毕业了,复试又复习了一些知识.其中就包括那些被遗忘的链表知识,而它又是C语言中非常重要一个知识点.同时发现很多同学都会忘记该知识,所以通过这篇文章一方面帮助大家回忆链表知识,同时对刚接触C语言的 ...

  3. 数据库入门理论知识介绍以及编译安装MySql

    数据库入门理论知识介绍以及编译安装MySql 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1&g ...

  4. CSP初赛基础知识整理

    一.硬件 计算机发展: 年代 元件 第一代 1946~1958 电子管 第二代 1959~1964 晶体管 第三代 1965~1970 集成电路 第四代 1971~? 大规模集成电路 世界上第一台计算 ...

  5. 2019CSP初赛基础知识整理

    一.硬件 计算机发展:   年代 元件 第一代 1946~1958 电子管 第二代 1959~1964 晶体管 第三代 1965~1970 集成电路 第四代 1971~? 大规模集成电路 世界上第一台 ...

  6. 学习大数据要掌握哪些语言?哪些必备知识和技能呢?

    大数据是近五年兴起的行业,发展迅速,很多技术经过这些年的迭代也变得比较成熟了,同时新的东西也不断涌现,想要保持自己竞争力的唯一办法就是不断学习.但是,大数据需要学习什么? 01 思维导图 下面的是我之 ...

  7. Jave中IO的详细总结

    Jave中IO的详细总结 前语 IO流概述和分类 IO流介绍 IO流的分类 IO流的使用场景 File文件是干嘛的 字节流 字节流的写入 字节流的读入 字节流案例:复制文本文件 字节流案例:复制图片文 ...

  8. 即将实习的应届毕业生 学习java SpringMVC 数据库 知识总结

    即将实习的应届毕业生 学习java SpringMVC 数据库 知识总结 1.Java语言的优点: 1)Java是纯面向对象语言 2)与平台无关性,一次编译到处运行 3)Java提供了狠多内置类库 4 ...

  9. 代理服务器基础知识介绍及防火墙知识普及

    代理服务器基础知识介绍及防火墙知识普及 2004-10-17     作者:佚名    来源:诗凌工作室 代理服务器基础知识介绍: Internet大家已经不在陌生,现在已经迈进了广大工薪阶层的家庭. ...

  10. 数据算法算力知识反绎学习

    2020 年 8 月 7 日,全球人工智能和机器人峰会(CCF-GAIR 2020)正式开幕.CCF-GAIR 2020 峰会由中国计算机学会(CCF)主办,香港中文大学(深圳).雷锋网联合承办,鹏城 ...

最新文章

  1. 计算机组成原理 — FPGA 现场可编程门阵列
  2. dede 删除文章的同时自动删除生成的html文件夹,删除织梦自带编辑器自动加DIV的方法...
  3. 使用Github(创建仓库、仓库主页说明)
  4. 重启开源,分享无限--微软面试187题精选
  5. C++ STL 容器的一些总结
  6. 第 5 节:前端面试指南 — Vue 篇(附面试题)
  7. CVE-2020-11945 Squid未授权整数溢出分析
  8. 如何从零构建你的自动化运维体系?——从制度到技术
  9. MATLAB制作歌曲
  10. java rgb565转rgb888_RGB565 转RGB888的循环补偿(zz)
  11. 1597: [Usaco2008 Mar]土地购买 斜率优化
  12. 媒体:28省份已开展不动产登记机构整合工作
  13. 阿里云朱照远:AI打开新视界 8K时代已来! 1
  14. Tomcat使用startup.bat启动闪退的原因
  15. Java中boolean型变量的默认值问题
  16. LeetCode695. 岛屿的最大面积———海岛
  17. MYSQL—— TIME_TO_SEC函数与UNIX_TIMESTAMP函数区别
  18. 思维导图绘制就是这样简单,手把手教你绘制一幅思维导图
  19. java基础巩固-宇宙第一AiYWM:为了维持生计,大数据Hadoop之HDFS分布式文件系统(HDFS读写流程、主从集群两种问题“单点故障”及“压力过大内存受限”、HDFS的架构设计)~整起
  20. 现代控制理论-工程数学基础(1)-特征值特征向量

热门文章

  1. PHP+node采集58微聊聊天信息
  2. 测试游戏帧率电脑温度的软件,游戏中显示帧数和温度方法_游戏画面中实时显示FPS帧数温度技巧...
  3. zen brush 2 android,Zen Brush 2 才不仅仅是个练字 App 那么简单
  4. vue html实例,一个页面上多个Vue实例
  5. 利用python将excel导入SQL Server数据库
  6. CTabCtrl设值选项卡标签宽度的方法
  7. cuda cudnn 下载地址
  8. oracle触发器 菜鸟教程,PostgreSQL 触发器
  9. 什么是WPF,对WPF的认识
  10. 最新PHP乐购社区源码+点卡购物系统