图说Java —— 理解Java机制最受欢迎的8幅图
原文链接: Top 8 Diagrams for Understanding Java
翻译人员: 铁锚
翻译时间: 2013年10月29日
世间总是一图胜过千万言!
下面的8幅图来自于 Program Creek 的 Java教程 ,目前这是该网站最受欢迎的文章.
希望本文能帮你回顾你已经知道的那些知识。如果图片讲解的不够清晰,你可能需要阅读详细的文章或者进行搜索。
1. 字符串不变性(String Immutability)
下图显示了如下代码运行的过程:
String s = "abcd"; s = s.concat("ef");
中文参考: Java String 详解
图1
2. equals() 与 hashCode() 方法的关系
HashCode(哈希编码,散列码)是设计了用来提高性能的.
equals()与hashCode()方法之间的关系可以概括为:
2.1 如果两个对象相等(equal),那么必须拥有相同的哈希码(hash code)
2.2 即使两个对象有相同的哈希值(hash code),他们不一定相等.
中文参考: HashMap的实现原理
3. Java 异常类层次结构
粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.
另一类异常是运行时异常(runtime exceptions),需要程序员自己分析代码决定是否捕获和处理。
而声明为Error的,则属于严重错误,需要根据业务信息进行特殊处理,Error不需要捕捉。
中文示例:
Exception
4. 集合类层次结构
注意Collections(工具类) 和 Collection(集合顶层接口) 的区别:
中文参考:
Collections
5. Java同步
Java同步(synchronization)机制可以用一座大楼来比喻:
中文参考:
线程同步---synchronized
6.对象皆指针(Aliasing,别名)
别名是指多个引用指向同一个内存地址(对象实际地址,可以理解为这就是对象),甚至这些引用的类型完全不一样.
7. 堆(Heap)和栈(Stack)
下图显示了运行时内存中方法和对象所处的地盘
绝大多数情况下:对象(及其属性域)都保存在堆里面,而方法的参数,局部变量(引用,以及6种基本类型)保存在栈里面.
当然,极特殊的情况下(极度优化[对象入栈],常量池[String],静态变量[方法区]等)也会打破这个潜规则。
8. JVM运行时数据区域划分
下图显示了JVM(Java虚拟机)运行时总体的数据区域划分
相关文章:
1.
Java hashCode() and equals() Contract for the contains(Object o) Method of Set
2. Java equals() and hashCode() Contract
3. How does Java handle aliasing?
4. HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap