Skip to content

Commit 627e407

Browse files
committed
调整Java基础中的一些编辑细节
1 parent a199339 commit 627e407

File tree

10 files changed

+87
-86
lines changed

10 files changed

+87
-86
lines changed

java/basis/Collections-Framework.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public class IteratorExample {
5858

5959
}
6060
```
61-
**注意:**当使用Iterator对集合元素进行迭代时,把集合元素的值传给了迭代变量(就如同参数传递是值传递,基本数据类型传递的是值,引用类型传递的仅仅是对象的引用变量
61+
**注意:** 当使用Iterator对集合元素进行迭代时,把集合元素的值传给了迭代变量(就如同参数传递是值传递,基本数据类型传递的是值,引用类型传递的仅仅是对象的**引用变量**
6262

6363
下面的程序演示了这一点:
6464
```java
@@ -113,28 +113,28 @@ List集合代表一个元素有序、可重复的集合,集合中每个元素
113113
List作为Collection接口的子接口,可以使用Collection接口里的全部方法。而且由于List是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法。
114114

115115
#### 3.2.接口中定义的方法
116-
> **void add(int index, Object element):** 在列表的指定位置插入指定元素(可选操作)。
116+
> **void add(int index, Object element):** 在列表的指定位置插入指定元素(可选操作)。
117117
>
118-
> **boolean addAll(int index, Collection<? extends E> c) : ** 将集合c 中的所有元素都插入到列表中的指定位置index处。
118+
> **boolean addAll(int index, Collection<? extends E> c) :** 将集合c 中的所有元素都插入到列表中的指定位置index处。
119119
>
120-
> **Object get(index):**返回列表中指定位置的元素。
120+
> **Object get(index):** 返回列表中指定位置的元素。
121121
>
122122
> **int indexOf(Object o):** 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
123123
>
124-
> **int lastIndexOf(Object o):**返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
124+
> **int lastIndexOf(Object o):** 返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
125125
>
126-
> **Object remove(int index): ** 移除列表中指定位置的元素。
126+
> **Object remove(int index):** 移除列表中指定位置的元素。
127127
>
128-
> **Object set(int index, Object element):**用指定元素替换列表中指定位置的元素。
128+
> **Object set(int index, Object element):** 用指定元素替换列表中指定位置的元素。
129129
>
130-
> **List subList(int fromIndex, int toIndex): **返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的所有集合元素组成的子集。
130+
> **List subList(int fromIndex, int toIndex):** 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的所有集合元素组成的子集。
131131
>
132132
> **Object[] toArray():** 返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。
133133
134134
除此之外,Java 8还为List接口添加了如下两个默认方法。
135-
> **void replaceAll(UnaryOperator operator):**根据operator指定的计算规则重新设置List集合的所有元素。
135+
> **void replaceAll(UnaryOperator operator):** 根据operator指定的计算规则重新设置List集合的所有元素。
136136
>
137-
> **void sort(Comparator c):**根据Comparator参数对List集合的元素排序。
137+
> **void sort(Comparator c):** 根据Comparator参数对List集合的元素排序。
138138
139139
### 4.Queue集合
140140
#### 4.1.简介

java/basis/annotation.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
### 一、元素据
1+
### 一、元数据
22

33
要想理解注解(Annotation)的作用,就要先理解Java中元数据的概念。
44

@@ -37,10 +37,10 @@ Java提供了多种内建的注解,下面接下几个比较常用的注解:@
3737

3838
@Override可适用元素为方法,仅仅保留在java源文件中。
3939

40-
**@Deprecated **
40+
**@Deprecated**
4141
用途:使用这个注解,用于告知编译器,某一程序元素\(比如方法,成员变量\)不建议使用了(即过时了)。
4242
例如:
43-
Person类中的info\(\)方法使用@Deprecated表示该方法过时了
43+
Person类中的info\(\)方法使用`@Deprecated`表示该方法过时了
4444

