Skip to content

Commit 6454425

Browse files
author
jackchan1999
committed
updates
1 parent 1de8976 commit 6454425

File tree

11 files changed

+98
-16
lines changed

11 files changed

+98
-16
lines changed

README.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
## Java基础入门笔记
22

3-
对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现。
4-
5-
对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步。
6-
7-
对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现。
8-
9-
每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我。
10-
113
![](assets/note.jpg)
124

135
> 十年生死两茫茫,不思量,自难忘,华年短暂,陈辞岁月悠悠伤,
@@ -16,13 +8,23 @@
168
>
179
> 青丝化雪、鬓角成霜,已是英雄迟暮,人生怎慷慨激昂?
1810
11+
对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现。
12+
13+
对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步。
14+
15+
对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现。
16+
17+
每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我。
18+
1919
## GitHub托管主页
2020

2121
**https://github.com/JackChen1999/Java-basic-introduction**
2222

2323
请读者点击Star进行关注并支持!
2424

25-
## 在线阅读
25+
## GitBook在线阅读
26+
27+
在线阅读,PDF、ePub、Mobi电子书下载
2628

2729
**https://alleniverson.gitbooks.io/java-basic-introduction/content**
2830

@@ -40,6 +42,7 @@
4042
* [基本数据类型包装类](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/基本数据类型包装类.html)
4143
* [阿里巴巴Java开发手册](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/阿里巴巴Java开发手册.html)
4244
* [阿里 Java 开发手册最新完美版,千锤百炼始出炉](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/阿里%20Java%20开发手册最新完美版,千锤百炼始出炉.html)
45+
* [阿里《Java开发手册》终极版!](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/阿里《Java开发手册》终极版!.html)
4346
* [Java程序员必读的书籍](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/Java程序员必读的书籍.html)
4447
* [Google Java编程风格指南](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/Google%20Java编程风格指南.html)
4548
* [详细介绍JAVA和C++区别](https://alleniverson.gitbooks.io/java-basic-introduction/content/第2章%20Java编程基础/详细介绍JAVA和C++区别.html)
@@ -171,7 +174,7 @@
171174

172175
## 关注我
173176

174-
- Email:<815712739@qq.com>
177+
- Email:<619888095@qq.com>
175178
- CSDN博客:[Allen Iverson](http://blog.csdn.net/axi295309066)
176179
- 新浪微博:[AndroidDeveloper](http://weibo.com/u/1848214604?topnav=1&wvr=6&topsug=1&is_all=1)
177180
- GitHub:[JackChan1999](https://github.com/JackChan1999)

SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
* [基本数据类型包装类](第2章 Java编程基础/基本数据类型包装类.md)
1717
* [阿里巴巴Java开发手册](第2章 Java编程基础/阿里巴巴Java开发手册.md)
1818
* [阿里 Java 开发手册最新完美版,千锤百炼始出炉](第2章 Java编程基础/阿里 Java 开发手册最新完美版,千锤百炼始出炉.md)
19+
* [阿里《Java开发手册》终极版!](第2章 Java编程基础/阿里《Java开发手册》终极版!.md)
1920
* [Google Java编程风格指南](第2章 Java编程基础/Google Java编程风格指南.md)
2021
* [Java程序员必读的书籍](第2章 Java编程基础/Java程序员必读的书籍.md)
2122
* [详细介绍JAVA和C++区别](第2章 Java编程基础/详细介绍JAVA和C++区别.md)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
别人都说我们是码农,但我们知道,自己是个艺术家。也许我们不过多在意自己的外表和穿着,但我们不羁的外表下,骨子里追求着代码的美、质量的美。而代码规约其实就是一个对美的定义。
2+
3+
![Java开发手册](images/Java开发手册_1.webp)
4+
5+
《阿里巴巴Java开发手册》系统性地从编程、数据库、异常日志、工程结构、安全、单元测试六大方面,总结出优秀Java开发者必备的技术素养。时值手册发布一周年之际,阿里官方对外正式公开《阿里巴巴Java开发手册》终!极!版!!!
6+
7+
该版本将是阿里官方对外释放的最后一个PDF版本,也是史上内容最全、修正最为彻底的一个版本,并且史无前例地增加了单元测试规约,绝对值得珍藏。
8+
9+
## 如何快速下载?
10+
11+
关注阿里技术微信公众号,回复“手册”两字即可免费下载。
12+
13+
![Java开发手册](images/Java开发手册_2.webp)
14+
15+
## 单元测试规约,优秀开发者的必备技能
16+
17+
单元测试是一件老生常谈,深入人心的事情,但是喜欢写单元测试的开发同学少之又少。单元测试似乎是功不在当下的事情,快速完成需求成为了王道。在工作量评估的时候,如果开发同学说需要花上若干天时间来写单测,产品可能就会磨刀霍霍杀来。
18+
19+
尽管如此,单元测试是一件有情怀,有技术素养,有远期收益的工作。它能够有效监测软件模块质量、促进代码深度优化,进而降低线上故障率,长期执行有助于提升项目迭代效率,并增加重构自信,减少重构成本。简直就是bug灭绝器有木有!
20+
21+
![Java开发手册](images/Java开发手册_3.webp)
22+
23+
所以此次在终极版本中,阿里根据内部单元测试的实践经验,详细描述了单元测试的相关原则和重要建议。
24+
25+
## AIR原则
26+
27+
A:Automatic,单元测试需要测试框架自动化执行,才有意义。
28+
29+
I:Independent,单元测试用例之间互相独立,不存在依赖关系。
30+
31+
R:Repeatable,单元测试可以被重复执行,且结果一致。
32+
33+
## BCDE原则
34+
35+
B:Border,边界值测试,包括循环边界、特殊取值、特殊时间点等。
36+
37+
C:Correct,正确的输入,并得到预期的结果。
38+
39+
D:Design,与设计文档相结合,来编写单元测试。
40+
41+
E:Error,强制错误信息输入(如:非法数据),并得到预期的结果。
42+
43+
更多关于单元测试的内容、优化项目,欢迎查阅《阿里巴巴Java开发手册》终极版。
44+
45+
![Java开发手册](images/Java开发手册_4.webp)
46+
47+
## 一劳永逸:官方自动化IDE检测插件即将问世
48+
49+
为了帮助开发者更好提高编码效率,阿里巴巴基于手册内容,独立研发一套自动化IDE检测插件。该插件在扫描代码后,将不符合《手册》的代码按block/critical/major三个等级显示在下方;实时编写代码时,还会给出智能提示,告诉你如何编写可以更优雅;对于历史代码,部分规则实现了批量一键修复的功能。是不是很方便?
50+
51+
据悉,10月14日,杭州云栖大会研发效能峰会场,阿里将正式对外开放插件及源码。届时,阿里技术公众号将第一时间公开免费下载地址。
52+
53+
## 手册虽有终极版,技术没有终点站
54+
55+
编码规范的价值在业内有着广泛的共识,但在现实中却被否定得一塌糊涂。工程师曾经最引以为豪的代码,因为编码规范的缺失、命名的草率而全面地摧毁了彼此的互信,并严重地制约了彼此的高效协同。工程师一边吐槽别人的代码,一边写着可能遭受同样命运的代码,不时的推倒重建或心惊胆战的维护似乎成了工作的主旋律。
56+
57+
![Java开发手册](images/Java开发手册_5.webp)
58+
59+
《阿里巴巴Java开发手册》的使命,在于帮助工程师脱离繁琐,重燃技术激情。业务会变、玩法会变、需求会变,做好代码质量的决心永不会变。
60+
61+
手册虽有终极版,技术没有终点站。不断打磨技术,成为更好的自己,我们共勉。
62+
63+
你对《阿里巴巴Java开发手册》终极版有哪些想法或建议?欢迎在留言区一起交流讨论哦。

第3章 面向对象/抽象类与接口.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,15 @@ class ClassName implements Interface1,Interface2,[....]{
430430

431431
接口是事物的能力,直接理解就是约定;抽象类是事物的本质。
432432

433+
抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
434+
435+
继承是 `is a`的关系,而 接口实现则是 `has a` 的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现就不需要有这层类型关系。
436+
437+
设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。也就是说:
438+
439+
- 对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;
440+
- 而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。
441+
433442
抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 “是不是”的关系,而 接口 实现则是 “有没有”的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。
434443

435444
设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。
@@ -482,6 +491,12 @@ class AlarmDoor extends Door implements Alarm {
482491
}
483492
}
484493
```
494+
3.实际应用上的差异
495+
496+
在实际使用中,使用抽象类(也就是继承),是一种强耦合的设计,用来描述`A is a B` 的关系,即如果说A继承于B,那么在代码中将A当做B去使用应该完全没有问题。比如在Android中,各种控件都可以被当做View去处理。
497+
498+
如果在你设计中有两个类型的关系并不是`is a`,而是`is like a`,那就必须慎重考虑继承。因为一旦我们使用了继承,就要小心处理好子类跟父类的耦合依赖关系。组合优于继承。
499+
485500
继承和实现接口的区别就是:继承描述的是这个类『是什么』的问题,而实现的接口则描述的是这个类『能做什么』的问题。
486501

487502
抽象类

第5章 多线程/img/concurrent.png

45 KB
Loading

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

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

99
![](img/threadpoolexecutor.png)
1010

11+
![](img/concurrent.png)
12+
1113
Executor是线程池的顶级接口,只有一个执行任务的方法execute()
1214

1315
ExecutorService是Executor的子接口,该接口中包含了线程池常用的一些方法
@@ -319,8 +321,8 @@ public class ThreadPoolTest {
319321
ExecutorService threadPool = Executors.newSingleThreadExecutor();
320322

321323
for(int i=1;i<=10;i++){
322-
  //内部类不能访问外部类的局部变量,所以i要定义为final,又由于i++.
323-
  //所以在循环内部定义一个变量接收i
324+
//内部类不能访问外部类的局部变量,所以i要定义为final,又由于i++.
325+
//所以在循环内部定义一个变量接收i
324326
final int task = i;
325327
threadPool.execute(new Runnable() {
326328

@@ -330,7 +332,6 @@ public class ThreadPoolTest {
330332
System.out.println(Thread.currentThread().getName()
331333
+" is looping of "+ j+" for task of " +task);
332334
}
333-
334335
}
335336
});
336337
}
@@ -351,7 +352,7 @@ public class ThreadPoolTest {
351352
5, //5秒以后执行
352353
TimeUnit.SECONDS); //单位
353354

354-
//在某个时间执行一次后,再指定后续的执行间隔时间
355+
//在某个时间执行一次后,再指定后续的执行间隔时间
355356
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable(){
356357

357358
@Override
@@ -360,9 +361,8 @@ public class ThreadPoolTest {
360361
}
361362

362363
}, 10, //第一次在10秒时爆炸
363-
3, //以后每隔3秒爆炸一次。
364+
3, //以后每隔3秒爆炸一次。
364365
TimeUnit.SECONDS);
365-
366366
}
367367
}
368368
```

0 commit comments

Comments
 (0)