Skip to content

Commit 0a929f9

Browse files
committed
updates
1 parent 1ee927a commit 0a929f9

File tree

8 files changed

+321
-17
lines changed

8 files changed

+321
-17
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
* [基本数据类型包装类](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/基本数据类型包装类.html)
3131
* [阿里巴巴Java开发手册](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/阿里巴巴Java开发手册.html)
3232
* [阿里 Java 开发手册最新完美版,千锤百炼始出炉](第2章 Java编程基础/阿里 Java 开发手册最新完美版,千锤百炼始出炉.md)
33+
* [Java程序员必读的书籍](第2章 Java编程基础/Java程序员必读的书籍.md)
3334
* [Google Java编程风格指南](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/Google%20Java编程风格指南.html)
3435
* [详细介绍JAVA和C++区别](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/详细介绍JAVA和C++区别.html)
3536
* [引用、指针和句柄的区别](第2章 Java编程基础/引用、指针和句柄的区别.md)

SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
* [阿里巴巴Java开发手册](第2章 Java编程基础/阿里巴巴Java开发手册.md)
1818
* [阿里 Java 开发手册最新完美版,千锤百炼始出炉](第2章 Java编程基础/阿里 Java 开发手册最新完美版,千锤百炼始出炉.md)
1919
* [Google Java编程风格指南](第2章 Java编程基础/Google Java编程风格指南.md)
20+
* [Java程序员必读的书籍](第2章 Java编程基础/Java程序员必读的书籍.md)
2021
* [详细介绍JAVA和C++区别](第2章 Java编程基础/详细介绍JAVA和C++区别.md)
2122
* [引用、指针和句柄的区别](第2章 Java编程基础/引用、指针和句柄的区别.md)
2223
* [什么是堆和栈,它们在哪儿?](第2章 Java编程基础/什么是堆和栈,它们在哪儿?.md)

第2章 Java编程基础/Java程序员必读的书籍.md

Lines changed: 283 additions & 0 deletions
Large diffs are not rendered by default.

第2章 Java编程基础/引用、指针和句柄的区别.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。
44

5+
句柄就是个数字,一般和当前系统下的整数的位数一样,比如32bit系统下就是4个字节。
6+
这个数字是一个对象的唯一标示,和对象一一对应。
7+
这个对象可以是一个块内存,一个资源,或者一个服务的context(如 socket,thread)等等。
8+
这个数字的来源可以有很多中,只要能保证和它代表的对象保持唯一对应就可以,比如可以用内存地址,也可以用句柄表的序号,或者干脆用一个自增ID,再或者用以上的值去异或一个常数。
9+
10+
传统上操作系统内核和系统服务API都是 C 语言接口的,但是其内部设计理念上又是OO的,所以有对象概念却没有对应的语言语法支持。
11+
句柄的作用就是在 C 语言环境下代替 C++ 的对象指针来用的。
12+
创建句柄就是构造,销毁句柄就是析构,用句柄调用函数相当于传入this指针。
13+
如果有系统API是 C++ 接口的,那么就没有句柄了,而是某个接口指针,IXXXPtr之类的,比如Windows的com ptr。
14+
515
### 句柄和指针的区别
616

717
当把硬盘上的资源调入内存以后,将有一个句柄指向它,但是句柄只能指向一个资源。而且句柄知道所指的内存有多大。还有指针,指针指向地址,它不知道分配的内存有多大。
@@ -20,8 +30,8 @@
2030

2131
### 隐喻
2232

23-
CSDN上有人说过:牧童遥指杏花村。
24-
牧童的手为指针,杏花村的牌子为句柄,杏花村酒店为对象的实例.
33+
CSDN上有人说过:牧童遥指杏花村。
34+
牧童的手为指针,杏花村的牌子为句柄,杏花村酒店为对象的实例.
2535
句柄是资源在创建过程中由Windows赋予的,它就是代表这个资源的。
2636

2737
而指针实质上是某个变量或者对象所在内存位置的首地址,是指向对象的。
@@ -31,7 +41,6 @@ CSDN上有人说过:牧童遥指杏花村。
3141
一个是直接找到对象(指针),一个是间接找到对象(句柄)。
3242

3343
例如,杏花村可以搬家(实际上程序运行过程中,资源在内存中的地址是变化的),那么牧童的手的指向也就不同(指针)了,然而即使搬了家,“杏花村”这块牌匾是不变的,通过打听“杏花村”这个名称,还是可以间接找到它的(地址)。
34-
另外一个例子:
3544

3645
HANDLE的本意是把柄,把手的意思,是你与操作系统打交道的东东。
3746

第2章 Java编程基础/详细介绍JAVA和C++区别.md

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Java和C++的相似之处多于不同之处,但两种语言问几处主要的
66