4545
```java
4646
public class Person {
@@ -54,12 +54,12 @@ public class Person {
5454
调用info\(\)方法会编译器会出现警告,告知该方法已过时。
5555

5656
![](http://upload-images.jianshu.io/upload_images/3985563-4ec2d9c0b02330ee.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)
57-
注解类型分析: @Deprecated可适合用于除注解类型声明之外的所有元素,保留时长为运行时。
57+
注解类型分析:` @Deprecated`可适合用于除注解类型声明之外的所有元素,保留时长为运行时。
5858

5959
**@SuppressWarnings**
6060
用途:用于告知编译器忽略特定的警告信息,例在泛型中使用原生数据类型,编译器会发出警告,当使用该注解后,则不会发出警告。
6161

62-
注解类型分析: @SuppressWarnings可适合用于除注解类型声明和包名之外的所有元素,仅仅保留在java源文件中。
62+
注解类型分析: `@SuppressWarnings`可适合用于除注解类型声明和包名之外的所有元素,仅仅保留在java源文件中。
6363

6464
该注解有方法value\(),可支持多个字符串参数,用户指定忽略哪种警告,例如:
6565

@@ -72,7 +72,7 @@ public class Person {
7272
**@FunctionalInterface**
7373
用途:用户告知编译器,检查这个接口,保证该接口是函数式接口,即只能包含一个抽象方法,否则就会编译出错。
7474

75-
注解类型分析: @FunctionalInterface可适合用于注解类型声明,保留时长为运行时。
75+
注解类型分析: `@FunctionalInterface`可适合用于注解类型声明,保留时长为运行时。
7676

7777
##### 3.元Annotation
7878

@@ -84,7 +84,7 @@ JDK除了在java.lang提供了上述内建注解外,还在java.lang。annotati
8484

8585
**@Documented**
8686

87-
@Documented用户指定被该元Annotation修饰的Annotation类将会被javadoc工具提取成文档,如果定义Annotation类时使用了@Documented修饰,则所有使用该Annotation修饰的程序元素的API文档中将会包含该Annotation说明。
87+
`@Documented`用户指定被该元Annotation修饰的Annotation类将会被javadoc工具提取成文档,如果定义Annotation类时使用了`@Documented`修饰,则所有使用该Annotation修饰的程序元素的API文档中将会包含该Annotation说明。
8888

8989
例如:
9090

@@ -96,7 +96,7 @@ public @interface Deprecated {
9696
}
9797
```
9898

99-
定义@Deprecated 时使用了@Documented,则任何元素使用@Deprecated修饰时,在生成API文档时,将会包含 @Deprecated的说明
99+
定义`@Deprecated`时使用了`@Documented`,则任何元素使用@Deprecated修饰时,在生成API文档时,将会包含`@Deprecated`的说明
100100
以下是String的一个过时的构造方法:
101101

102102
```java
@@ -108,16 +108,16 @@ public String(byte[] ascii,int hibyte,int offset, int count)
108108

109109
**@Inherited**
110110

111-
@Inherited指定被它修饰的Annotation将具有继承性——如果某个类使用了@Xxx注解(定义该Annotation时使用了@Inherited修饰)修饰,则其子类将自动被@Xxx修饰。
111+
`@Inherited`指定被它修饰的Annotation将具有继承性——如果某个类使用了@Xxx注解(定义该Annotation时使用了`@Inherited`修饰)修饰,则其子类将自动被@Xxx修饰。
112112

113113
**@Retention**
114114

115-
@Retention:表示该注解类型的注解保留的时长。当注解类型声明中没有@Retention元注解,则默认保留策略为RetentionPolicy.CLASS。关于保留策略\(RetentionPolicy\)是枚举类型,共定义3种保留策略,如下表:
115+
`@Retention`:表示该注解类型的注解保留的时长。当注解类型声明中没有`@Retention`元注解,则默认保留策略为RetentionPolicy.CLASS。关于保留策略\(RetentionPolicy\)是枚举类型,共定义3种保留策略,如下表:
116116
![](http://upload-images.jianshu.io/upload_images/3985563-828fe68fcdf834b4.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)
117117

118118
**@Target**
119119

120-
@Target:表示该注解类型的所适用的程序元素类型。当注解类型声明中没有@Target元注解,则默认为可适用所有的程序元素。如果存在指定的@Target元注解,则编译器强制实施相应的使用限制。关于程序元素\(ElementType\)是枚举类型,共定义8种程序元素,如下表:
120+
`@Target`:表示该注解类型的所适用的程序元素类型。当注解类型声明中没有`@Target`元注解,则默认为可适用所有的程序元素。如果存在指定的`@Target`元注解,则编译器强制实施相应的使用限制。关于程序元素\(ElementType\)是枚举类型,共定义8种程序元素,如下表:
121121
![](http://upload-images.jianshu.io/upload_images/3985563-7b457df2143fa5dd.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)
122122

123123
### 三、自定义注解(Annotation)
@@ -160,12 +160,12 @@ public class AnnotationDemo {
160160
}
161161
```
162162

