java 图表_理解java的八个图表

1、字符串的不可变性

String s="abcd";

s=s.concat("ef");

835c3165fed1a00ceea1cc6dc9263b59.png

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

hashcode()旨在提高性能;

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

如果两个对象相等,则它们必须具有相同的散列码。

如果两个对象具有相同的哈希码,则它们可能相等,也可能不相等。

散列的价值在于速度。

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

887748dcf2164ec42f7114d9e9d8022c.png

3、java异常类层次结构

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

4e2dbebc4b5369471e117f03cd6989a3.png

4、集合框架类

80247ef0c78214101c49e6f31a70dcb5.png

093cfa79e5777178fb6f1c7d1c661c7f.png

5、java同步

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

3fefce429ca2456698f50bec483e9c1f.png

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

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

public class SynchronizedCounter {

private int c = 0;

public synchronized void increment() {

c++;

}

public synchronized void decrement() {

c--;

}

public synchronized int value() {

return c;

}

}

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

public class MsLunch {

private long c1 = 0;

private long c2 = 0;

private Object lock1 = new Object();

private Object lock2 = new Object();

public void inc1() {

synchronized(lock1) {

c1++;

}

}

public void inc2() {

synchronized(lock2) {

c2++;

}

}

}

6、别名

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

75475df99562cd4afff9adc3e8847fa7.png

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

7、对战和堆

此图显示了方法和对象在运行时内存中的位置。

fbfeac2e6f9c4f0b3f7c536ae9183834.png

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

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

1223945365e4a8d41e4892ff17f56a90.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值