|
2 | 2 | 《《《 [上一节](../Preface.md)
|
3 | 3 |
|
4 | 4 |
|
5 |
| -## 第一章\(简介\) |
6 |
| - |
7 |
| -* 在Java的最新版本中泛型和集合与许多其他新功能一起工作良好,包括装箱和拆箱,循环的一种新形式,以及接受可变数量参数的函数。 |
8 |
| - 我们从一个例子开始说明了所有这些。 我们将会看到,将它们相结合是协同的:整体更大比其部分的总和。 |
9 |
| - |
10 |
| -* 以此作为我们的座右铭,让我们做一些简单的总和:把三个数字一个列表并将它们加在一起。 下面是如何在Java中使用泛型: |
| 5 | +## 第一章(简介) |
| 6 | + |
| 7 | +- `Java`最新版本中现在对泛型和集合与许多其他新功能有良好的支持,包括装箱和拆箱,新的循环形式,以及接受可变数量参数的函数。我们从一个例子开始说明了 |
| 8 | +所有这些。 我们将会看到,将它们相结合是协同的:整数求和。 |
| 9 | + |
| 10 | +- 以此作为我们的座右铭,让我们做一些简单求和:把三个数字一个列表并将它们加在一起。 下面是如何在Java中使用泛型: |
11 | 11 |
|
12 | 12 | ```java
|
13 | 13 | List<Integer> ints = Arrays.asList(1,2,3);
|
14 | 14 | int s = 0;
|
15 | 15 | for (int n : ints) { s += n; }
|
16 | 16 | assert s == 6;
|
17 | 17 | ```
|
18 |
| - |
19 |
| -* 你不需要太多的解释就可以读这个代码,但是让我们来看看关键特征。接口列表和类数组是集合框架的一部分(都可以在java.util包中找到)。 |
20 |
| - 类型`List`现在是通用的;你写`List<E>`以指示具有类型E的元素的列表。这里我们写`List<Integer>`指出列表的元素属于`Integer`类, |
21 |
| - 即包装类对应于基本类型int。拳击和拆箱操作,用于转换从原始类型到包装类,自动插入。静态的方法`asList`可以使用任意数量的参数, |
22 |
| - 将它们放入一个数组中,然后返回一个由数组支持的新列表。新的循环形式,`foreach`,被用来绑定一个变量依次到列表的每个元素, |
23 |
| - 循环体将这些添加到总和中。该断言语句(在`Java1.4`中引入)用于检查总和是否正确;当启用断言时,如果条件不计算,则会引发错误真的。 |
24 |
| - |
25 |
| -* 下面是在泛型之前Java中相同的代码: |
| 18 | + |
| 19 | +- 不需要太多的解释你就可以读这个代码,但是让我们来看看关键特征。接口列表和类数组是集合框架的一部分(都可以在`java.util`包中找到)。 类型`List`现 |
| 20 | +在是通用的;你写`List<E>`以指示具有类型`E`的元素的列表。这里我们写`List<Integer>`指出列表的元素属于`Integer`类, 即包装类对应于基本类型`int`。 |
| 21 | +装箱和拆箱操作,用于转换从原始类型到包装类,自动插入。静态的方法`asList`可以使用任意数量的参数,将它们放入一个数组中,然后返回一个由数组支持的新列 |
| 22 | +表。新的循环形式,`foreach`,被用来绑定一个变量依次到列表的每个元素,循环体将这些添加到总和中。该断言语句(在`Java1.4`中引入)用于检查总和是否正确 |
| 23 | +当启用断言时,如果条件不计算,则会引发错误真的。 |
| 24 | + |
| 25 | +- 下面是在泛型之前`Java`中相同作用的代码: |
26 | 26 |
|
27 | 27 | ```java
|
28 | 28 | List ints = Arrays.asList( new Integer[] {
|
|
35 | 35 | }
|
36 | 36 | assert s == 6;
|
37 | 37 | ```
|
38 |
| - |
39 |
| -* 阅读这段代码并不是那么容易。 没有泛型,就没有办法指出类型声明你打算在列表中存储什么样的元素,所以而不是写`List<Integer>`,你写`List`。 |
40 |
| - 现在是编码器而不是编译器谁负责记住列表元素的类型,所以你必须写下从列表中提取元素时将其转换为(整数)。 没有拳击和拆箱, |
41 |
| - 你必须显式地分配属于包装类`Integer`的每个对象并使用`intValue`方法提取相应的基元`int`。 没有功能接受可变数量的参数, |
42 |
| - 您必须显式地分配一个数组传递给`asList`方法。 没有新的循环形式,你必须显式声明一个迭代器,并通过列表推进。 |
43 |
| - |
44 |
| -* 顺便说一句,下面是如何在泛型之前用Java中的数组做同样的事情: |
| 38 | + |
| 39 | +- 阅读这段代码并不是那么容易。 没有泛型,就没有办法指出类型声明你打算在列表中存储什么样的元素,所以而不是写`List<Integer>`,你写`List`。 现在是 |
| 40 | +编辑器而不是编译器谁负责记住列表元素的类型,所以你必须写下从列表中提取元素时将其转换为(整数)。 没有装箱和拆箱,你必须显式地分配属于包装类`Integer` |
| 41 | +的每个对象并使用`intValue`方法提取相应的基元`int`。 没有功能接受可变数量的参数, 您必须显式地分配一个数组传递给`asList`方法。 没有新的循环形式, |
| 42 | +你必须显式声明一个迭代器,并通过列表推进。 |
| 43 | + |
| 44 | +- 顺便说一句,下面是如何在泛型之前用`Java`中的数组做同样的事情: |
45 | 45 |
|
46 | 46 | ```java
|
47 | 47 | int[] ints = new int[] { 1,2,3 };
|
48 | 48 | int s = 0;
|
49 | 49 | for (int i = 0; i < ints.length; i++) { s += ints[i]; }
|
50 | 50 | assert s == 6;
|
51 | 51 | ```
|
52 |
| - |
53 |
| -* 这比使用泛型和集合的相应代码略长,可以说是不太可读,而且肯定不够灵活。 集合让你轻松增大或缩小集合的大小, |
54 |
| - 或在切换到不同的表示形式时适当的,如链表或散列表或有序树。 `java`的泛型,装箱和拆箱,`foreach`循环和`Java`中的可变参数标志着第一次 |
55 |
| - 使用集合与使用数组一样简单,甚至可能更简单。 |
56 |
| - |
57 |
| -* 现在我们来看一下这些功能的更多细节。 |
58 |
| - |
| 52 | + |
| 53 | +- 这比使用泛型和集合的相应代码略长,可以说是不太可读,而且肯定不够灵活。 集合让你轻松增大或缩小集合的大小,或在切换到适当的不同的表示形式时,如链表 |
| 54 | +或散列表或有序树。 `java`的泛型,装箱和拆箱,`foreach`循环和`Java`中的可变参数标志着第一次使用集合与使用数组一样简单,甚至可能更简单。 |
| 55 | + |
| 56 | +- 现在我们来看一下这些功能的更多细节。 |
59 | 57 |
|
60 | 58 | 《《《 [下一节](01_Generics.md) <br/>
|
61 | 59 | 《《《 [返回首页](../README.md)
|
|
0 commit comments