163-
由于该注解的保留策略为RetentionPolicy.RUNTIME,故可在运行期通过反射机制来使用,否则无法通过反射机制来获取。这时候注解实现的就是元数据的第二个作用:**代码分析**
163+
由于该注解的保留策略为`RetentionPolicy.RUNTIME`,故可在运行期通过反射机制来使用,否则无法通过反射机制来获取。这时候注解实现的就是元数据的第二个作用:**代码分析**
164164
下面来具体介绍如何通过反射机制来进行注解解析。
165165

166166
### 四、注解解析
167167

168-
接下来,通过反射技术来解析自定义注解。关于反射类位于包java.lang.reflect,其中有一个接口AnnotatedElement,该接口主要有如下几个实现类:Class,Constructor,Field,Method,Package。除此之外,该接口定义了注释相关的几个核心方法,如下:
168+
接下来,通过反射技术来解析自定义注解。关于反射类位于包java.lang.reflect,其中有一个接口AnnotatedElement,该接口主要有如下几个实现类:ClassConstructorFieldMethodPackage。除此之外,该接口定义了注释相关的几个核心方法,如下:
169169
![](http://upload-images.jianshu.io/upload_images/3985563-4077bbaef5b27a4b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)
170170
因此,当获取了某个类的Class对象,然后获取其Field,Method等对象,通过上述4个方法提取其中的注解,然后获得注解的详细信息。
171171

java/basis/arraylist.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ private void grow(int minCapacity) {
7272

7373
### 三、set和get函数 {#3_set和get函数}
7474

75-
Array的put和get函数就比较简单了,先做index检查,然后执行赋值或访问操作:
75+
Array的set和get函数就比较简单了,先做index检查,然后执行赋值或访问操作:
7676

7777
```java
7878
public E set(int index, E element) {

java/basis/finally-return.md

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

33
**(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。**
44

5-
**(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。**
5+
**(2)在try块中有`System.exit(0);`这样的语句,`System.exit(0);`是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。**
66

77
当然还有很多人探讨finally语句的执行与return的关系,颇为让人迷惑,不知道finally语句是在try的return之前执行还是之后执行?我也是一头雾水,我觉得他们的说法都不正确,我觉得应该是:**finally语句是在try的return语句执行之后,return返回之前执行**。这样的说法有点矛盾,也许是我表述不太清楚,下面我给出自己试验的一些结果和示例进行佐证,有什么问题欢迎大家提出来。
88

java/basis/genericity.md

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。
1010

11-
**泛型的目的:**Java 泛型就是把一种语法糖,通过泛型使得在编译阶段完成一些类型转换的工作,避免在运行时强制类型转换而出现ClassCastException,即类型转换异常。
11+
**泛型的目的:** Java 泛型就是把一种语法糖,通过泛型使得在编译阶段完成一些类型转换的工作,避免在运行时强制类型转换而出现`ClassCastException`,即类型转换异常。
1212

1313
##### 2.泛型初探
1414

@@ -59,22 +59,20 @@ public static void main(String[] args)
5959

6060
### 二、泛型的使用
6161

62-
###### 1.泛型类和泛型接口
62+
#### 1.泛型类和泛型接口
6363

6464
下面是JDK 1.5 以后,List接口,以及ArrayList类的代码片段。
6565

6666
```java
6767
//定义接口时指定了一个类型形参,该形参名为E
68-
public interface List<E> extends Collection<E>
69-
{
68+
public interface List<E> extends Collection<E> {
7069
//在该接口里,E可以作为类型使用
7170
public E get(int index) {}
7271
public void add(E e) {}
7372
}
7473

7574
//定义类时指定了一个类型形参,该形参名为E
76-
public class ArrayList<E> extends AbstractList<E> implements List<E>
77-
{
75+
public class ArrayList<E> extends AbstractList<E> implements List<E> {
7876
//在该类里,E可以作为类型使用
7977
public void set(E e) {
8078
.......................
@@ -88,11 +86,10 @@ public class ArrayList<E> extends AbstractList<E> implements List<E>
8886

8987
**泛型类**
9088

91-
定义一个容器类,存放键值对key-value,键值对的类型不确定,可以使用泛型来定义,分别指定为K和V
89+
定义一个容器类,存放键值对key-value,键值对的类型不确定,可以使用泛型来定义,分别指定为K和V
9290

9391
```java
94-
public class Container<K, V>
95-
{
92+
public class Container<K, V> {
9693

9794
private K key;
9895
private V value;
@@ -124,7 +121,7 @@ public class Container<K, V>
124121
在使用Container类时,只需要指定K,V的具体类型即可,从而创建出逻辑上不同的Container实例,用来存放不同的数据类型。
125122

126123
```java
127-
public static void main(String[] args){
124+
public static void main(String[] args) {
128125
Container<String,String> c1=new Container<String ,String>("name","hello");
129126
Container<String,Integer> c2=new Container<String,Integer>("age",22);
130127
Container<Double,Double> c3=new Container<Double,Double>(1.1,1.3);
@@ -165,7 +162,7 @@ public class A extends Container{}
165162

166163
此时系统会把K,V形参当成Object类型处理。
167164

168-
###### 2.泛型的方法
165+
#### 2.泛型的方法
169166

170167
前面在介绍泛型类和泛型接口中提到,可以在泛型类、泛型接口的方法中,把泛型中声明的类型形参当成普通类型使用。 如下面的方式:
171168

@@ -197,15 +194,15 @@ public class Main{
197194
}
198195
```
199196

200-
**所谓泛型方法,就是在声明方法时定义一个或多个类型形参。**泛型方法的用法格式如下:
197+
**所谓泛型方法,就是在声明方法时定义一个或多个类型形参。** 泛型方法的用法格式如下:
201198

202199
```java
203200
修饰符<T, S> 返回值类型 方法名(形参列表){
204201
方法体
205202
206203
```
207204

208-
**注意:**方法声明中定义的形参只能在该方法里使用,而接口、类声明中定义的类型形参则可以在整个接口、类中使用。
205+
**注意:** 方法声明中定义的形参只能在该方法里使用,而接口、类声明中定义的类型形参则可以在整个接口、类中使用。
209206

210207
```java
211208
class Demo{
@@ -226,7 +223,7 @@ public class GenericsDemo26{
226223

227224
当调用`fun()`方法时,根据传入的实际对象,编译器就会判断出类型形参T所代表的实际类型。
228225

229-
##### 3.泛型构造器
226+
#### 3.泛型构造器
230227

231228
正如泛型方法允许在方法签名中声明类型形参一样,Java也允许在构造器签名中声明类型形参,这样就产生了所谓的泛型构造器。
232229
和使用普通泛型方法一样没区别,一种是显式指定泛型参数,另一种是隐式推断,如果是显式指定则以显式指定的类型参数为准,如果传入的参数的类型和指定的类型实参不符,将会编译报错。
@@ -293,7 +290,7 @@ c.add(new Object());
293290

294291
简单来讲,使用通配符的目的是来限制泛型的类型参数的类型,使其满足某种条件,固定为某些类。
295292

296-
主要分为两类即:上限通配符和下限通配符
293+
主要分为两类即:**上限通配符****下限通配符**
297294

298295
##### 1.上限通配符
299296

0 commit comments

Comments
 (0)