Skip to content

Commit 5a566d5

Browse files
committed
modify methods-common-all-objects.md
1 parent 3141736 commit 5a566d5

File tree

18 files changed

+3360
-45
lines changed

18 files changed

+3360
-45
lines changed

docs/blog/posts/code-complete.md

+6
Original file line numberDiff line numberDiff line change
@@ -320,3 +320,9 @@ Demeter法则(Law of Demeter,**LoD**),又称为最少知识原则(Prin
320320
太长未读(too long, didn't read的缩写),多用于在社交媒体等上对某条消息或某篇文章进行评论。
321321

322322
(对某篇文章或某个讨论议题的)短小总结,扼要概述。
323+
324+
325+
326+
## EOL
327+
328+
**产品寿命结束(End-of-life,EOL)**是一个用于提供给用户产品的术语,表示该产品的生命周期结束,即表示产品/软件**不再维护**或随时可能终止服务

docs/blog/posts/java-concurrent.md

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ description: 关于Java并发编程的一些知识总结与整理
99
categories:
1010
- 学习笔记
1111
- 并发
12-
- Java
1312
---
1413

1514
关于Java并发编程的一些知识总结与整理。 <!-- more -->

docs/blog/posts/3.Methods-Common-to-All-Objects.md renamed to docs/blog/posts/methods-common-to-all-objects.md

+55-22
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
---
2-
title: effectivejava
2+
title: Methods Common to All Objects
33
draft: false
44
authors: [huyi]
55
date: 2024-09-25
6-
slug: effectivejava
6+
slug: effectivejava-chapter3
77
description: Effective-Java阅读笔记
88
以下所言,或来自读书笔记,或来自书籍的勾画,或只是回忆...作为参考。
99
categories:
1010
- 技术书籍
11-
- 笔记
12-
- Java
11+
- 学习笔记
12+
1313
---
1414

15-
阅读effective-java总结的一些笔记,先把书读厚,再把书读薄! <!-- more -->
15+
effective-java阅读笔记,第三章——对象的通用方法 <!-- more -->
1616

1717
# Chapter 3. Methods Common to All Objects
1818

@@ -107,29 +107,62 @@ categories:
107107
hash值的生成还要考虑以下几点:
108108

109109
1. **不要试图从散列码计算中排除重要字段**,以提高性能;这**会导致不好的hash分布,影响散列表的性能**
110-
111110
2. 若一个类是**不可变**的,并且**散列码的计算成本很高**,可以考虑在对象中**缓存散列码**
112111

113-
```java
114-
private int hashCode; // Automatically initialized to 0
115-
@Override
116-
public int hashCode() {
117-
int result = hashCode;
118-
//no cache
119-
if (result == 0) {
120-
result = Short.hashCode(areaCode);
121-
result = 31 * result + Short.hashCode(prefix);
122-
result = 31 * result + Short.hashCode(lineNum);
123-
hashCode = result; // set cache
124-
}
125-
126-
return result;
127-
}
128-
```
112+
```java
113+
private int hashCode; // Automatically initialized to 0
114+
@Override
115+
public int hashCode() {
116+
int result = hashCode;
117+
//no cache
118+
if (result == 0) {
119+
result = Short.hashCode(areaCode);
120+
result = 31 * result + Short.hashCode(prefix);
121+
result = 31 * result + Short.hashCode(lineNum);
122+
hashCode = result; // set cache
123+
}
124+
125+
return result;
126+
}
127+
```
129128

130129
3. **不要为hashCode返回的值提供详细的规范,这样客户端就不能理所应当的依赖它,这也为你以后可能的更改留有余地。**Java库中很多类,e.g. String和Integer,都将hashCode返回的确切值指定为实例值,这不是一个好主意,它阻碍了未来版本中提高散列算法的能力
131130

132131

133132

133+
## Item12. 始终覆盖toString方法
134+
135+
> 本条目讨论覆盖toString方法的好处是什么,为什么一定要覆盖
136+
137+
toString的通用约定:返回的字符串应该符合**"简洁但信息丰富,易于阅读"**
138+
139+
覆盖toString方法的好处及一些覆盖的建议:
140+
141+
- **更易于使用**(被打印时更好的展示),使用该类的系统也**更易于调试**(日志错误消息中更好的展示)
142+
- toString返回的信息中应该**包含最适合该类的表示形式**,e.g. Phone类应该返回"xxxx-xxxx-xxxx"这种格式的内容,若类的对象很大且包含不利于展示的内容,toString应该返回一个**摘要信息**
143+
- 决定**是否对toString返回的内容指定<font color="red">格式</font>**
144+
- 优点:作为类的**标准的、明确的**表示,**可以作为输入或输出**,还可以提供一个匹配的静态工厂(valueOf)或构造器,来达到对象及其字符串标识之间来回的切换,e.g. java中BigInteger和大多数包装类就是这样实现的。
145+
- 缺点:一旦指定则必须**终生使用**它,若你的类被广泛使用,则后续修改toString的格式将会破坏引用该类的代码和数据。若不选择格式,增加了在后续版本中添加信息或改进格式的灵活性
146+
- 指定/不指定格式,你都**应该为toString提供详细的文档注释**
147+
- **提供对toString返回值中包含的信息的程序性访问(即getter方法)**,否则引用者不得不通过解析toString来获取他们的值,这种方式会让系统脆弱
148+
- **在任何抽象类中编写toString方法**,并让子类共享公共的字符串表示形式
149+
150+
151+
152+
## Item13. 明智的覆盖clone
153+
154+
若想调用Object.clone()方法来实现克隆,则类必须实现Cloneable接口,否则将抛出CloneNotSupportedException异常。
155+
156+
如果不是通过Object.clone()方法实现克隆的,则不需要实现Cloneable接口。如下:
134157

158+
```java
159+
class Base {
160+
@Override
161+
protected Object clone() throw CloneNotSupportedException {
162+
//这种情况下会抛出CloneNotSupportedException,因为调用的是Object.clone()方法
163+
//return super.clone();
164+
return new Base(); //这种方式可不实现Cloneable接口
165+
}
166+
}
167+
```
135168

site/blog/2024/08/10/code-complete/index.html

+25
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,8 @@
812812

813813

814814

815+
816+
815817

816818

817819

@@ -930,6 +932,29 @@
930932

931933

932934

935+
<li class="md-nav__item">
936+
<a href="../../../../category/%E6%8A%80%E6%9C%AF%E4%B9%A6%E7%B1%8D/" class="md-nav__link">
937+
938+
939+
<span class="md-ellipsis">
940+
技术书籍
941+
</span>
942+
943+
944+
</a>
945+
</li>
946+
947+
948+
949+
950+
951+
952+
953+
954+
955+
956+
957+
933958
<li class="md-nav__item">
934959
<a href="../../../../category/%E6%A6%82%E5%BF%B5%E4%B8%8E%E6%9C%AF%E8%AF%AD%E8%A7%A3%E9%87%8A/" class="md-nav__link">
935960

site/blog/2024/09/12/juc/index.html

+27
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
<link rel="prev" href="../../../08/10/code-complete/">
1919

2020

21+
<link rel="next" href="../../25/effectivejava/">
22+
2123

2224
<link rel="alternate" type="application/rss+xml" title="RSS feed" href="../../../../../feed_rss_created.xml">
2325
<link rel="alternate" type="application/rss+xml" title="RSS feed of updated content" href="../../../../../feed_rss_updated.xml">
@@ -812,6 +814,8 @@
812814

813815

814816

817+
818+
815819

816820

817821

@@ -930,6 +934,29 @@
930934

931935

932936

937+
<li class="md-nav__item">
938+
<a href="../../../../category/%E6%8A%80%E6%9C%AF%E4%B9%A6%E7%B1%8D/" class="md-nav__link">
939+
940+
941+
<span class="md-ellipsis">
942+
技术书籍
943+
</span>
944+
945+
946+
</a>
947+
</li>
948+
949+
950+
951+
952+
953+
954+
955+
956+
957+
958+
959+
933960
<li class="md-nav__item">
934961
<a href="../../../../category/%E6%A6%82%E5%BF%B5%E4%B8%8E%E6%9C%AF%E8%AF%AD%E8%A7%A3%E9%87%8A/" class="md-nav__link">
935962

0 commit comments

Comments
 (0)