11[ TOC]
22
33
4-
4+ <!-- TOC -->
5+
6+ - [ 前言] ( #前言 )
7+ - [ 一、基本概念] ( #一基本概念 )
8+ - [ 1. Java程序初始化的顺序是怎么样的(B50)] ( #1-java程序初始化的顺序是怎么样的b50 )
9+ - [ 2. Java和C++的区别] ( #2-java和c的区别 )
10+ - [ 2. 什么是反射] ( #2-什么是反射 )
11+ - [ 3. 什么是注解] ( #3-什么是注解 )
12+ - [ 4. 什么是泛型] ( #4-什么是泛型 )
13+ - [ 5. 为什么要实现内存模型?] ( #5-为什么要实现内存模型 )
14+ - [ 6. 字节与字符的区别 ?【蚂蚁金服内推】] ( #6-字节与字符的区别-蚂蚁金服内推 )
15+ - [ 7. 有哪些访问修饰符] ( #7-有哪些访问修饰符 )
16+ - [ 8. 深拷贝与浅拷贝] ( #8-深拷贝与浅拷贝 )
17+ - [ 二、面向对象] ( #二面向对象 )
18+ - [ 1. Java的四个基本特性(<u >抽象、封装、继承,多态</u >),对多态的理解(多态的实现方式)以及在项目中那些地方用到多态] ( #1-java的四个基本特性u抽象封装继承多态u对多态的理解多态的实现方式以及在项目中那些地方用到多态 )
19+ - [ 2. 什么是重载和重写?] ( #2-什么是重载和重写 )
20+ - [ 3. 面向对象和面向过程的区别?用面向过程可以实现面向对象吗?那是不是不能面向对象?] ( #3-面向对象和面向过程的区别用面向过程可以实现面向对象吗那是不是不能面向对象 )
21+ - [ 4. 面向对象开发的六个基本原则(单一职责、开放封闭、里氏替换、依赖倒置、合成聚合复用、接口隔离),迪米特法则。在项目中用过哪些原则] ( #4-面向对象开发的六个基本原则单一职责开放封闭里氏替换依赖倒置合成聚合复用接口隔离迪米特法则在项目中用过哪些原则 )
22+ - [ 5. 内部类有哪些] ( #5-内部类有哪些 )
23+ - [ (一)成员内部类] ( #一成员内部类 )
24+ - [ (二)局部内部类] ( #二局部内部类 )
25+ - [ (三)匿名内部类] ( #三匿名内部类 )
26+ - [ (四)静态内部类] ( #四静态内部类 )
27+ - [ 6. 组合、继承和代理的区别] ( #6-组合继承和代理的区别 )
28+ - [ 定义] ( #定义 )
29+ - [ 使用场合] ( #使用场合 )
30+ - [ 7. 什么是构造函数] ( #7-什么是构造函数 )
31+ - [ 8. 向上造型和向下造型] ( #8-向上造型和向下造型 )
32+ - [ 三、关键字] ( #三关键字 )
33+ - [ 1. final与static的区别] ( #1-final与static的区别 )
34+ - [ final] ( #final )
35+ - [ static] ( #static )
36+ - [ 2. break、continue、return] ( #2-breakcontinuereturn )
37+ - [ break] ( #break )
38+ - [ continue] ( #continue )
39+ - [ return] ( #return )
40+ - [ 3. final、finally和finalize有什么区别【B77】] ( #3-finalfinally和finalize有什么区别b77 )
41+ - [ final] ( #final-1 )
42+ - [ finally] ( #finally )
43+ - [ finalize] ( #finalize )
44+ - [ 4. assert有什么作用?] ( #4-assert有什么作用 )
45+ - [ 5. volatile] ( #5-volatile )
46+ - [ 6. instanceof] ( #6-instanceof )
47+ - [ 7. strictfp] ( #7-strictfp )
48+ - [ 8. transient] ( #8-transient )
49+ - [ 四、基本数据类型与运算] ( #四基本数据类型与运算 )
50+ - [ 1. Java的基本数据类型/引用类型有哪些?知道自动装箱和拆箱吗?] ( #1-java的基本数据类型引用类型有哪些知道自动装箱和拆箱吗 )
51+ - [ 2. ValueOf缓存池] ( #2-valueof缓存池 )
52+ - [ 3. i++和++i有什么区别【B97】] ( #3-i和i有什么区别b97 )
53+ - [ 4. 位运算符] ( #4-位运算符 )
54+ - [ 5. 原码、补码、反码是什么] ( #5-原码补码反码是什么 )
55+ - [ 6. 不用额外变量交换两个整数的值] ( #6-不用额外变量交换两个整数的值 )
56+ - [ 7. 不使用运算符进行a+b操作] ( #7-不使用运算符进行ab操作 )
57+ - [ 8. &和&& 、|和||的区别?【阿里实习生面试】] ( #8-和-和的区别阿里实习生面试 )
58+ - [ 五、字符串与数组] ( #五字符串与数组 )
59+ - [ 1. String、StringBuffer、StringBuilder以及对String不变性的理解] ( #1-stringstringbufferstringbuilder以及对string不变性的理解 )
60+ - [ 2. String有重写Object的hashcode和toString吗?如果重写equals不重写hashcode会出现什么问题?] ( #2-string有重写object的hashcode和tostring吗如果重写equals不重写hashcode会出现什么问题 )
61+ - [ 3. 如果你定义一个类,包括学号,姓名,分数,如何把这个对象作为key?要重写equals和hashcode吗] ( #3-如果你定义一个类包括学号姓名分数如何把这个对象作为key要重写equals和hashcode吗 )
62+ - [ 4. 字面量] ( #4-字面量 )
63+ - [ 六、异常处理] ( #六异常处理 )
64+ - [ 1. 常见异常分为那两种(Exception,Error),常见异常的基类以及常见的异常] ( #1-常见异常分为那两种exceptionerror常见异常的基类以及常见的异常 )
65+ - [ 七、Object 通用方法] ( #七object-通用方法 )
66+ - [ equals()] ( #equals )
67+ - [ hashCode()] ( #hashcode )
68+ - [ toString()] ( #tostring )
69+ - [ clone()] ( #clone )
70+
71+ <!-- /TOC -->
572
673# 前言
774
@@ -379,21 +446,20 @@ Java面向对象的基本思想之一是封装细节并且公开接口。Java语
379446
380447- 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。
381448
382- <div align =" center " > <img src =" ../pics/shadow_copy .jpg " width =" " /></div ><br />
449+ <div align =" center " > <img src =" ../pics/shadow_copy2 .jpg " width =" " /></div ><br />
383450
384451
385452
386453- 深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。
387454
388- <div align =" center " > <img src =" ../pics/deep_copy .jpg " width =" " /></div ><br />
455+ <div align =" center " > <img src =" ../pics/deep_copy2 .jpg " width =" " /></div ><br />
389456
390457
391458
392459参考资料:
393460
394461- [ 细说 Java 的深拷贝和浅拷贝 - 承香墨影 - SegmentFault 思否] ( https://segmentfault.com/a/1190000010648514 )
395-
396-
462+ - [ (基础系列)object clone 的用法、原理和用途 - 掘金] ( https://juejin.im/post/59bfc707f265da0646188bca )
397463
398464
399465
@@ -1363,18 +1429,18 @@ B:0000 1101
13631429| & | 如果相对应位都是1,则结果为1,否则为0 | (A&B)得到12,即0000 1100 |
13641430| \| | 如果相对应位都是0,则结果为0,否则为1 | (A\| B)得到61,即 0011 1101 |
13651431| ^ | 如果相对应位值相同,则结果为0,否则为1 | (A^B)得到49,即 0011 0001 |
1366- | 〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
1432+ | 〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0 | (〜A)得到-61,即1100 0011 |
13671433| << | (左移一位乘2)按位左移运算符。左操作数按位左移右操作数指定的位数。左移n位表示原来的值乘2<sup >n<sup > | A << 2得到240,即 1111 0000 |
1368- | >> | (右移一位除2)有符号右移,按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
1369- | >>> | 无符号右移,按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
1434+ | >> | (右移一位除2)有符号右移,按位右移运算符。左操作数按位右移右操作数指定的位数 | A >> 2得到15即 1111 |
1435+ | >>> | 无符号右移,按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充 | A>>>2得到15即0000 1111 |
13701436
13711437
13721438
13731439## 5. 原码、补码、反码是什么
13741440
13751441### 机器数
13761442
1377- 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
1443+ 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
13781444
13791445比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。那么,这里的 00000011 和 10000011 就是机器数。
13801446
@@ -1402,7 +1468,10 @@ B:0000 1101
14021468
14031469### 反码
14041470
1405- 反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, ** 符号位不变,其余各个位取反** 。
1471+ 反码的表示方法是:
1472+
1473+ - 正数的反码是其本身;
1474+ - 负数的反码是在其原码的基础上, ** 符号位不变,其余各个位取反** 。
14061475
14071476[ +1] = [ 00000001] 原 = [ 00000001] 反
14081477
@@ -1412,7 +1481,10 @@ B:0000 1101
14121481
14131482### 补码
14141483
1415- 补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
1484+ 补码的表示方法是:
1485+
1486+ - 正数的补码就是其本身;
1487+ - 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
14161488
14171489[ +1] = [ 00000001] 原 = [ 00000001] 反 = [ 00000001] 补
14181490
0 commit comments