77
我在这里不能完全列出不同之处,仅列出比较显著的区别:
88

9-
## **1. 指针**
9+
## 1. 指针
1010

1111
Java语言让编程者无法找到指针来直接访问内存,并且增添了自动的内存管理功能,从而有效地防止了C/C++语言中指针操作失误,如野指针所造成的系统崩溃。但也不是说Java没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。
1212

@@ -18,15 +18,17 @@ Person p;
1818

1919
存储了一个Person对象的地址,而实际上这个对象被存储在内存空间的其他某个地方。这个名称p只是对象的一个引用,它并不是对象本身。在Java中这条语句只是创建了一个放置某个对象的存储地址的空间。可以将引用认为是普通变量语法中的指针。
2020

21-
## **2. 多重继承**
21+
C++中也使用了引用,C++中的引用是隐式的指针,使用更方便,阅读性更好
22+
23+
## 2. 多重继承
2224

2325
C++支持多重继承,这是C++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了C++多重继承的功能,又避免了C++中的多重继承实现方式带来的诸多不便。
2426

25-
## **3. 数据类型及类**
27+
## 3. 数据类型及类
2628

2729
Java是完全面向对象的语言,所有函数和变量部必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而C++允许将函数和变量定义为全局的。此外,Java中取消了C/C++中的结构和联合,消除了不必要的麻烦。
2830

29-
## **4. 自动内存管理**
31+
## 4. 自动内存管理
3032

3133
Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于C++的new操作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:
3234

@@ -37,21 +39,23 @@ r.work();
3739

3840
语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收操作,不需要程序员进行删除。而C++中必须由程序员释放内存资源,增加了程序设计者的负扔。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。Java里无用内存回收程序是以线程方式在后台运行的,利用空闲时间工作。
3941

40-
## **5. 操作符重载**
42+
C++中释放内存需要手动实现析构函数,通过new动态申请的堆内存空间,需要手动调用delete方法释放
43+
44+
## 5. 运算符重载
4145

42-
Java不支持操作符重载。操作符重载被认为是C++的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。
46+
Java不支持操作符重载。运算符重载被认为是C++的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。
4347

44-
## **6. 预处理功能**
48+
## 6. 预处理功能
4549

4650
Java不支持预处理功能。C/C++在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。Java虚拟机没有预处理器,但它提供的引入语句(import)与C++预处理器的功能类似。
4751

48-
## **7. Java不支持缺省函数参数,而C++支持**
52+
## 7. Java不支持缺省函数参数,而C++支持
4953

5054
在C中,代码组织在函数中,函数可以访问程序的全局变量。C++增加了类,提供了类算法,该算法是与类相连的函数,C++类方法与Java类方法十分相似,然而,由于C++仍然支持C,所以不能阻止C++开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。
5155

5256
Java没有函数,作为一个比C++更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。
5357

54-
## **8. 字符串**
58+
## 8. 字符串
5559

5660
C和C++不支持字符串变量,在C和C++程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(String和StringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
5761

@@ -60,15 +64,15 @@ C和C++不支持字符串变量,在C和C++程序中使用Null终止符代表
6064
- Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
6165
- 可对字符串用“十”进行连接操作。
6266

63-
## **9. goto语句**
67+
## 9. goto语句
6468

6569
“可怕”的goto语句是C和C++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
6670

67-
## **l0. 类型转换**
71+
## l0. 类型转换
6872

6973
在C和C++中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在C++中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持C++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
7074

71-
## **11. 异常**
75+
## 11. 异常
7276

7377
Java中的异常机制用于捕获例外事件,增强系统容错能力
7478

@@ -79,4 +83,8 @@ try{//可能产生例外的代码
7983
}
8084
```
8185

82-
其中exceptionType表示异常类型。而C++则没有如此方便的机制。
86+
其中exceptionType表示异常类型。而C++则没有如此方便的机制。
87+
88+
## 12. 模板
89+
90+
函数模板,类似于java中的泛型方法,类模板,类似于java中的泛型类
42.8 KB
Loading

第5章 多线程/线程池.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Java5中的线程并发库都在java.util.concurrent包及子包中
66

77
![ThreadPoolExecutor](http://img.blog.csdn.net/20161024205013699)
88

9+
![](img/threadpoolexecutor.png)
10+
911
Executor是线程池的顶级接口,只有一个执行任务的方法execute()
1012

1113
ExecutorService是Executor的子接口,该接口中包含了线程池常用的一些方法

第9章 安全加密/消息摘要MessageDigest.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010
# 1. 常见算法
11-
MD5、SHA、CRC
11+
MD5(已经被攻破)、SHA(sha1,sha256,sha512)、CRC、SM系列等
1212

1313
# 2. 使用场景
1414

0 commit comments

Comments
 (0)