4545
46465 . 接口隔离原则——ISP
4747
48- > 把接口分成满足依赖关系的最小接口,实现类中不能有不需要的方法。
48+ > 把接口分成满足依赖关系的最小接口,实现类中不能有不需要的方法。简单来说就是大接口拆开变成小接口
4949
50506 . 迪米特原则——LOD
5151
@@ -59,24 +59,24 @@ tags:
5959
6060常见的有 抽象工厂模式、工厂方法模式、建造者模式、单例模式。
6161
62- ![ ] ( https ://cdn.jsdelivr.net/gh/DogerRain/image@main/img-20210401 /401339-20170928225241215-295252070.png)
62+ ![ ] ( http ://rainyudianxx.baimuxym.cn/HelloCoder/blog /401339-20170928225241215-295252070.png)
6363
6464
6565
6666### 2、8种基本数据类型
6767
6868> String不是基本类型。
6969
70- 双等号(==),比较的是他们的值。基本数据类型没有equals方法。
70+ 双等号(==),比较的是他们的值。** 基本数据类型没有equals方法。**
7171
72- ![ ] ( https ://images-1253198264.cos.ap-guangzhou.myqcloud.com /clipboard-1601965896460.png)
72+ ![ ] ( http ://rainyudianxx.baimuxym.cn/HelloCoder/blog /clipboard-1601965896460.png)
7373
7474拆箱和装箱:
7575
7676``` java
7777// 自动装箱
7878Integer total = 99 ;
79- // 自定拆箱
79+ // 自动拆箱
8080int totalprim = total;
8181```
8282
@@ -117,12 +117,16 @@ Integer的默认值是null;int的默认值是0。
117117
118118### 3、访问修饰符
119119
120- ![ ] ( https://images-1253198264.cos.ap-guangzhou.myqcloud.com/7010483_1495588925759_ACED241801E307EE7A39612F85A94EBF.png )
120+ | 访问修饰符 | 当前类 | 同一个包 | 不同包的子类 | 不同包的非子类 | 通俗理解 |
121+ | :--------------- | :----- | :------- | :----------- | :------------- | :-------------------------------- |
122+ | ` public ` | ✔️ | ✔️ | ✔️ | ✔️ | ** 完全开放** - 对所有类可见 |
123+ | ` protected ` | ✔️ | ✔️ | ✔️ | ❌ | ** 家族共享** - 对子类和同包类开放 |
124+ | ` default ` (不写) | ✔️ | ✔️ | ❌ | ❌ | ** 内部资料** - 仅同包内可见 |
125+ | ` private ` | ✔️ | ❌ | ❌ | ❌ | ** 个人隐私** - 仅本类内可见 |
126+
127+
128+
121129
122- public:所有地方的类都可以访问。
123- private:只能在当前类中进行访问。
124- protected:可以在当前类、当前包、子类中进行访问
125- 不写默认为default:可以在当前类,当前包中进行访问。
126130
127131
128132
@@ -159,6 +163,7 @@ protected:可以在当前类、当前包、子类中进行访问
159163方法的重载和重写都是实现多态的方式,区别在于:
160164
161165重载实现的是编译时的多态性。
166+
162167重写实现的是运行时的多态性。
163168
164169- 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;** 重载对返回类型没有特殊的要求,但不能根据返回类型进行区分。**
@@ -237,7 +242,7 @@ public interface People {
237242| 实例化 | 不是具体类,不能实例化 | 不是类,不能实例化 |
238243| 方法体 | 抽象方法访问类型** 不能是private ** ,不能是 static 、final 修饰(需要实现的~ ),而且默认是 abstract 修饰 | 接口中方法默认是`public abstract `(只能是这两个关键字,或其中一个或都省略)。因为要被继承,所以是public 的。 |
239244
240- > 接口可以看作一个更特殊的抽象类,修饰符和限制都更多了,但是自从1.8 中及以后,接口的** 普通方法** 要比抽象类要灵活了,跟普通类一样使用;而抽象类不能使用 static 其他基本无异
245+ > 接口可以看作一个更特殊的抽象类,修饰符和限制都更多了,但是自从1.8 中及以后,接口的** 普通方法** 要比抽象类要灵活了,跟普通类一样使用;抽象类除了不能使用 static ,其他基本无异
241246
242247
243248
@@ -251,7 +256,9 @@ public interface People {
251256
252257### 8 、switch 中能否使用string做参数?
253258
254- 在JDK 1.7 之前,switch 只能支持byte ,short ,char ,int 或者其对应的包装类以及Enum 类型. 从JDK 1.7 之后switch 开始支持String 类型. 但到目前为止,switch 都不支持long 类型。
259+ 在JDK 1.7 之前,switch 只能支持byte ,short ,char ,int 或者其对应的包装类以及Enum 类型。
260+
261+ 从JDK 1.7 之后switch 开始支持String 类型、枚举类型,但到目前为止,switch 都不支持long 类型。
255262
256263** 还有break 的坑:**
257264
@@ -282,10 +289,8 @@ public class SwitchCaseTest {
282289### 9 、String 、StringBuffer 、StringBuilder 区别
283290
284291- 可变性
285- 简单的来说:String 类中使用 final 关键字字符数组保存字符串, `private final char value[]` ,所以 String
286- 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder
287- 中也是使用字符数组保存字符串`char [] value` 但是没有用 final 关键字修饰,所以这两种对象都是可变的。
288-
292+ 简单的来说:String 类中使用 final 关键字字符数组保存字符串, `private final char value[]` ,所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串`char [] value` 但是没有用 final 关键字修饰,所以这两种对象都是可变的。
293+
289294- 安全性
290295
291296 String 是一个字符串常量,final 修饰,当创建之后即不能更改,不可被继承,线程安全
@@ -315,6 +320,17 @@ public class SwitchCaseTest {
315320
316321
317322
323+ | 特性 | String | StringBuffer | StringBuilder |
324+ | : ---------- - | : -------------------- - | : ------------------------ - | : ---------------------- - |
325+ | ** 可变性** | ❌ 不可变 | ✅ 可变 | ✅ 可变 |
326+ | ** 线程安全** | ✅ 线程安全 | ✅ 线程安全(synchronized ) | ❌ 非线程安全 |
327+ | ** 性能** | 最低(频繁创建新对象) | 中等(有同步开销) | ** 最高** (无同步开销) |
328+ | ** 使用场景** | 字符串常量、不需要修改 | 多线程环境下的字符串操作 | 单线程环境下的字符串操作 |
329+
330+
331+
332+
333+
318334留个题目:
319335
320336```Java
@@ -344,6 +360,18 @@ Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。
344360
345361
346362
363+ 或者你可以这样理解:
364+
365+ > 简单来说:离目标小数近的整数;中间的(即 .5)往右靠
366+
367+ ```shell
368+ 往右 ——————————>
369+
370+ -11.7 -- -11.5 —— -11 —— 0 —— 11.5 —— 12
371+ ```
372+
373+
374+
347375### 11、String s = "xyz"和String s = new String ("xyz ");区别
348376
349377`String s = new String (" hello" );`** 可能创建两个对象也可能创建一个对象** 。如果常量池中有`hello`字符串常量的话,则仅仅在堆中创建一个对象。如果常量池中没有`hello`对象,则堆上和常量池都需要创建。
@@ -381,7 +409,7 @@ System. out. println(str==str2); //false
381409
382410### 12 、 异常
383411
384- ! [](https : // cdn.jsdelivr.net/gh/DogerRain/image@main/Home /image-20210115172917862.png)
412+ ! [](http : // rainyudianxx.baimuxym.cn/HelloCoder/blog /image-20210115172917862.png)
385413
386414Throwable 分为Exception (异常) 和 Error (错误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。
387415
@@ -419,7 +447,7 @@ Java 的所有异常可以分为受检异常(checked exception)和非受检
419447
420448### 13 、Throw 和 throws 的区别:
421449
422- ** 位置不同:**
450+ ** 位置不同:**
423451
4244521. throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的是异常对象。
425453
@@ -433,6 +461,13 @@ Java 的所有异常可以分为受检异常(checked exception)和非受检
433461
434462
435463
464+ ```java
465+ public static void main(String [] args) throws Exception ,InterruptedException {}
466+
467+
468+ throw new ZkSerializerException (e);
469+ ```
470+
436471
437472
438473### 14 、java中4 种类型的流
@@ -453,13 +488,15 @@ Java 的所有异常可以分为受检异常(checked exception)和非受检
453488
454489
455490
456- 字节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。
491+ 字节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。
492+
493+ - 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
494+
495+ - 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
457496
458- · 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
459497
460- · 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
461498
462- ** 结论:只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。**
499+ ** 结论:只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。** 但是字节流可以处理字符流,反之不能。
463500
464501
465502
0 commit comments