1、字符串的不可变性

String s="abcd";

s=s.concat("ef");

2、e'quals()和hashcode() contract

hashcode()旨在提高性能;

equals()和hasCode()之间的契约是:

  1. 如果两个对象相等,则它们必须具有相同的散列码。
  2. 如果两个对象具有相同的哈希码,则它们可能相等,也可能不相等。

散列的价值在于速度。

假如键没有按照一定的顺序进行保存,那么查询的时候就只能按照顺序进行线性查询,然而,线性查询是最慢的查询方式。所以,将键值按照一定的顺序排序,并且使用二分查找能购有效的提升速度。散列在此之上,更近一步,他将键保存在数组中(数组的查询速度最快),用数组来表示键的信息,但是由于Map的容量是可变的,而数组的容量是不变的。要解决这个问题,数组中存的并不是键本身,而是键对象生成的一个数字,将其作为数组的下标,这个数字就是散列码。

3、java异常类层次结构

红色被检查的异常必须在方法的子句中被捕获或者生命

4、集合框架类

 

 

 

5、java同步

同步的意思可以用一个建筑的类来说明

 

Java编程语言中提供了两种基本的同步用语:同步方法和同步语句。同步语句相对而言更为复杂一些,我们将在下一小节中进行描述。本节重点讨论同步方法。

 

我们只需要在声明方法的时候增加关键字synchronized即可:

 

[java] view plain copy
 
  1. public class SynchronizedCounter {  
  2.     private int c = 0;  
  3.     public synchronized void increment() {  
  4.         c++;  
  5.     }  
  6.     public synchronized void decrement() {  
  7.         c--;  
  8.     }  
  9.     public synchronized int value() {  
  10.         return c;  
  11.     }  
  12. }  

c1和c2,这两个变量绝不会一起使用。所有对这两个变量的更新都需要进行同步。但是没有理由阻止对c1的更新和对c2的更新出现交错——这样做会创建不必要的阻塞,进而降低并发性。此时,我们没有使用同步方法或者使用和this相关的锁,而是创建了两个单独的对象来提供锁。

 

[java] view plain copy
 
  1. public class MsLunch {  
  2.     private long c1 = 0;  
  3.     private long c2 = 0;  
  4.     private Object lock1 = new Object();  
  5.     private Object lock2 = new Object();  
  6.     public void inc1() {  
  7.         synchronized(lock1) {  
  8.             c1++;  
  9.         }  
  10.     }  
  11.     public void inc2() {  
  12.         synchronized(lock2) {  
  13.             c2++;  
  14.         }  
  15.     }  
  16. }  

 6、别名

别名意味着可以更新的位置有多个别名,并且这些别名具有不同的类型。 
这里写图片描述

别名现象:是java操作对象的一种基本方式,当对引用型变量进行赋值操作时,可能出现别名现象,两个引用变量共同指向同一个对象,当一个引用对对象进行改变时,另一个引用变量的对象值也跟着改变

7、对战和堆

此图显示了方法和对象在运行时内存中的位置。 
这里写图片描述

8、java jvm在运行时的数据区

此图显示了整个JVM运行时数据区域。

这里写图片描述