|
1 | 1 | # Java开发规范 |
2 | 2 |
|
3 | | -> > > > > > |
4 | | -> > > > > > |
| 3 | + |
5 | 4 | > > > > > > > > |
6 | 5 | > > > > > > > > |
7 | | -> > > > > > > > > > ```java |
8 | | -> > > > > > > > > > > Less coding, More thinking!!! |
9 | | -> > > > > > > > > > ``` |
10 | | -> |
11 | | -> |
12 | | -> |
13 | | -> ## |
| 6 | +> > > > > > > > |
| 7 | +> > > > > |
| 8 | +> > > > > |
| 9 | +> > > > |
| 10 | +> > > > > > > > |
14 | 11 |
|
15 | 12 |
|
| 13 | +>>> Less coding, More thinking!!! |
16 | 14 |
|
17 | 15 | ## 基本类型 |
18 | 16 |
|
| 17 | +**1、[<font face='黑体' color='yellow'>推荐</font>]在代码中使用魔鬼数字(没有具体含义的数字、字符串)会使代码变得难以理解,应该将数字或字符串定义成有名称有含义的常量。** |
| 18 | + |
| 19 | +- 说明 魔鬼数字不仅不好理解,而且代码中出现多处相同的数字,修改起来也很不方便。 |
| 20 | +- 将数字定义为常量的最终目的是为了使代码更容易理解,所以并不是只要将数字定义为常量就不是魔鬼数字了。如果常量的名称没有意义,无法帮助理解代码,同样是一种魔鬼数字。 |
| 21 | +- 在个别情况下,将数字定义为常量反而会导致代码更难以理解,此时就不应该强求将数字定义为常量。 |
| 22 | + |
19 | 23 |
|
20 | 24 |
|
21 | 25 | ## 函数 |
|
36 | 40 |
|
37 | 41 | ## Java I/O |
38 | 42 |
|
39 | | -**1、[<font face='黑体' color='red'>强制</font>] 使用jdk1.7提供的try-with-resource处理机制来关闭IO流。** |
40 | | -
|
41 | | -> > - 说明 |
42 | | -
|
43 | | -
|
44 | | -
|
45 | | -
|
| 43 | +**1、[<font face='黑体' color='red'>强制</font>] 当使用外部资源(网络I/O、数据库连接、文件流等),请使用jdk1.7提供的try-with-resource处理机制来自动关闭资源,外部对象的句柄必须实现了AutoCloseable接口。** |
| 44 | + |
| 45 | +> > - 说明 传统关闭资源方式 |
| 46 | +> > |
| 47 | +> > ```java |
| 48 | +> > InputStream inputStream = null; |
| 49 | +> > try { |
| 50 | +> > inputStream = new FileInputStream(new File("test")); |
| 51 | +> > // 处理InputStream流 |
| 52 | +> > } catch (IOException e) { |
| 53 | +> > e.printStackTrace(); |
| 54 | +> > } finally { |
| 55 | +> > if (null != inputStream) { |
| 56 | +> > try { |
| 57 | +> > inputStream.close(); |
| 58 | +> > } catch(IOException e) { |
| 59 | +> > e.printStackTrace(); |
| 60 | +> > } |
| 61 | +> > } |
| 62 | +> > } |
| 63 | +> > ``` |
| 64 | +> > |
| 65 | +> > 这种关闭资源方式存在三种问题: |
| 66 | +> > |
| 67 | +> > - 如果不显示关闭外部资源,则有可能导致外部资源泄露。 |
| 68 | +> > - 显示关闭外部资源过程繁琐,需要写大量模板代码 |
| 69 | +> > - 不符合面向对象编程思想,当外部资源使用完毕后,应该由外部资源句柄自动关闭连接,这样更加符合面向对象编程理念。 |
| 70 | +
|
| 71 | +- 使用try-with-resource自动关闭资源 |
| 72 | +
|
| 73 | + ```java |
| 74 | + try (InputStream inputStream = new FileInputStream(new File("test")); |
| 75 | + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"))) { |
| 76 | + // 处理输入流 |
| 77 | + } catch (IOException e) { |
| 78 | + e.printStackTrace(); |
| 79 | + } |
| 80 | + ``` |
| 81 | +
|
| 82 | +- 异常抑制:这是try-with-resource涉及到的另一个知识点,当对外部资源进行处理时(读或写),遭遇到了异常,且在随后的关闭资源时,又遭遇到了异常,那么catch代码块捕捉到的将是在对外部资源进行处理时遭遇到的异常。而关闭资源时的异常将会被抑制,但是不丢弃,通过调用异常类的getSuppressed()方法提取出被抑制的异常。 |
46 | 83 |
|
47 | 84 |
|
48 | 85 |
|
|
0 commit comments