---
sidebar: heading
title: Javaåºç¡å¸¸è§é¢è¯é¢æ»ç»
category: Java
tag:
- Javaåºç¡
head:
- - meta
- name: keywords
content: JVM,JDK,JRE,é¢å对象,Java åºæ¬æ°æ®ç±»å,è£
ç®±åæç®±,Javaæ°ç»,å¼ä¼ éåå¼ç¨ä¼ é,String,æ·±æ·è´,finalå
³é®å,忥å弿¥,Java8æ°ç¹æ§,åºåååååºåå,åå°,æ³å
- - meta
- name: description
content: é«è´¨éçJavaåºç¡å¸¸è§ç¥è¯ç¹åé¢è¯é¢æ»ç»ï¼è®©å¤©ä¸æ²¡æé¾èçå
«è¡æï¼
---
::: tip è¿æ¯ä¸åæè®¸å¯¹ä½ æå¸®å©çä¿¡æ¯
- **é¢è¯æå**ï¼è¿æ¯ä¸ä»½å¤§å½¬ç²¾å¿æ´çç[**大åé¢è¯æå**](https://topjavaer.cn/zsxq/mianshishouce.html)ææ°çï¼ç®åå·²ç»æ´æ°è¿ä»£äº**19**ä¸ªçæ¬ï¼è´¨éå¾é«ï¼ä¸ä¸ºé¢è¯æé ï¼
- **ç¥è¯æç**ï¼**ä¸å±é¢è¯æå/ä¸å¯¹ä¸äº¤æµ/ç®åä¿®æ¹/è¶
æ£çå¦ä¹ æ°å´/å¦ä¹ 路线è§å**ï¼æ¬¢è¿å å
¥[大彬çç¥è¯æç](https://topjavaer.cn/zsxq/introduce.html)ï¼ç¹å»é¾æ¥æ¥çæçç详ç»ä»ç»ï¼
:::
## Javaçç¹ç¹
**Javaæ¯ä¸é¨é¢å对象çç¼ç¨è¯è¨**ãé¢å对象åé¢åè¿ç¨çåºå«åèä¸ä¸ä¸ªé®é¢ã
**Javaå
·æå¹³å°ç¬ç«æ§åç§»æ¤æ§**ã
- Javaæä¸å¥å£å·ï¼`Write once, run anywhere`ï¼ä¸æ¬¡ç¼åãå°å¤è¿è¡ãè¿ä¹æ¯Javaçé
åæå¨ãèå®ç°è¿ç§ç¹æ§çæ£æ¯JavaèææºJVMãå·²ç¼è¯çJavaç¨åºå¯ä»¥å¨ä»»ä½å¸¦æJVMçå¹³å°ä¸è¿è¡ãä½ å¯ä»¥å¨windowså¹³å°ç¼å代ç ï¼ç¶åæ¿å°linuxä¸è¿è¡ãåªè¦ä½ å¨ç¼åå®ä»£ç åï¼å°ä»£ç ç¼è¯æ.classæä»¶ï¼åæclassæä»¶ææJavaå
ï¼è¿ä¸ªjarå
å°±å¯ä»¥å¨ä¸åçå¹³å°ä¸è¿è¡äºã
**Javaå
·æç¨³å¥æ§**ã
- Javaæ¯ä¸ä¸ªå¼ºç±»åè¯è¨ï¼å®å
许æ©å±ç¼è¯æ¶æ£æ¥æ½å¨ç±»åä¸å¹é
é®é¢çåè½ãJavaè¦æ±æ¾å¼çæ¹æ³å£°æï¼å®ä¸æ¯æC飿 ¼çéå¼å£°æãè¿äºä¸¥æ ¼çè¦æ±ä¿è¯ç¼è¯ç¨åºè½ææè°ç¨é误ï¼è¿å°±å¯¼è´æ´å¯é çç¨åºã
- å¼å¸¸å¤çæ¯Javaä¸ä½¿å¾ç¨åºæ´ç¨³å¥çå¦ä¸ä¸ªç¹å¾ãå¼å¸¸æ¯æç§ç±»ä¼¼äºé误çå¼å¸¸æ¡ä»¶åºç°çä¿¡å·ã使ç¨`try/catch/finally`è¯å¥ï¼ç¨åºåå¯ä»¥æ¾å°åºéçå¤ç代ç ï¼è¿å°±ç®åäºåºéå¤ç忢å¤çä»»å¡ã
## Javaæ¯å¦ä½å®ç°è·¨å¹³å°çï¼
Javaæ¯éè¿JVMï¼Javaèææºï¼å®ç°è·¨å¹³å°çã
JVMå¯ä»¥çè§£æä¸ä¸ªè½¯ä»¶ï¼ä¸åç平尿ä¸åççæ¬ãæä»¬ç¼åçJava代ç ï¼ç¼è¯åä¼çæ.class æä»¶ï¼åèç æä»¶ï¼ãJavaèææºå°±æ¯è´è´£å°åèç æä»¶ç¿»è¯æç¹å®å¹³å°ä¸çæºå¨ç ï¼éè¿JVMç¿»è¯ææºå¨ç ä¹åæè½è¿è¡ãä¸åå¹³å°ä¸ç¼è¯çæçåèç æ¯ä¸æ ·çï¼ä½æ¯ç±JVMç¿»è¯æçæºå¨ç å´ä¸ä¸æ ·ã
åªè¦å¨ä¸åå¹³å°ä¸å®è£
对åºçJVMï¼å°±å¯ä»¥è¿è¡åèç æä»¶ï¼è¿è¡æä»¬ç¼åçJavaç¨åºã
å æ¤ï¼è¿è¡Javaç¨åºå¿
é¡»æJVMçæ¯æï¼å 为ç¼è¯çç»æä¸æ¯æºå¨ç ï¼å¿
é¡»è¦ç»è¿JVMçç¿»è¯æè½æ§è¡ã
## Java ä¸ C++ çåºå«
- Java æ¯çº¯ç²¹çé¢å对象è¯è¨ï¼ææç对象é½ç»§æ¿èª java.lang.Objectï¼C++ å
¼å®¹ C ï¼ä¸ä½æ¯æé¢åå¯¹è±¡ä¹æ¯æé¢åè¿ç¨ã
- Java éè¿èææºä»èå®ç°è·¨å¹³å°ç¹æ§ï¼ C++ ä¾èµäºç¹å®çå¹³å°ã
- Java 没ææéï¼å®çå¼ç¨å¯ä»¥ç解为å®å
¨æéï¼è C++ å
·æå C 䏿 ·çæéã
- Java æ¯æèªå¨åå¾åæ¶ï¼è C++ éè¦æå¨åæ¶ã
- Java 䏿¯æå¤éç»§æ¿ï¼åªè½éè¿å®ç°å¤ä¸ªæ¥å£æ¥è¾¾å°ç¸åç®çï¼è C++ æ¯æå¤éç»§æ¿ã
## JDK/JRE/JVMä¸è
çå
³ç³»
**JVM**
è±æåç§°ï¼Java Virtual Machineï¼ï¼å°±æ¯æä»¬è³çè½è¯¦ç Java èææºãJava è½å¤è·¨å¹³å°è¿è¡çæ ¸å¿å¨äº JVM ã

ææçjavaç¨åºä¼é¦å
被ç¼è¯ä¸º.classçç±»æä»¶ï¼è¿ç§ç±»æä»¶å¯ä»¥å¨èææºä¸æ§è¡ãä¹å°±æ¯è¯´classæä»¶å¹¶ä¸ç´æ¥ä¸æºå¨çæä½ç³»ç»äº¤äºï¼èæ¯ç»è¿èææºé´æ¥ä¸æä½ç³»ç»äº¤äºï¼ç±èææºå°ç¨åºè§£éç»æ¬å°ç³»ç»æ§è¡ã
é对ä¸åçç³»ç»æä¸åç jvm å®ç°ï¼æ Linux çæ¬ç jvm å®ç°ï¼ä¹æWindows çæ¬ç jvm å®ç°ï¼ä½æ¯å䏿®µä»£ç å¨ç¼è¯åçåèç æ¯ä¸æ ·çãè¿å°±æ¯Javaè½å¤è·¨å¹³å°ï¼å®ç°ä¸æ¬¡ç¼åï¼å¤å¤è¿è¡çåå æå¨ã
**JRE**
è±æåç§°ï¼Java Runtime Environmentï¼ï¼å°±æ¯Java è¿è¡æ¶ç¯å¢ãæä»¬ç¼åçJavaç¨åºå¿
é¡»è¦å¨JREæè½è¿è¡ãå®ä¸»è¦å
å«ä¸¤ä¸ªé¨åï¼JVM å Java æ ¸å¿ç±»åºã

JREæ¯Javaçè¿è¡ç¯å¢ï¼å¹¶ä¸æ¯ä¸ä¸ªå¼åç¯å¢ï¼æä»¥æ²¡æå
å«ä»»ä½å¼åå·¥å
·ï¼å¦ç¼è¯å¨åè°è¯å¨çã
å¦æä½ åªæ¯æ³è¿è¡Javaç¨åºï¼è䏿¯å¼åJavaç¨åºçè¯ï¼é£ä¹ä½ åªéè¦å®è£
JREå³å¯ã
**JDK**
è±æåç§°ï¼Java Development Kitï¼ï¼å°±æ¯ Java å¼åå·¥å
·å
å¦è¿Javaçåå¦ï¼é½åºè¯¥å®è£
è¿JDKã彿们å®è£
å®JDKä¹åï¼ç®å½ç»ææ¯è¿æ ·ç

å¯ä»¥çå°ï¼JDKç®å½ä¸æä¸ªJREï¼ä¹å°±æ¯JDKä¸å·²ç»éæäº JREï¼ä¸ç¨åç¬å®è£
JREã
å¦å¤ï¼JDKä¸è¿æä¸äºå¥½ç¨çå·¥å
·ï¼å¦jinfoï¼jpsï¼jstackçã

æåï¼æ»ç»ä¸ä¸JDK/JRE/JVMï¼ä»ä»¬ä¸è
çå
³ç³»
**JRE = JVM + Java æ ¸å¿ç±»åº**
**JDK = JRE + Javaå·¥å
· + ç¼è¯å¨ + è°è¯å¨**

> å享ä¸ä»½å¤§å½¬ç²¾å¿æ´çç大åé¢è¯æåï¼å
å«è®¡**ç®æºåºç¡ãJavaåºç¡ãå¤çº¿ç¨ãJVMãæ°æ®åºãRedisãSpringãMybatisãSpringMVCãSpringBootãåå¸å¼ãå¾®æå¡ã设计模å¼ãæ¶æãæ ¡æç¤¾æå享**çé«é¢é¢è¯é¢ï¼é常å®ç¨ï¼æå°ä¼ä¼´é çè¿ä»½æåæ¿è¿åèoffer~
>
> 
>
> 
>
> éè¦çå°ä¼ä¼´å¯ä»¥èªè¡**ä¸è½½**ï¼
>
> 龿¥ï¼https://pan.xunlei.com/s/VNgU60NQQNSDaEy9z955oufbA1?pwd=y9fy#
>
> å¤ç¨é¾æ¥ï¼https://pan.quark.cn/s/cbbb681e7c19
## Javaç¨åºæ¯ç¼è¯æ§è¡è¿æ¯è§£éæ§è¡ï¼
å
ççä»ä¹æ¯ç¼è¯åè¯è¨åè§£éåè¯è¨ã
**ç¼è¯åè¯è¨**
å¨ç¨åºè¿è¡ä¹åï¼éè¿ç¼è¯å¨å°æºç¨åºç¼è¯ææºå¨ç å¯è¿è¡çäºè¿å¶ï¼ä»¥åæ§è¡è¿ä¸ªç¨åºæ¶ï¼å°±ä¸ç¨åè¿è¡ç¼è¯äºã
ä¼ç¹ï¼ç¼è¯å¨ä¸è¬ä¼æé¢ç¼è¯çè¿ç¨å¯¹ä»£ç è¿è¡ä¼åãå 为ç¼è¯åªå䏿¬¡ï¼è¿è¡æ¶ä¸éè¦ç¼è¯ï¼æä»¥ç¼è¯åè¯è¨çç¨åºæ§è¡æçé«ï¼å¯ä»¥è±ç¦»è¯è¨ç¯å¢ç¬ç«è¿è¡ã
缺ç¹ï¼ç¼è¯ä¹å妿éè¦ä¿®æ¹å°±éè¦æ´ä¸ªæ¨¡åéæ°ç¼è¯ãç¼è¯çæ¶åæ ¹æ®å¯¹åºçè¿è¡ç¯å¢çææºå¨ç ï¼ä¸åçæä½ç³»ç»ä¹é´ç§»æ¤å°±ä¼æé®é¢ï¼éè¦æ ¹æ®è¿è¡çæä½ç³»ç»ç¯å¢ç¼è¯ä¸åç坿§è¡æä»¶ã
**æ»ç»**ï¼æ§è¡é度快ãæçé«ï¼ä¾é ç¼è¯å¨ãè·¨å¹³å°æ§å·®äºã
**代表è¯è¨**ï¼CãC++ãPascalãObject-C以åSwiftã
**è§£éåè¯è¨**
å®ä¹ï¼è§£éåè¯è¨çæºä»£ç 䏿¯ç´æ¥ç¿»è¯ææºå¨ç ï¼èæ¯å
ç¿»è¯æä¸é´ä»£ç ï¼åç±è§£éå¨å¯¹ä¸é´ä»£ç è¿è¡è§£éè¿è¡ãå¨è¿è¡çæ¶åæå°æºç¨åºç¿»è¯ææºå¨ç ï¼ç¿»è¯ä¸å¥ï¼ç¶åæ§è¡ä¸å¥ï¼ç´è³ç»æã
ä¼ç¹ï¼
1. æè¯å¥½çå¹³å°å
¼å®¹æ§ï¼å¨ä»»ä½ç¯å¢ä¸é½å¯ä»¥è¿è¡ï¼åææ¯å®è£
äºè§£éå¨ï¼å¦èææºï¼ã
2. çµæ´»ï¼ä¿®æ¹ä»£ç çæ¶åç´æ¥ä¿®æ¹å°±å¯ä»¥ï¼å¯ä»¥å¿«éé¨ç½²ï¼ä¸ç¨åæºç»´æ¤ã
缺ç¹ï¼æ¯æ¬¡è¿è¡çæ¶åé½è¦è§£éä¸éï¼æ§è½ä¸ä¸å¦ç¼è¯åè¯è¨ã
æ»ç»ï¼è§£éåè¯è¨æ§è¡é度æ
¢ãæçä½ï¼ä¾é è§£éå¨ãè·¨å¹³å°æ§å¥½ã
代表è¯è¨ï¼JavaScriptãPythonãErlangãPHPãPerlãRubyã
对äºJavaè¿ç§è¯è¨ï¼å®ç**æºä»£ç **ä¼å
éè¿javacç¼è¯æ**åèç **ï¼åéè¿jvmå°åèç è½¬æ¢æ**æºå¨ç **æ§è¡ï¼å³è§£éè¿è¡ åç¼è¯è¿è¡é
å使ç¨ï¼æä»¥å¯ä»¥ç§°ä¸ºæ··ååæè
åç¼è¯åã
## é¢å对象åé¢åè¿ç¨çåºå«ï¼
é¢å对象åé¢åè¿ç¨æ¯ä¸ç§è½¯ä»¶å¼åææ³ã
- é¢åè¿ç¨å°±æ¯åæåºè§£å³é®é¢æéè¦çæ¥éª¤ï¼ç¶åç¨å½æ°æè¿äºæ¥éª¤å®ç°ï¼ä½¿ç¨çæ¶å便¬¡è°ç¨å°±å¯ä»¥äºã
- é¢åå¯¹è±¡æ¯æææé®é¢äºå¡åè§£æå个对象ï¼åå«è®¾è®¡è¿äºå¯¹è±¡ï¼ç¶åå°ä»ä»¬ç»è£
ææå®æ´åè½çç³»ç»ãé¢åè¿ç¨åªç¨å½æ°å®ç°ï¼é¢å对象æ¯ç¨ç±»å®ç°å个åè½æ¨¡åã
以äºåæ£ä¸ºä¾ï¼é¢åè¿ç¨ç设计æè·¯å°±æ¯é¦å
åæé®é¢çæ¥éª¤ï¼
1ãå¼å§æ¸¸æï¼2ãé»åå
èµ°ï¼3ãç»å¶ç»é¢ï¼4ã夿è¾èµ¢ï¼5ãè½®å°ç½åï¼6ãç»å¶ç»é¢ï¼7ã夿è¾èµ¢ï¼8ãè¿åæ¥éª¤2ï¼9ãè¾åºæåç»æã
æä¸é¢æ¯ä¸ªæ¥éª¤ç¨åå«ç彿°æ¥å®ç°ï¼é®é¢å°±è§£å³äºã
èé¢å对象çè®¾è®¡åæ¯ä»å¦å¤çæè·¯æ¥è§£å³é®é¢ãæ´ä¸ªäºåæ£å¯ä»¥å为ï¼
1. é»ç½åæ¹
2. æ£çç³»ç»ï¼è´è´£ç»å¶ç»é¢
3. è§åç³»ç»ï¼è´è´£å¤å®è¯¸å¦ç¯è§ãè¾èµ¢çã
é»ç½åæ¹è´è´£æ¥åç¨æ·çè¾å
¥ï¼å¹¶åç¥æ£çç³»ç»æ£åå¸å±åçååï¼æ£çç³»ç»æ¥æ¶å°äºæ£åçååçä¿¡æ¯å°±è´è´£å¨å±å¹ä¸é¢æ¾ç¤ºåºè¿ç§ååï¼åæ¶å©ç¨è§åç³»ç»æ¥å¯¹æ£å±è¿è¡å¤å®ã
## é¢å对象æåªäºç¹æ§ï¼
é¢å对象åå¤§ç¹æ§ï¼å°è£
ï¼ç»§æ¿ï¼å¤æï¼æ½è±¡
1ãå°è£
å°±æ¯å°ç±»çä¿¡æ¯éèå¨ç±»å
é¨ï¼ä¸å
许å¤é¨ç¨åºç´æ¥è®¿é®ï¼èæ¯éè¿è¯¥ç±»çæ¹æ³å®ç°å¯¹éèä¿¡æ¯çæä½å访é®ã è¯å¥½çå°è£
è½å¤åå°è¦åã
2ãç»§æ¿æ¯ä»å·²æçç±»ä¸æ´¾çåºæ°çç±»ï¼æ°ç类继æ¿ç¶ç±»ç屿§åè¡ä¸ºï¼å¹¶è½æ©å±æ°çè½åï¼å¤§å¤§å¢å ç¨åºçéç¨æ§åæç»´æ¤æ§ãå¨Java䏿¯åç»§æ¿çï¼ä¹å°±æ¯è¯´ä¸ä¸ªåç±»åªæä¸ä¸ªç¶ç±»ã
3ã夿æ¯åä¸ä¸ªè¡ä¸ºå
·æå¤ä¸ªä¸å表ç°å½¢å¼çè½åãå¨ä¸ä¿®æ¹ç¨åºä»£ç çæ
åµä¸æ¹åç¨åºè¿è¡æ¶ç»å®ç代ç ãå®ç°å¤æçä¸è¦ç´ ï¼ç»§æ¿ãéåãç¶ç±»å¼ç¨æåå类对象ã
- éæå¤ææ§ï¼éè¿éè½½å®ç°ï¼ç¸åçæ¹æ³æä¸åçåæ°å表ï¼å¯ä»¥æ ¹æ®åæ°çä¸åï¼ååºä¸åçå¤çã
- 卿夿æ§ï¼å¨åç±»ä¸éåç¶ç±»çæ¹æ³ãè¿è¡æé´å¤ææå¼ç¨å¯¹è±¡çå®é
ç±»åï¼æ ¹æ®å
¶å®é
ç±»åè°ç¨ç¸åºçæ¹æ³ã
4ãæ½è±¡ãæå®¢è§äºç©ç¨ä»£ç æ½è±¡åºæ¥ã
## é¢å对象ç¼ç¨çå
大åå?
- **对象åä¸èè´£**ï¼æä»¬è®¾è®¡å建ç对象ï¼å¿
é¡»èè´£æç¡®ï¼æ¯å¦ååç±»ï¼éé¢ç¸å
³ç屿§åæ¹æ³é½å¿
é¡»è·ååç¸å
³ï¼ä¸è½åºç°è®¢åçä¸ç¸å
³çå
容ãè¿éçç±»å¯ä»¥æ¯æ¨¡åãç±»åºãç¨åºéï¼èä¸ååæç±»ã
- **é弿¿æ¢åå**ï¼åç±»è½å¤å®å
¨æ¿ä»£ç¶ç±»ï¼åä¹åä¸è¡ãé常ç¨äºå®ç°æ¥å£æ¶è¿ç¨ãå 为åç±»è½å¤å®å
¨æ¿ä»£åºï¼ç¶ï¼ç±»ï¼é£ä¹è¿æ ·ç¶ç±»å°±æ¥æå¾å¤åç±»ï¼å¨åç»çç¨åºæ©å±ä¸å°±å¾å®¹æè¿è¡æ©å±ï¼ç¨åºå®å
¨ä¸éè¦è¿è¡ä¿®æ¹å³å¯è¿è¡æ©å±ãæ¯å¦IAçå®ç°ä¸ºAï¼å 为项ç®éæ±åæ´ï¼ç°å¨éè¦æ°çå®ç°ï¼ç´æ¥å¨å®¹å¨æ³¨å
¥å¤æ´æ¢æ¥å£å³å¯.
- **è¿ªç±³ç¹æ³å**ï¼ä¹å«æå°ååï¼æè
说æå°è¦åãé常å¨è®¾è®¡ç¨åºæå¼åç¨åºçæ¶åï¼å°½éè¦é«å
èï¼ä½è¦åãå½ä¸¤ä¸ªç±»è¿è¡äº¤äºçæ¶åï¼ä¼äº§çä¾èµãèè¿ªç±³ç¹æ³åå°±æ¯å»ºè®®è¿ç§ä¾èµè¶å°è¶å¥½ãå°±åæé 彿°æ³¨å
¥ç¶ç±»å¯¹è±¡æ¶ä¸æ ·ï¼å½éè¦ä¾èµæä¸ªå¯¹è±¡æ¶ï¼å¹¶ä¸å¨æå
¶å
鍿¯æä¹å®ç°çï¼èæ¯å¨å®¹å¨ä¸æ³¨å
¥ç¸åºçå®ç°ï¼æ¢ç¬¦åé弿¿æ¢ååï¼åèµ·å°äºè§£è¦çä½ç¨ã
- å¼éååï¼å¼æ¾æ©å±ï¼å°éä¿®æ¹ãå½é¡¹ç®éæ±åçåæ´æ¶ï¼è¦å°½å¯è½çä¸å»å¯¹åæç代ç è¿è¡ä¿®æ¹ï¼èå¨åæçåºç¡ä¸è¿è¡æ©å±ã
- **ä¾èµåç½®åå**ï¼é«å±æ¨¡åä¸åºè¯¥ç´æ¥ä¾èµäºåºå±æ¨¡åçå
·ä½å®ç°ï¼èåºè¯¥ä¾èµäºåºå±çæ½è±¡ãæ¥å£åæ½è±¡ç±»ä¸åºè¯¥ä¾èµäºå®ç°ç±»ï¼èå®ç°ç±»ä¾èµæ¥å£ææ½è±¡ç±»ã
- **æ¥å£é离åå**ï¼ä¸ä¸ªå¯¹è±¡åå¦å¤ä¸ä¸ªå¯¹è±¡äº¤äºçè¿ç¨ä¸ï¼ä¾èµçå
容æå°ãä¹å°±æ¯è¯´å¨æ¥å£è®¾è®¡çæ¶åï¼å¨éµå¾ªå¯¹è±¡åä¸èè´£çæ
åµä¸ï¼å°½éåå°æ¥å£çå
容ã
**ç®æ´ç**ï¼
- åä¸èè´£ï¼å¯¹è±¡è®¾è®¡è¦æ±ç¬ç«ï¼ä¸è½è®¾è®¡ä¸è½å¯¹è±¡ã
- å¼éååï¼å¯¹è±¡ä¿®æ¹æå°åã
- é弿¿æ¢ï¼ç¨åºæ©å±ä¸æ½è±¡è¢«å
·ä½å¯ä»¥æ¿æ¢ï¼æ¥å£ãç¶ç±»ãå¯ä»¥è¢«å®ç°ç±»å¯¹è±¡ãåç±»æ¿æ¢å¯¹è±¡ï¼
- 迪米ç¹ï¼é«å
èï¼ä½è¦åãå°½éä¸è¦ä¾èµç»èã
- ä¾èµåç½®ï¼é¢åæ½è±¡ç¼ç¨ãä¹å°±æ¯åæ°ä¼ éï¼æè
è¿åå¼ï¼å¯ä»¥ä½¿ç¨ç¶ç±»ç±»åæè
æ¥å£ç±»åãä»å¹¿ä¹ä¸è®²ï¼åºäºæ¥å£ç¼ç¨ï¼æå设计好æ¥å£æ¡æ¶ã
- æ¥å£éç¦»ï¼æ¥å£è®¾è®¡å¤§å°è¦éä¸ãè¿å¤§å¯¼è´æ±¡æï¼è¿å°ï¼å¯¼è´è°ç¨éº»ç¦ã
## æ°ç»å°åºæ¯ä¸æ¯å¯¹è±¡ï¼
å
è¯´è¯´å¯¹è±¡çæ¦å¿µãå¯¹è±¡æ¯æ ¹æ®æä¸ªç±»åå»ºåºæ¥çä¸ä¸ªå®ä¾ï¼è¡¨ç¤ºæç±»äºç©ä¸ä¸ä¸ªå
·ä½ç个ä½ã
对象å
·æåç§å±æ§ï¼å¹¶ä¸å
·æä¸äºç¹å®çè¡ä¸ºãç«å¨è®¡ç®æºçè§åº¦ï¼å¯¹è±¡å°±æ¯å
åä¸çä¸ä¸ªå
ååï¼å¨è¿ä¸ªå
ååå°è£
äºä¸äºæ°æ®ï¼ä¹å°±æ¯ç±»ä¸å®ä¹çåä¸ªå±æ§ã
æä»¥ï¼å¯¹è±¡æ¯ç¨æ¥å°è£
æ°æ®çã
javaä¸çæ°ç»å
·æjavaä¸å
¶ä»å¯¹è±¡çä¸äºåºæ¬ç¹ç¹ãæ¯å¦å°è£
äºä¸äºæ°æ®ï¼å¯ä»¥è®¿é®å±æ§ï¼ä¹å¯ä»¥è°ç¨æ¹æ³ã
å æ¤ï¼å¯ä»¥è¯´ï¼æ°ç»æ¯å¯¹è±¡ã
ä¹å¯ä»¥éè¿ä»£ç éªè¯æ°ç»æ¯å¯¹è±¡çäºå®ãæ¯å¦ä»¥ä¸ç代ç ï¼è¾åºç»æä¸ºjava.lang.Objectã
```java
Class clz = int[].class;
System.out.println(clz.getSuperclass().getName());
```
ç±æ¤ï¼å¯ä»¥çåºï¼æ°ç»ç±»çç¶ç±»å°±æ¯Objectç±»ï¼é£ä¹å¯ä»¥æ¨æåºæ°ç»å°±æ¯å¯¹è±¡ã
## Javaçåºæ¬æ°æ®ç±»åæåªäºï¼
- byteï¼8bit
- charï¼16bit
- shortï¼16bit
- intï¼32bit
- floatï¼32bit
- longï¼64bit
- doubleï¼64bit
- booleanï¼åªæä¸¤ä¸ªå¼ï¼trueãfalseï¼å¯ä»¥ä½¿â½¤ç¨ 1 bit æ¥åå¨
| ç®åç±»å | boolean | byte | char | short | Int | long | float | double |
| ---------- | ------- | ---- | --------- | ----- | ------- | ---- | ----- | ------ |
| äºè¿å¶ä½æ° | 1 | 8 | 16 | 16 | 32 | 64 | 32 | 64 |
| å
è£
ç±» | Boolean | Byte | Character | Short | Integer | Long | Float | Double |
å¨Javaè§èä¸ï¼æ²¡ææç¡®æåºbooleanç大å°ãå¨ãJavaèææºè§èãç»åºäºå个booleanå 4个åèï¼åbooleanæ°ç»1个åèçå®ä¹ï¼å
·ä½ **è¿è¦çèææºå®ç°æ¯å¦æç
§è§èæ¥**ï¼å æ¤booleanå ç¨1个åèæè
4个åè齿¯æå¯è½çã
## 为ä»ä¹ä¸è½ç¨æµ®ç¹å表示éé¢ï¼
ç±äºè®¡ç®æºä¸ä¿åçå°æ°å
¶å®æ¯åè¿å¶çå°æ°çè¿ä¼¼å¼ï¼å¹¶ä¸æ¯åç¡®å¼ï¼æä»¥ï¼åä¸ä¸è¦å¨ä»£ç ä¸ä½¿ç¨æµ®ç¹æ°æ¥è¡¨ç¤ºéé¢çéè¦çææ ã
建议使ç¨BigDecimalæè
Longæ¥è¡¨ç¤ºéé¢ã
## ä»ä¹æ¯å¼ä¼ éåå¼ç¨ä¼ éï¼
- å¼ä¼ éæ¯å¯¹åºæ¬ååéèè¨çï¼ä¼ éçæ¯è¯¥åéçä¸ä¸ªå¯æ¬ï¼æ¹å坿¬ä¸å½±åååéã
- å¼ç¨ä¼ éä¸è¬æ¯å¯¹äºå¯¹è±¡ååéèè¨çï¼ä¼ éçæ¯è¯¥å¯¹è±¡å°åçä¸ä¸ªå¯æ¬ï¼å¹¶ä¸æ¯å对象æ¬èº«ï¼ä¸¤è
æååä¸çå
å空é´ãæä»¥å¯¹å¼ç¨å¯¹è±¡è¿è¡æä½ä¼åæ¶æ¹åå对象ã
**javaä¸ä¸åå¨å¼ç¨ä¼ éï¼åªæå¼ä¼ é**ãå³ä¸åå¨åéaæååébï¼åébæå对象çè¿ç§æ
åµã
## äºè§£Javaçå
è£
ç±»ååï¼ä¸ºä»ä¹éè¦å
è£
ç±»ï¼
Java æ¯ä¸ç§é¢å对象è¯è¨ï¼å¾å¤å°æ¹é½éè¦ä½¿ç¨å¯¹è±¡è䏿¯åºæ¬æ°æ®ç±»åãæ¯å¦ï¼å¨éåç±»ä¸ï¼æä»¬æ¯æ æ³å° int ãdouble çç±»åæ¾è¿å»çãå 为éåç容å¨è¦æ±å
ç´ æ¯ Object ç±»åã
为äºè®©åºæ¬ç±»åä¹å
·æå¯¹è±¡çç¹å¾ï¼å°±åºç°äºå
è£
ç±»åãç¸å½äºå°åºæ¬ç±»åå
è£
èµ·æ¥ï¼ä½¿å¾å®å
·æäºå¯¹è±¡çæ§è´¨ï¼å¹¶ä¸ä¸ºå
¶æ·»å äºå±æ§åæ¹æ³ï¼ä¸°å¯äºåºæ¬ç±»åçæä½ã
## èªå¨è£
ç®±åæç®±
Javaä¸åºç¡æ°æ®ç±»åä¸å®ä»¬å¯¹åºçå
è£
ç±»è§ä¸è¡¨ï¼
| åå§ç±»å | å
è£
ç±»å |
| :------- | :-------- |
| boolean | Boolean |
| byte | Byte |
| char | Character |
| float | Float |
| int | Integer |
| long | Long |
| short | Short |
| double | Double |
è£
ç®±ï¼å°åºç¡ç±»å转å为å
è£
ç±»åã
æç®±ï¼å°å
è£
ç±»å转å为åºç¡ç±»åã
å½åºç¡ç±»åä¸å®ä»¬çå
è£
ç±»æå¦ä¸å ç§æ
嵿¶ï¼ç¼è¯å¨ä¼**èªå¨**帮æä»¬è¿è¡è£
ç®±ææç®±ï¼
- èµå¼æä½ï¼è£
ç®±ææç®±ï¼
- è¿è¡å åä¹é¤æ··åè¿ç® ï¼æç®±ï¼
- è¿è¡>,<,==æ¯è¾è¿ç®ï¼æç®±ï¼
- è°ç¨equalsè¿è¡æ¯è¾ï¼è£
ç®±ï¼
- ArrayListãHashMapçéå类添å åºç¡ç±»åæ°æ®æ¶ï¼è£
ç®±ï¼
示ä¾ä»£ç ï¼
```java
Integer x = 1; // è£
ç®± è°â½¤ Integer.valueOf(1)
int y = x; // æç®± è°â½¤ï¦º X.intValue()
```
## 两个Integer ç¨== æ¯è¾ä¸ç¸ççåå
ä¸é¢çä¸é常è§çé¢è¯é¢ï¼
```java
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
Integer c = 200;
Integer d = 200;
System.out.println(c == d);
```
è¾åºï¼
```java
true
false
```
为ä»ä¹ç¬¬äºä¸ªè¾åºæ¯falseï¼çç Integer ç±»çæºç å°±ç¥éå¦ã
```java
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
```
`Integer c = 200;` ä¼è°ç¨`Integer.valueOf(200)`ãèä»IntegerçvalueOf()æºç å¯ä»¥çå°ï¼è¿éçå®ç°å¹¶ä¸æ¯ç®åçnew Integerï¼èæ¯ç¨IntegerCacheåä¸ä¸ªcacheã
```java
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h;
}
...
}
```
è¿æ¯IntegerCacheéæä»£ç åä¸ç䏿®µï¼é»è®¤Integer cache çä¸éæ¯-128ï¼ä¸éé»è®¤127ãå½èµå¼100ç»Integeræ¶ï¼å好å¨è¿ä¸ªèå´å
ï¼æä»¥ä»cacheä¸å对åºçIntegerå¹¶è¿åï¼æä»¥aåbè¿åçæ¯åä¸ä¸ªå¯¹è±¡ï¼æä»¥`==`æ¯è¾æ¯ç¸ççï¼å½èµå¼200ç»Integeræ¶ï¼ä¸å¨cache çèå´å
ï¼æä»¥ä¼new Integerå¹¶è¿åï¼å½ç¶`==`æ¯è¾çç»ææ¯ä¸ç¸ççã
## String 为ä»ä¹ä¸å¯åï¼
å
ççä»ä¹æ¯ä¸å¯åç对象ã
妿ä¸ä¸ªå¯¹è±¡ï¼å¨å®åå»ºå®æä¹åï¼ä¸è½åæ¹åå®çç¶æï¼é£ä¹è¿ä¸ªå¯¹è±¡å°±æ¯ä¸å¯åçãä¸è½æ¹åç¶æçæææ¯ï¼ä¸è½æ¹å对象å
çæååéï¼å
æ¬åºæ¬æ°æ®ç±»åçå¼ä¸è½æ¹åï¼å¼ç¨ç±»åçåéä¸è½æåå
¶ä»ç对象ï¼å¼ç¨ç±»åæåç对象çç¶æä¹ä¸è½æ¹åã
æ¥çæ¥çJava8 Stringç±»çæºç ï¼
```java
public final class String
implements java.io.Serializable, Comparable, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
}
```
仿ºç å¯ä»¥çåºï¼String对象å
¶å®å¨å
é¨å°±æ¯ä¸ä¸ªä¸ªå符ï¼åå¨å¨è¿ä¸ªvalueæ°ç»éé¢çã
valueæ°ç»ç¨final修饰ï¼final 修饰çåéï¼å¼ä¸è½è¢«ä¿®æ¹ãå æ¤valueä¸å¯ä»¥æåå
¶ä»å¯¹è±¡ã
Stringç±»å
鍿æçåæ®µé½æ¯ç§æçï¼ä¹å°±æ¯è¢«private修饰ãèä¸String没æå¯¹å¤æä¾ä¿®æ¹å
é¨ç¶æçæ¹æ³ï¼å æ¤valueæ°ç»ä¸è½æ¹åã
æä»¥ï¼Stringæ¯ä¸å¯åçã
é£ä¸ºä»ä¹Stringè¦è®¾è®¡æä¸å¯åçï¼
ä¸»è¦æä»¥ä¸å ç¹åå ï¼
1. **线ç¨å®å
¨**ãåä¸ä¸ªå符串å®ä¾å¯ä»¥è¢«å¤ä¸ªçº¿ç¨å
±äº«ï¼å 为å符串ä¸å¯åï¼æ¬èº«å°±æ¯çº¿ç¨å®å
¨çã
2. **æ¯æhashæ å°åç¼å**ãå 为Stringçhashå¼ç»å¸¸ä¼ä½¿ç¨å°ï¼æ¯å¦ä½ä¸º Map çé®ï¼ä¸å¯åçç¹æ§ä½¿å¾ hash å¼ä¹ä¸ä¼åï¼ä¸éè¦éæ°è®¡ç®ã
3. **åºäºå®å
¨èè**ãç½ç»å°åURLãæä»¶è·¯å¾pathãå¯ç é常æ
åµä¸é½æ¯ä»¥Stringç±»åä¿åï¼åè¥String䏿¯åºå®ä¸åçï¼å°ä¼å¼èµ·åç§å®å
¨éæ£ãæ¯å¦å°å¯ç ç¨Stringçç±»åä¿åï¼é£ä¹å®å°ä¸ç´çå¨å
åä¸ï¼ç´å°å徿¶é卿宿¸
é¤ãåå¦Stringç±»ä¸æ¯åºå®ä¸åçï¼é£ä¹è¿ä¸ªå¯ç å¯è½ä¼è¢«æ¹åï¼å¯¼è´åºç°å®å
¨éæ£ã
4. **åç¬¦ä¸²å¸¸éæ± ä¼å**ãString对象å建ä¹åï¼ä¼ç¼åå°åç¬¦ä¸²å¸¸éæ± ä¸ï¼ä¸æ¬¡éè¦åå»ºåæ ·ç对象æ¶ï¼å¯ä»¥ç´æ¥è¿åç¼åçå¼ç¨ã
æ¢ç¶æä»¬çStringæ¯ä¸å¯åçï¼å®å
é¨è¿æå¾å¤substringï¼ replaceï¼ replaceAllè¿äºæä½çæ¹æ³ãè¿äºæ¹æ³å¥½å伿¹åStringå¯¹è±¡ï¼æä¹è§£éå¢ï¼
å
¶å®ä¸æ¯çï¼æä»¬æ¯æ¬¡è°ç¨replaceçæ¹æ³ï¼å
¶å®ä¼å¨å å
åä¸å建äºä¸ä¸ªæ°ç对象ãç¶åå
¶valueæ°ç»å¼ç¨æåä¸åç对象ã
## 为ä½JDK9è¦å°Stringçåºå±å®ç°ç±char[]æ¹æbyte[]?
ä¸»è¦æ¯ä¸ºäº**è约Stringå ç¨çå
å**ã
å¨å¤§é¨åJavaç¨åºçå å
åä¸ï¼Stringå ç¨çç©ºé´æå¤§ï¼å¹¶ä¸ç»å¤§å¤æ°StringåªæLatin-1å符ï¼è¿äºLatin-1å符åªéè¦1个åèå°±å¤äºã
èå¨JDK9ä¹åï¼JVMå 为String使ç¨charæ°ç»åå¨ï¼æ¯ä¸ªcharå 2个åèï¼æä»¥å³ä½¿å符串åªéè¦1åèï¼å®ä¹è¦æç
§2åèè¿è¡åé
ï¼æµªè´¹äºä¸åçå
å空é´ã
å°äºJDK9ä¹åï¼å¯¹äºæ¯ä¸ªå符串ï¼ä¼å
夿宿¯ä¸æ¯åªæLatin-1å符ï¼å¦ææ¯ï¼å°±æç
§1åèçè§æ ¼è¿è¡åé
å
åï¼å¦æä¸æ¯ï¼å°±æç
§2åèçè§æ ¼è¿è¡åé
ï¼è¿æ ·ä¾¿æé«äºå
å使ç¨çï¼åæ¶GC次æ°ä¹ä¼åå°ï¼æåæçã
ä¸è¿Latin-1ç¼ç 鿝æçå符æéï¼æ¯å¦ä¸æ¯æä¸æå符ï¼å æ¤å¯¹äºä¸æå符串ï¼ç¨çæ¯UTF16ç¼ç ï¼ä¸¤ä¸ªåèï¼ï¼æä»¥ç¨byte[]åchar[]å®ç°æ²¡ä»ä¹åºå«ã
## String, StringBuffer å StringBuilderåºå«
**1. å¯åæ§**
- String ä¸å¯å
- StringBuffer å StringBuilder å¯å
**2. 线ç¨å®å
¨**
- String ä¸å¯åï¼å æ¤æ¯çº¿ç¨å®å
¨ç
- StringBuilder 䏿¯çº¿ç¨å®å
¨ç
- StringBuffer æ¯çº¿ç¨å®å
¨çï¼å
é¨ä½¿ç¨ synchronized è¿è¡åæ¥
## ä»ä¹æ¯StringJoinerï¼
StringJoineræ¯ Java 8 æ°å¢çä¸ä¸ª APIï¼å®åºäº StringBuilder å®ç°ï¼ç¨äºå®ç°å¯¹å符串ä¹é´éè¿åéç¬¦æ¼æ¥çåºæ¯ã
StringJoiner æä¸¤ä¸ªæé æ¹æ³ï¼ç¬¬ä¸ä¸ªæé è¦æ±ä¾æ¬¡ä¼ å
¥åé符ãåç¼ååç¼ã第äºä¸ªæé ååªè¦æ±ä¼ å
¥åé符å³å¯ï¼åç¼ååç¼é»è®¤ä¸ºç©ºå符串ï¼ã
```java
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
StringJoiner(CharSequence delimiter)
```
æäºåç¬¦ä¸²æ¼æ¥åºæ¯ï¼ä½¿ç¨ StringBuffer æ StringBuilder 忾徿¯è¾ç¹çã
æ¯å¦ä¸é¢çä¾åï¼
```java
List values = Arrays.asList(1, 3, 5);
StringBuilder sb = new StringBuilder("(");
for (int i = 0; i < values.size(); i++) {
sb.append(values.get(i));
if (i != values.size() -1) {
sb.append(",");
}
}
sb.append(")");
```
èéè¿StringJoineræ¥å®ç°æ¼æ¥Listçå个å
ç´ ï¼ä»£ç çèµ·æ¥æ´å ç®æ´ã
```java
List values = Arrays.asList(1, 3, 5);
StringJoiner sj = new StringJoiner(",", "(", ")");
for (Integer value : values) {
sj.add(value.toString());
}
```
å¦å¤ï¼åå¹³æ¶ç»å¸¸ä½¿ç¨çCollectors.joining(",")ï¼åºå±å°±æ¯éè¿StringJoinerå®ç°çã
æºç å¦ä¸ï¼
```java
public static Collector joining(
CharSequence delimiter,CharSequence prefix,CharSequence suffix) {
return new CollectorImpl<>(
() -> new StringJoiner(delimiter, prefix, suffix),
StringJoiner::add, StringJoiner::merge,
StringJoiner::toString, CH_NOID);
}
```
## String ç±»çå¸¸ç¨æ¹æ³æåªäºï¼
- indexOf()ï¼è¿åæå®å符çç´¢å¼ã
- charAt()ï¼è¿åæå®ç´¢å¼å¤çå符ã
- replace()ï¼åç¬¦ä¸²æ¿æ¢ã
- trim()ï¼å»é¤å符串两端空ç½ã
- split()ï¼åå²å符串ï¼è¿åä¸ä¸ªåå²åçå符串æ°ç»ã
- getBytes()ï¼è¿åå符串ç byte ç±»åæ°ç»ã
- length()ï¼è¿åå符串é¿åº¦ã
- toLowerCase()ï¼å°å符串转æå°å忝ã
- toUpperCase()ï¼å°å符串转æå¤§åå符ã
- substring()ï¼æªåå符串ã
- equals()ï¼å符串æ¯è¾ã
## new String("dabin")ä¼å建å 个对象ï¼
使ç¨è¿ç§æ¹å¼ä¼å建两个å符串对象ï¼åææ¯åç¬¦ä¸²å¸¸éæ± 䏿²¡æ "dabin" è¿ä¸ªå符串对象ï¼ã
- "dabin" å±äºå符串åé¢éï¼å æ¤ç¼è¯æ¶æä¼å¨åç¬¦ä¸²å¸¸éæ± ä¸å建ä¸ä¸ªåç¬¦ä¸²å¯¹è±¡ï¼æåè¿ä¸ª "dabin" å符串åé¢éï¼
- ä½¿ç¨ new çæ¹å¼ä¼å¨å ä¸å建ä¸ä¸ªå符串对象ã
## ä»ä¹æ¯åç¬¦ä¸²å¸¸éæ± ï¼
åç¬¦ä¸²å¸¸éæ± ï¼String Poolï¼ä¿åçææå符串åé¢éï¼è¿äºåé¢éå¨ç¼è¯æ¶æå°±ç¡®å®ãåç¬¦ä¸²å¸¸éæ± ä½äºå å
åä¸ï¼ä¸é¨ç¨æ¥åå¨å符串常éãå¨å建å符串æ¶ï¼JVMé¦å
伿£æ¥åç¬¦ä¸²å¸¸éæ± ï¼å¦æè¯¥å符串已ç»å卿± ä¸ï¼åè¿åå
¶å¼ç¨ï¼å¦æä¸åå¨ï¼åå建æ¤å符串并æ¾å
¥æ± ä¸ï¼å¹¶è¿åå
¶å¼ç¨ã
## Stringæå¤§é¿åº¦æ¯å¤å°ï¼
Stringç±»æä¾äºä¸ä¸ªlengthæ¹æ³ï¼è¿åå¼ä¸ºintç±»åï¼èintçåå¼ä¸é为2^31 -1ã
æä»¥ç论ä¸Stringçæå¤§é¿åº¦ä¸º2^31 -1ã
**è¾¾å°è¿ä¸ªé¿åº¦çè¯éè¦å¤å¤§çå
åå**ï¼
Stringå
鍿¯ä½¿ç¨ä¸ä¸ªcharæ°ç»æ¥ç»´æ¤å符åºåçï¼ä¸ä¸ªcharå ç¨ä¸¤ä¸ªåèãå¦æè¯´Stringæå¤§é¿åº¦æ¯2^31 -1çè¯ï¼é£ä¹æå¤§çå符串å ç¨å
å空é´çº¦çäº4GBã
ä¹å°±æ¯è¯´ï¼æä»¬éè¦æå¤§äº4GBçJVMè¿è¡å
åæè¡ã
**é£Stringä¸è¬é½åå¨å¨JVMçåªååºåå¢**ï¼
å符串å¨JVMä¸çåå¨åä¸¤ç§æ
åµï¼ä¸ç§æ¯String对象ï¼åå¨å¨JVMçå æ ä¸ãä¸ç§æ¯å符串常éï¼åå¨å¨å¸¸éæ± éé¢ã
**ä»ä¹æ
åµä¸å符串ä¼åå¨å¨å¸¸éæ± å¢**ï¼
å½éè¿åé¢éè¿è¡åç¬¦ä¸²å£°ææ¶ï¼æ¯å¦String s = "ç¨åºæ°å¤§å½¬";ï¼è¿ä¸ªå符串å¨ç¼è¯ä¹åä¼ä»¥å¸¸éçå½¢å¼è¿å
¥å°å¸¸éæ± ã
**é£å¸¸éæ± ä¸çå符串æå¤§é¿åº¦æ¯2^31-1å**ï¼
䏿¯çï¼å¸¸éæ± å¯¹Stringçé¿åº¦æ¯æå¦å¤éå¶çããJavaä¸çUTF-8ç¼ç çUnicodeå符串å¨å¸¸éæ± ä¸ä»¥CONSTANT_Utf8ç±»å表示ã
```java
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
```
lengthå¨è¿éå°±æ¯ä»£è¡¨å符串çé¿åº¦ï¼lengthçç±»åæ¯u2ï¼u2æ¯æ 符å·ç16使´æ°ï¼ä¹å°±æ¯è¯´æå¤§é¿åº¦å¯ä»¥åå°2^16-1 å³ 65535ã
ä¸è¿javacç¼è¯å¨åäºéå¶ï¼éè¦length < 65535ãæä»¥å符串常éå¨å¸¸éæ± ä¸çæå¤§é¿åº¦æ¯65535 - 1 = 65534ã
æåæ»ç»ä¸ä¸ï¼
Stringå¨ä¸åçç¶æä¸ï¼å
·æä¸åçé¿åº¦éå¶ã
- å符串常éé¿åº¦ä¸è½è¶
è¿65534
- å å
å符串çé¿åº¦ä¸è¶
è¿2^31-1
## Objectå¸¸ç¨æ¹æ³æåªäºï¼
Javaé¢è¯ç»å¸¸ä¼åºç°çä¸éé¢ç®ï¼Objectçå¸¸ç¨æ¹æ³ãä¸é¢ç»å¤§å®¶æ´çä¸ä¸ã
Objectå¸¸ç¨æ¹æ³æï¼`toString()`ã`equals()`ã`hashCode()`ã`clone()`çã
**toString**
é»è®¤è¾åºå¯¹è±¡å°åã
```java
public class Person {
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public static void main(String[] args) {
System.out.println(new Person(18, "ç¨åºå大彬").toString());
}
//output
//me.tyson.java.core.Person@4554617c
}
```
å¯ä»¥éåtoStringæ¹æ³ï¼æç
§éåé»è¾è¾åºå¯¹è±¡å¼ã
```java
public class Person {
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return name + ":" + age;
}
public static void main(String[] args) {
System.out.println(new Person(18, "ç¨åºå大彬").toString());
}
//output
//ç¨åºå大彬:18
}
```
**equals**
é»è®¤æ¯è¾ä¸¤ä¸ªå¼ç¨å鿝妿ååä¸ä¸ªå¯¹è±¡ï¼å
åå°åï¼ã
```java
public class Person {
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public static void main(String[] args) {
String name = "ç¨åºå大彬";
Person p1 = new Person(18, name);
Person p2 = new Person(18, name);
System.out.println(p1.equals(p2));
}
//output
//false
}
```
å¯ä»¥éåequalsæ¹æ³ï¼æç
§ageånameæ¯å¦ç¸çæ¥å¤æï¼
```java
public class Person {
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (o instanceof Person) {
Person p = (Person) o;
return age == p.age && name.equals(p.name);
}
return false;
}
public static void main(String[] args) {
String name = "ç¨åºå大彬";
Person p1 = new Person(18, name);
Person p2 = new Person(18, name);
System.out.println(p1.equals(p2));
}
//output
//true
}
```
**hashCode**
å°ä¸å¯¹è±¡ç¸å
³çä¿¡æ¯æ å°æä¸ä¸ªåå¸å¼ï¼é»è®¤çå®ç°hashCode弿¯æ ¹æ®å
åå°åæ¢ç®åºæ¥ã
```java
public class Cat {
public static void main(String[] args) {
System.out.println(new Cat().hashCode());
}
//out
//1349277854
}
```
**clone**
Javaèµå¼æ¯å¤å¶å¯¹è±¡å¼ç¨ï¼å¦ææä»¬æ³è¦å¾å°ä¸ä¸ªå¯¹è±¡ç坿¬ï¼ä½¿ç¨èµå¼æä½æ¯æ æ³è¾¾å°ç®ççãObject对象æä¸ªclone()æ¹æ³ï¼å®ç°äºå¯¹
象ä¸åä¸ªå±æ§çå¤å¶ï¼ä½å®çå¯è§èå´æ¯protectedçã
```java
protected native Object clone() throws CloneNotSupportedException;
```
æä»¥å®ä½ç±»ä½¿ç¨å
éçåææ¯ï¼
- å®ç°Cloneableæ¥å£ï¼è¿æ¯ä¸ä¸ªæ è®°æ¥å£ï¼èªèº«æ²¡ææ¹æ³ï¼è¿åºè¯¥æ¯ä¸ç§çº¦å®ãè°ç¨cloneæ¹æ³æ¶ï¼ä¼å¤æææ²¡æå®ç°Cloneableæ¥å£ï¼æ²¡æå®ç°Cloneableçè¯ä¼æå¼å¸¸CloneNotSupportedExceptionã
- è¦çclone()æ¹æ³ï¼å¯è§æ§æå为publicã
```java
public class Cat implements Cloneable {
private String name;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) throws CloneNotSupportedException {
Cat c = new Cat();
c.name = "ç¨åºå大彬";
Cat cloneCat = (Cat) c.clone();
c.name = "大彬";
System.out.println(cloneCat.name);
}
//output
//ç¨åºå大彬
}
```
**getClass**
è¿åæ¤ Object çè¿è¡æ¶ç±»ï¼å¸¸ç¨äºjavaåå°æºå¶ã
```java
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public static void main(String[] args) {
Person p = new Person("ç¨åºå大彬");
Class clz = p.getClass();
System.out.println(clz);
//è·åç±»å
System.out.println(clz.getName());
}
/**
* class com.tyson.basic.Person
* com.tyson.basic.Person
*/
}
```
**wait**
å½å线ç¨è°ç¨å¯¹è±¡çwait()æ¹æ³ä¹åï¼å½å线ç¨ä¼éæ¾å¯¹è±¡éï¼è¿å
¥çå¾
ç¶æãçå¾
å
¶ä»çº¿ç¨è°ç¨æ¤å¯¹è±¡çnotify()/notifyAll()å¤éæè
çå¾
è¶
æ¶æ¶é´wait(long timeout)èªå¨å¤éã线ç¨éè¦è·åobj对象éä¹åæè½è°ç¨ obj.wait()ã
**notify**
obj.notify()å¤é卿¤å¯¹è±¡ä¸çå¾
çå个线ç¨ï¼éæ©æ¯ä»»ææ§çãnotifyAll()å¤é卿¤å¯¹è±¡ä¸çå¾
çææçº¿ç¨ã
## 讲讲深æ·è´åæµ
æ·è´ï¼
**æµ
æ·è´**ï¼æ·â»å¯¹è±¡ååå§å¯¹è±¡çå¼â½¤ç±»åå¼ç¨åâ¼ä¸ªå¯¹è±¡ã
以ä¸ä¾åï¼Cat对象éé¢æä¸ªPerson对象ï¼è°ç¨cloneä¹åï¼å
é对象åå对象çPersonå¼ç¨çæ¯åä¸ä¸ªå¯¹è±¡ï¼è¿å°±æ¯æµ
æ·è´ã
```java
public class Cat implements Cloneable {
private String name;
private Person owner;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) throws CloneNotSupportedException {
Cat c = new Cat();
Person p = new Person(18, "ç¨åºå大彬");
c.owner = p;
Cat cloneCat = (Cat) c.clone();
p.setName("大彬");
System.out.println(cloneCat.owner.getName());
}
//output
//大彬
}
```
**æ·±æ·è´**ï¼æ·è´å¯¹è±¡ååå§å¯¹è±¡çå¼ç¨ç±»åå¼ç¨ä¸åç对象ã
以ä¸ä¾åï¼å¨clone彿°ä¸ä¸ä»
è°ç¨äºsuper.cloneï¼èä¸è°ç¨Person对象çcloneæ¹æ³ï¼Personä¹è¦å®ç°Cloneableæ¥å£å¹¶éåcloneæ¹æ³ï¼ï¼ä»èå®ç°äºæ·±æ·è´ãå¯ä»¥çå°ï¼æ·è´å¯¹è±¡çå¼ä¸ä¼åå°å对象çå½±åã
```java
public class Cat implements Cloneable {
private String name;
private Person owner;
@Override
protected Object clone() throws CloneNotSupportedException {
Cat c = null;
c = (Cat) super.clone();
c.owner = (Person) owner.clone();//æ·è´Person对象
return c;
}
public static void main(String[] args) throws CloneNotSupportedException {
Cat c = new Cat();
Person p = new Person(18, "ç¨åºå大彬");
c.owner = p;
Cat cloneCat = (Cat) c.clone();
p.setName("大彬");
System.out.println(cloneCat.owner.getName());
}
//output
//ç¨åºå大彬
}
```
## 两个对象çhashCode()ç¸åï¼å equals()æ¯å¦ä¹ä¸å®ä¸º trueï¼
equalsä¸hashcodeçå
³ç³»ï¼
1. å¦æä¸¤ä¸ªå¯¹è±¡è°ç¨equalsæ¯è¾è¿åtrueï¼é£ä¹å®ä»¬çhashCodeå¼ä¸å®è¦ç¸åï¼
2. å¦æä¸¤ä¸ªå¯¹è±¡çhashCodeç¸åï¼å®ä»¬å¹¶ä¸ä¸å®ç¸åã
hashcodeæ¹æ³ä¸»è¦æ¯ç¨æ¥**æå对象æ¯è¾çæç**ï¼å
è¿è¡hashcode()çæ¯è¾ï¼å¦æä¸ç¸åï¼é£å°±ä¸å¿
å¨è¿è¡equalsçæ¯è¾ï¼è¿æ ·å°±å¤§å¤§åå°äºequalsæ¯è¾ç次æ°ï¼å½æ¯è¾å¯¹è±¡çæ°éå¾å¤§çæ¶åè½æåæçã
## 为ä»ä¹éå equals æ¶ä¸å®è¦éå hashCodeï¼
乿以éå`equals()`è¦éå`hashcode()`ï¼æ¯ä¸ºäºä¿è¯`equals()`æ¹æ³è¿åtrueçæ
åµä¸hashcodeå¼ä¹è¦ä¸è´ï¼å¦æéåäº`equals()`没æéå`hashcode()`ï¼å°±ä¼åºç°ä¸¤ä¸ªå¯¹è±¡ç¸çä½`hashcode()`ä¸ç¸ççæ
åµãè¿æ ·ï¼å½ç¨å
¶ä¸çä¸ä¸ªå¯¹è±¡ä½ä¸ºé®ä¿åå°hashMapãhashTableæhashSetä¸ï¼å以å¦ä¸ä¸ªå¯¹è±¡ä½ä¸ºé®å¼å»æ¥æ¾ä»ä»¬çæ¶åï¼å伿¥æ¾ä¸å°ã
## Javaå建对象æå ç§æ¹å¼ï¼
Javaå建对象æä»¥ä¸å ç§æ¹å¼ï¼
- ç¨newè¯å¥å建对象ã
- 使ç¨åå°ï¼ä½¿ç¨Class.newInstance()å建对象ã
- è°ç¨å¯¹è±¡çclone()æ¹æ³ã
- è¿ç¨ååºååææ®µï¼è°ç¨java.io.ObjectInputStream对象çreadObject()æ¹æ³ã
## 说说类å®ä¾åç顺åº
Javaä¸ç±»å®ä¾å顺åºï¼
1. éæå±æ§ï¼éæä»£ç åã
2. æ®é屿§ï¼æ®é代ç åã
3. æé æ¹æ³ã
```java
public class LifeCycle {
// éæå±æ§
private static String staticField = getStaticField();
// éæä»£ç å
static {
System.out.println(staticField);
System.out.println("éæä»£ç ååå§å");
}
// æ®é屿§
private String field = getField();
// æ®é代ç å
{
System.out.println(field);
System.out.println("æ®é代ç ååå§å");
}
// æé æ¹æ³
public LifeCycle() {
System.out.println("æé æ¹æ³åå§å");
}
// éææ¹æ³
public static String getStaticField() {
String statiFiled = "éæå±æ§åå§å";
return statiFiled;
}
// æ®éæ¹æ³
public String getField() {
String filed = "æ®é屿§åå§å";
return filed;
}
public static void main(String[] argc) {
new LifeCycle();
}
/**
* éæå±æ§åå§å
* éæä»£ç ååå§å
* æ®é屿§åå§å
* æ®é代ç ååå§å
* æé æ¹æ³åå§å
*/
}
```
## equalså==æä»ä¹åºå«ï¼
- 对äºåºæ¬æ°æ®ç±»åï¼==æ¯è¾çæ¯ä»ä»¬çå¼ãåºæ¬æ°æ®ç±»å没æequalæ¹æ³ï¼
- 对äºå¤åæ°æ®ç±»åï¼==æ¯è¾çæ¯å®ä»¬çåæ¾å°å(æ¯å¦æ¯åä¸ä¸ªå¯¹è±¡)ã`equals()`é»è®¤æ¯è¾å°åå¼ï¼éåçè¯æç
§éåé»è¾å»æ¯è¾ã
## 常è§çå
³é®åæåªäºï¼
**static**
staticå¯ä»¥ç¨æ¥ä¿®é¥°ç±»çæåæ¹æ³ãç±»çæååéã
staticåéä¹ç§°ä½**éæåé**ï¼éæåéåééæåéçåºå«æ¯ï¼éæåé被ææç对象æå
±äº«ï¼å¨å
åä¸åªæä¸ä¸ªå¯æ¬ï¼å®å½ä¸ä»
å½å¨ç±»å次å è½½æ¶ä¼è¢«åå§åãèééæåéæ¯å¯¹è±¡ææ¥æçï¼å¨åå»ºå¯¹è±¡çæ¶å被åå§åï¼åå¨å¤ä¸ªå¯æ¬ï¼åä¸ªå¯¹è±¡æ¥æç坿¬äºä¸å½±åã
以ä¸ä¾åï¼age为ééæåéï¼åp1æå°ç»ææ¯ï¼`Name:zhangsan, Age:10`ï¼è¥age使ç¨static修饰ï¼åp1æå°ç»ææ¯ï¼`Name:zhangsan, Age:12`ï¼å 为staticåéå¨å
ååªæä¸ä¸ªå¯æ¬ã
```java
public class Person {
String name;
int age;
public String toString() {
return "Name:" + name + ", Age:" + age;
}
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "zhangsan";
p1.age = 10;
Person p2 = new Person();
p2.name = "lisi";
p2.age = 12;
System.out.println(p1);
System.out.println(p2);
}
/**Output
* Name:zhangsan, Age:10
* Name:lisi, Age:12
*///~
}
```
staticæ¹æ³ä¸è¬ç§°ä½**éææ¹æ³**ãéææ¹æ³ä¸ä¾èµäºä»»ä½å¯¹è±¡å°±å¯ä»¥è¿è¡è®¿é®ï¼éè¿ç±»åå³å¯è°ç¨éææ¹æ³ã
```java
public class Utils {
public static void print(String s) {
System.out.println("hello world: " + s);
}
public static void main(String[] args) {
Utils.print("ç¨åºå大彬");
}
}
```
**éæä»£ç å**åªä¼å¨ç±»å è½½çæ¶åæ§è¡ä¸æ¬¡ã以ä¸ä¾åï¼startDateåendDateå¨ç±»å è½½çæ¶åè¿è¡èµå¼ã
```java
class Person {
private Date birthDate;
private static Date startDate, endDate;
static{
startDate = Date.valueOf("2008");
endDate = Date.valueOf("2021");
}
public Person(Date birthDate) {
this.birthDate = birthDate;
}
}
```
**éæå
é¨ç±»**
**å¨éææ¹æ³é**ï¼ä½¿ç¨â¾®éæå
é¨ç±»ä¾èµäºå¤é¨ç±»çå®ï¦µï¼ä¹å°±æ¯è¯´éè¦å
å建å¤é¨ç±»å®ï¦µï¼æè½ç¨è¿ä¸ªå®ï¦µå»å建ééæå
é¨ç±»ãâ½½éæå
é¨ç±»ï¥§éè¦ã
```java
public class OuterClass {
class InnerClass {
}
static class StaticInnerClass {
}
public static void main(String[] args) {
// å¨éææ¹æ³éï¼ä¸è½ç´æ¥ä½¿ç¨OuterClass.thiså»å建InnerClassçå®ä¾
// éè¦å
å建OuterClassçå®ä¾oï¼ç¶åéè¿oå建InnerClassçå®ä¾
// InnerClass innerClass = new InnerClass();
OuterClass outerClass = new OuterClass();
InnerClass innerClass = outerClass.new InnerClass();
StaticInnerClass staticInnerClass = new StaticInnerClass();
outerClass.test();
}
public void nonStaticMethod() {
InnerClass innerClass = new InnerClass();
System.out.println("nonStaticMethod...");
}
}
```
**final**
1. **åºæ¬æ°æ®**ç±»åç¨final修饰ï¼åä¸è½ä¿®æ¹ï¼æ¯å¸¸éï¼**对象å¼ç¨**ç¨final修饰ï¼åå¼ç¨åªè½æå该对象ï¼ä¸è½æåå«ç对象ï¼ä½æ¯å¯¹è±¡æ¬èº«å¯ä»¥ä¿®æ¹ã
2. finalä¿®é¥°çæ¹æ³ä¸è½è¢«åç±»éå
3. final修饰çç±»ä¸è½è¢«ç»§æ¿ã
**this**
`this.屿§åç§°`æè®¿é®ç±»ä¸çæååéï¼å¯ä»¥ç¨æ¥åºåæååéåå±é¨åéãå¦ä¸ä»£ç æç¤ºï¼`this.name`访é®ç±»Personå½åå®ä¾çåéã
```java
/**
* @description:
* @author: ç¨åºå大彬
* @time: 2021-08-17 00:29
*/
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
```
`this.æ¹æ³åç§°`ç¨æ¥è®¿é®æ¬ç±»çæ¹æ³ã以ä¸ä»£ç ä¸ï¼`this.born()`è°ç¨ç±» Person çå½åå®ä¾çæ¹æ³ã
```java
/**
* @description:
* @author: ç¨åºå大彬
* @time: 2021-08-17 00:29
*/
public class Person {
String name;
int age;
public Person(String name, int age) {
this.born();
this.name = name;
this.age = age;
}
void born() {
}
}
```
**super**
super å
³é®åç¨äºå¨åç±»ä¸è®¿é®ç¶ç±»çåéåæ¹æ³ã
```java
class A {
protected String name = "大彬";
public void getName() {
System.out.println("ç¶ç±»:" + name);
}
}
public class B extends A {
@Override
public void getName() {
System.out.println(super.name);
super.getName();
}
public static void main(String[] args) {
B b = new B();
b.getName();
}
/**
* 大彬
* ç¶ç±»:大彬
*/
}
```
å¨åç±»Bä¸ï¼æä»¬éåäºç¶ç±»ç`getName()`æ¹æ³ï¼å¦æå¨éåç`getName()`æ¹æ³ä¸æä»¬è¦è°ç¨ç¶ç±»çç¸åæ¹æ³ï¼å¿
é¡»è¦éè¿superå
³é®åæ¾å¼æåºã
## final, finally, finalize çåºå«
- final ç¨äºä¿®é¥°å±æ§ãæ¹æ³åç±», åå«è¡¨ç¤ºå±æ§ä¸è½è¢«éæ°èµå¼ï¼æ¹æ³ä¸å¯è¢«è¦çï¼ç±»ä¸å¯è¢«ç»§æ¿ã
- finally æ¯å¼å¸¸å¤çè¯å¥ç»æçä¸é¨åï¼ä¸è¬ä»¥`try-catch-finally`åºç°ï¼`finally`代ç åè¡¨ç¤ºæ»æ¯è¢«æ§è¡ã
- finalize æ¯Objectç±»çä¸ä¸ªæ¹æ³ï¼è¯¥æ¹æ³ä¸è¬ç±åå¾åæ¶å¨æ¥è°ç¨ï¼å½æä»¬è°ç¨`System.gc()`æ¹æ³çæ¶åï¼ç±åå¾åæ¶å¨è°ç¨`finalize()`æ¹æ³ï¼åæ¶åå¾ï¼JVMå¹¶ä¸ä¿è¯æ¤æ¹æ³æ»è¢«è°ç¨ã
## Javaä¸çfinallyä¸å®ä¼è¢«æ§è¡åï¼
çæ¡æ¯ä¸ä¸å®ã
æä»¥ä¸ä¸¤ç§æ
åµfinallyä¸ä¼è¢«æ§è¡ï¼
- ç¨åºæªæ§è¡å°try代ç å
- 妿å½ä¸ä¸ªçº¿ç¨å¨æ§è¡ try è¯å¥åæè
catch è¯å¥åæ¶è¢«ææï¼interruptedï¼æè
è¢«ç»æ¢ï¼killedï¼ï¼ä¸å
¶ç¸å¯¹åºç finally è¯å¥åå¯è½ä¸ä¼æ§è¡ãè¿ææ´æç«¯çæ
åµï¼å°±æ¯å¨çº¿ç¨è¿è¡ try è¯å¥åæè
catch è¯å¥åæ¶ï¼çªç¶æ»æºæè
æçµï¼finally è¯å¥åè¯å®ä¸ä¼æ§è¡äºã
## finalå
³é®åçä½ç¨ï¼
- final 修饰çç±»ä¸è½è¢«ç»§æ¿ã
- final ä¿®é¥°çæ¹æ³ä¸è½è¢«éåã
- final 修饰çåéå«å¸¸éï¼å¸¸éå¿
é¡»åå§åï¼åå§åä¹åå¼å°±ä¸è½è¢«ä¿®æ¹ã
## æ¹æ³éè½½åéåçåºå«ï¼
**å个类ä¸çå¤ä¸ªæ¹æ³å¯ä»¥æç¸åçæ¹æ³åç§°ï¼ä½æ¯æä¸åçåæ°å表ï¼è¿å°±ç§°ä¸ºæ¹æ³éè½½**ãåæ°å表åå«åæ°ç¾åï¼å
æ¬åæ°çç±»åãåæ°ç个æ°ãåæ°ç顺åºï¼åªè¦æä¸ä¸ªä¸åå°±å«ååæ°å表ä¸åã
éè½½æ¯é¢å对象çä¸ä¸ªåºæ¬ç¹æ§ã
```java
public class OverrideTest {
void setPerson() { }
void setPerson(String name) {
//set name
}
void setPerson(String name, int age) {
//set name and age
}
}
```
**æ¹æ³çéåæè¿°çæ¯ç¶ç±»ååç±»ä¹é´çãå½ç¶ç±»çåè½æ æ³æ»¡è¶³åç±»çéæ±ï¼å¯ä»¥å¨åç±»å¯¹æ¹æ³è¿è¡éå**ãæ¹æ³éåæ¶ï¼ æ¹æ³åä¸å½¢åå表å¿
é¡»ä¸è´ã
å¦ä¸ä»£ç ï¼Person为ç¶ç±»ï¼Student为åç±»ï¼å¨Studentä¸éåäºdailyTaskæ¹æ³ã
```java
public class Person {
private String name;
public void dailyTask() {
System.out.println("work eat sleep");
}
}
public class Student extends Person {
@Override
public void dailyTask() {
System.out.println("study eat sleep");
}
}
```
## æ¥å£ä¸æ½è±¡ç±»åºå«ï¼
1ã**è¯æ³å±é¢**ä¸çåºå«
- æ½è±¡ç±»å¯ä»¥ææ¹æ³å®ç°ï¼èæ¥å£çæ¹æ³ä¸åªè½æ¯æ½è±¡æ¹æ³ï¼Java 8 ä¹åæ¥å£æ¹æ³å¯ä»¥æé»è®¤å®ç°ï¼ï¼
- æ½è±¡ç±»ä¸çæååéå¯ä»¥æ¯åç§ç±»åçï¼æ¥å£ä¸çæååéåªè½æ¯public static finalç±»åï¼
- æ¥å£ä¸ä¸è½å«æéæä»£ç å以åéææ¹æ³ï¼èæ½è±¡ç±»å¯ä»¥æéæä»£ç ååéææ¹æ³ï¼Java 8ä¹åæ¥å£å¯ä»¥æéææ¹æ³ï¼ï¼
- ä¸ä¸ªç±»åªè½ç»§æ¿ä¸ä¸ªæ½è±¡ç±»ï¼èä¸ä¸ªç±»å´å¯ä»¥å®ç°å¤ä¸ªæ¥å£ã
2ã**设计å±é¢**ä¸çåºå«
- æ½è±¡å±æ¬¡ä¸åãæ½è±¡ç±»æ¯å¯¹æ´ä¸ªç±»æ´ä½è¿è¡æ½è±¡ï¼å
æ¬å±æ§ãè¡ä¸ºï¼ä½æ¯æ¥å£åªæ¯å¯¹ç±»è¡ä¸ºè¿è¡æ½è±¡ãç»§æ¿æ½è±¡ç±»æ¯ä¸ç§"æ¯ä¸æ¯"çå
³ç³»ï¼èæ¥å£å®ç°åæ¯ "ææ²¡æ"çå
³ç³»ã妿ä¸ä¸ªç±»ç»§æ¿äºæä¸ªæ½è±¡ç±»ï¼ååç±»å¿
宿¯æ½è±¡ç±»çç§ç±»ï¼èæ¥å£å®ç°åæ¯å
·å¤ä¸å
·å¤çå
³ç³»ï¼æ¯å¦é¸æ¯å¦è½é£ã
- ç»§æ¿æ½è±¡ç±»çæ¯å
·æç¸ä¼¼ç¹ç¹çç±»ï¼èå®ç°æ¥å£çå´å¯ä»¥ä¸åçç±»ã
é¨åè¦æ¥çä¾åï¼
```java
class AlarmDoor extends Door implements Alarm {
//code
}
class BMWCar extends Car implements Alarm {
//code
}
```
## 常è§çExceptionæåªäºï¼
常è§çRuntimeExceptionï¼
1. `ClassCastException` //ç±»å转æ¢å¼å¸¸
2. `IndexOutOfBoundsException` //æ°ç»è¶çå¼å¸¸
3. `NullPointerException` //空æé
4. `ArrayStoreException` //æ°ç»åå¨å¼å¸¸
5. `NumberFormatException` //æ°åæ ¼å¼åå¼å¸¸
6. `ArithmeticException` //æ°å¦è¿ç®å¼å¸¸
checked Exceptionï¼
1. `NoSuchFieldException` //åå°å¼å¸¸ï¼æ²¡æå¯¹åºçåæ®µ
2. `ClassNotFoundException` //ç±»æ²¡ææ¾å°å¼å¸¸
3. `IllegalAccessException` //å®å
¨æéå¼å¸¸ï¼å¯è½æ¯åå°æ¶è°ç¨äºprivateæ¹æ³
## ErroråExceptionçåºå«ï¼
**Error**ï¼JVM æ æ³è§£å³ç严éé®é¢ï¼å¦æ 溢åº`StackOverflowError`ãå
åæº¢åº`OOM`çãç¨åºæ æ³å¤ççé误ã
**Exception**ï¼å
¶å®å ç¼ç¨é误æå¶ç¶çå¤å¨å ç´ å¯¼è´çä¸è¬æ§é®é¢ãå¯ä»¥å¨ä»£ç ä¸è¿è¡å¤çãå¦ï¼ç©ºæéå¼å¸¸ãæ°ç»ä¸æ è¶ççã
## è¿è¡æ¶å¼å¸¸åéè¿è¡æ¶å¼å¸¸ï¼checkedï¼çåºå«ï¼
`unchecked exception`å
æ¬`RuntimeException`å`Error`ç±»ï¼å
¶ä»ææå¼å¸¸ç§°ä¸ºæ£æ¥ï¼checkedï¼å¼å¸¸ã
1. `RuntimeException`ç±ç¨åºé误导è´ï¼åºè¯¥ä¿®æ£ç¨åºé¿å
è¿ç±»å¼å¸¸åçã
2. `checked Exception`ç±å
·ä½çç¯å¢ï¼è¯»åçæä»¶ä¸å卿æä»¶ä¸ºç©ºæsqlå¼å¸¸ï¼å¯¼è´çå¼å¸¸ãå¿
é¡»è¿è¡å¤çï¼ä¸ç¶ç¼è¯ä¸éè¿ï¼å¯ä»¥catchæè
throwsã
## throwåthrowsçåºå«ï¼
- **throw**ï¼ç¨äºæåºä¸ä¸ªå
·ä½çå¼å¸¸å¯¹è±¡ã
- **throws**ï¼ç¨å¨æ¹æ³ç¾åä¸ï¼ç¨äºå£°æè¯¥æ¹æ³å¯è½æåºçå¼å¸¸ãåç±»æ¹æ³æåºçå¼å¸¸èå´æ´å å°ï¼æè
æ ¹æ¬ä¸æå¼å¸¸ã
## éè¿æ
äºè®²æ¸
æ¥NIO
ä¸é¢éè¿ä¸ä¸ªä¾åæ¥è®²è§£ä¸ã
å设æé¶è¡åªæ10个èåã该é¶è¡çä¸å¡æµç¨å为以ä¸4个æ¥éª¤ï¼
1ï¼ é¡¾å®¢å¡«ç³è¯·è¡¨ï¼5åéï¼ï¼
2ï¼ èåå®¡æ ¸ï¼1åéï¼ï¼
3ï¼ èåå«ä¿å®å»éåºåé±ï¼3åéï¼ï¼
4ï¼ èåæå°ç¥¨æ®ï¼å¹¶å°é±å票æ®è¿åç»é¡¾å®¢ï¼1åéï¼ã
ä¸é¢æä»¬ççé¶è¡ä¸åç工使¹å¼å¯¹å
¶å·¥ä½æçå°åºæä½å½±åã
é¦å
æ¯BIOæ¹å¼ã
æ¯æ¥ä¸ä¸ªé¡¾å®¢ï¼é©¬ä¸ç±ä¸ä½è忥æ¥å¾
å¤çï¼å¹¶ä¸è¿ä¸ªèåéè¦è´è´£ä»¥ä¸4ä¸ªå®æ´æµç¨ãå½è¶
è¿10个顾客æ¶ï¼å©ä½ç顾客éè¦æéçåã
ä¸ä¸ªèåå¤çä¸ä¸ªé¡¾å®¢éè¦10åéï¼5+1+3+1ï¼æ¶é´ãä¸ä¸ªå°æ¶ï¼60åéï¼è½å¤ç6个顾客ï¼ä¸å
±10个èåï¼é£å°±æ¯åªè½å¤ç60个顾客ã
å¯ä»¥çå°é¶è¡èåçå·¥ä½ç¶æå¹¶ä¸é¥±åï¼æ¯å¦å¨ç¬¬1æ¥ï¼å
¶å®æ¯å¤äºçå¾
ä¸ã
è¿ç§å·¥ä½å
¶å®å°±æ¯BIOï¼æ¯æ¬¡æ¥ä¸ä¸ªè¯·æ±ï¼é¡¾å®¢ï¼ï¼å°±åé
å°çº¿ç¨æ± ä¸ç±ä¸ä¸ªçº¿ç¨ï¼èåï¼å¤çï¼å¦æè¶
åºäºçº¿ç¨æ± çæå¤§ä¸éï¼10个ï¼ï¼å°±æå°éåçå¾
ã
é£ä¹å¦ä½æé«é¶è¡çååéå¢ï¼
æè·¯å°±æ¯ï¼**åèæ²»ä¹**ï¼å°ä»»å¡æå弿¥ï¼ç±ä¸é¨ç人è´è´£ä¸é¨çä»»å¡ã
å
·ä½æ¥è®²ï¼é¶è¡ä¸é¨ææ´¾ä¸åèåAï¼Açå·¥ä½å°±æ¯æ¯å½æé¡¾å®¢å°é¶è¡ï¼ä»å°±éä¸è¡¨æ ¼è®©é¡¾å®¢å¡«åãæ¯å½æé¡¾å®¢å¡«å¥½è¡¨åï¼Aå°±å°å
¶éæºææ´¾ç»å©ä½ç9åèå宿åç»æ¥éª¤ã
è¿ç§æ¹å¼ä¸ï¼å设顾客é常å¤ï¼èåAçå·¥ä½å¤äºé¥±åä¸ï¼ä»ä¸æçå°å¡«å¥½è¡¨ç顾客另尿å°å¤çã
æå°ä¸ä¸ªèå5åéè½å¤çå®ä¸ä¸ªé¡¾å®¢ï¼ä¸ä¸ªå°æ¶9åèåè½å¤çï¼9*ï¼60/5ï¼=108ã
å¯è§å·¥ä½æ¹å¼ç转åè½å¸¦æ¥æççæå¤§æåã
è¿ç§å·¥ä½æ¹å¼å
¶å®å°±NIOçæè·¯ã
ä¸å¾æ¯é常ç»å
¸çNIO说æå¾ï¼`mainReactor`线ç¨è´è´£çå¬server socketï¼æ¥æ¶æ°è¿æ¥ï¼å¹¶å°å»ºç«çsocketåæ´¾ç»`subReactor`
`subReactor`å¯ä»¥æ¯ä¸ä¸ªçº¿ç¨ï¼ä¹å¯ä»¥æ¯çº¿ç¨æ± ï¼è´è´£å¤è·¯åç¦»å·²è¿æ¥çsocketï¼è¯»åç½ç»æ°æ®ãè¿éç读åç½ç»æ°æ®å¯ç±»æ¯é¡¾å®¢å¡«è¡¨è¿ä¸èæ¶å¨ä½ï¼å¯¹å
·ä½çä¸å¡å¤çåè½ï¼å
¶æç»workerçº¿ç¨æ± 宿
å¯ä»¥çå°å
¸åNIOæä¸ç±»çº¿ç¨ï¼å嫿¯`mainReactor`线ç¨ã`subReactor`线ç¨ã`work`线ç¨ã
ä¸åç线ç¨å¹²ä¸ä¸çäºæ
ï¼æç»æ¯ä¸ªçº¿ç¨é½æ²¡ç©ºçï¼ç³»ç»çååéèªç¶å°±ä¸å»äºã

**é£è¿ä¸ªæµç¨è¿ææ²¡æä»ä¹å¯ä»¥æé«çå°æ¹å¢ï¼**
å¯ä»¥çå°ï¼å¨è¿ä¸ªä¸å¡æµç¨é边第3个æ¥éª¤ï¼èåå«ä¿å®å»éåºåé±ï¼3åéï¼ãè¿3åéæå°è忝å¨çå¾
ä¸åº¦è¿çï¼å¯ä»¥æè¿3åéå©ç¨èµ·æ¥ã
è¿æ¯åèæ²»ä¹çæè·¯ï¼ææ´¾1个èåBæ¥ä¸é¨è´è´£ç¬¬3æ¥éª¤ã
æ¯å½æå°åå·¥å®æç¬¬2æ¥æ¶ï¼å°±éç¥èåBæ¥è´è´£ä¸ä¿å®æ²éåé±ãè¿æ¶åæå°åå·¥å¯ä»¥ç»§ç»å¤çä¸ä¸ä¸ªé¡¾å®¢ã
å½èåBæ¿å°é±ä¹åï¼éç¥é¡¾å®¢é±å·²ç»å°æå°äºï¼è®©é¡¾å®¢éæ°æéå¤çï¼å½æå°èå忬¡æå¡è¯¥é¡¾å®¢æ¶ï¼åç°è¯¥é¡¾å®¢å3æ¥å·²ç»å®æï¼ç´æ¥æ§è¡ç¬¬4æ¥å³å¯ã
å¨å½ä»webæå¡ä¸ï¼ç»å¸¸éè¦éè¿RPCæè
Httpçæ¹å¼è°ç¨ç¬¬ä¸æ¹æå¡ï¼è¿é对åºçå°±æ¯ç¬¬3æ¥ï¼å¦æè¿æ¥èæ¶è¾é¿ï¼éè¿å¼æ¥æ¹å¼å°è½æå¤§éä½èµæºä½¿ç¨çã
NIO+弿¥çæ¹å¼è½è®©å°éç线ç¨å大éçäºæ
ãè¿éç¨äºå¾å¤åºç¨åºæ¯ï¼æ¯å¦ä»£çæå¡ãapiæå¡ãé¿è¿æ¥æå¡ççãè¿äºåºç¨å¦æç¨åæ¥æ¹å¼å°èè´¹å¤§éæºå¨èµæºã
ä¸è¿è½ç¶NIO+弿¥è½æé«ç³»ç»ååéï¼ä½å
¶å¹¶ä¸è½è®©ä¸ä¸ªè¯·æ±ççå¾
æ¶é´ä¸éï¼ç¸åå¯è½ä¼å¢å çå¾
æ¶é´ã
æåï¼NIOåºæ¬ææ³æ»ç»èµ·æ¥å°±æ¯ï¼**åèæ²»ä¹ï¼å°ä»»å¡æå弿¥ï¼ç±ä¸é¨ç人è´è´£ä¸é¨çä»»å¡**
## BIO/NIO/AIOåºå«çåºå«ï¼
**忥é»å¡IO** : ç¨æ·è¿ç¨åèµ·ä¸ä¸ªIOæä½ä»¥åï¼å¿
é¡»çå¾
IOæä½ççæ£å®æåï¼æè½ç»§ç»è¿è¡ã
**忥éé»å¡IO**: 客æ·ç«¯ä¸æå¡å¨éè¿Channelè¿æ¥ï¼éç¨å¤è·¯å¤ç¨å¨è½®è¯¢æ³¨åç`Channel`ãæé«ååéåå¯é æ§ãç¨æ·è¿ç¨åèµ·ä¸ä¸ªIOæä½ä»¥åï¼å¯åå
¶å®äºæ
ï¼ä½ç¨æ·è¿ç¨éè¦è½®è¯¢IOæä½æ¯å¦å®æï¼è¿æ ·é æä¸å¿
è¦çCPUèµæºæµªè´¹ã
**弿¥éé»å¡IO**: éé»å¡å¼æ¥é信模å¼ï¼NIOçå级çï¼éç¨å¼æ¥ééå®ç°å¼æ¥éä¿¡ï¼å
¶readåwriteæ¹æ³åæ¯å¼æ¥æ¹æ³ãç¨æ·è¿ç¨åèµ·ä¸ä¸ªIOæä½ï¼ç¶åç«å³è¿åï¼çIOæä½çæ£ç宿以åï¼åºç¨ç¨åºä¼å¾å°IOæä½å®æçéç¥ã类似Future模å¼ã
## 宿¤çº¿ç¨æ¯ä»ä¹ï¼
- 宿¤çº¿ç¨æ¯è¿è¡å¨åå°çä¸ç§ç¹æ®è¿ç¨ã
- å®ç¬ç«äºæ§å¶ç»ç«¯å¹¶ä¸å¨ææ§å°æ§è¡æç§ä»»å¡æçå¾
å¤çæäºåççäºä»¶ã
- å¨ Java ä¸åå¾åæ¶çº¿ç¨å°±æ¯ç¹æ®ç宿¤çº¿ç¨ã
## Javaæ¯æå¤ç»§æ¿åï¼
javaä¸ï¼**ç±»ä¸æ¯æ**å¤ç»§æ¿ã**æ¥å£ææ¯æ**å¤ç»§æ¿ãæ¥å£çä½ç¨æ¯æå±å¯¹è±¡åè½ãå½ä¸ä¸ªåæ¥å£ç»§æ¿äºå¤ä¸ªç¶æ¥å£æ¶ï¼è¯´æåæ¥å£æå±äºå¤ä¸ªåè½ãå½ä¸ä¸ªç±»å®ç°è¯¥æ¥å£æ¶ï¼å°±æå±äºå¤ä¸ªçåè½ã
Java䏿¯æå¤ç»§æ¿çåå ï¼
- åºäºå®å
¨æ§çèèï¼å¦æå类继æ¿çå¤ä¸ªç¶ç±»é颿ç¸åçæ¹æ³æè
屿§ï¼åç±»å°ä¸ç¥éå
·ä½è¦ç»§æ¿åªä¸ªã
- Javaæä¾äºæ¥å£åå
é¨ç±»ä»¥è¾¾å°å®ç°å¤ç»§æ¿åè½ï¼å¼¥è¡¥åç»§æ¿ç缺é·ã
## å¦ä½å®ç°å¯¹è±¡å
éï¼
- å®ç°`Cloneable`æ¥å£ï¼éå `clone()` æ¹æ³ãè¿ç§æ¹å¼æ¯æµ
æ·è´ï¼å³å¦æç±»ä¸å±æ§æèªå®ä¹å¼ç¨ç±»åï¼åªæ·è´å¼ç¨ï¼ä¸æ·è´å¼ç¨æåç对象ãå¦æå¯¹è±¡ç屿§çClassä¹å®ç° `Cloneable` æ¥å£ï¼é£ä¹å¨å
é对象æ¶ä¹ä¼å
é屿§ï¼å³æ·±æ·è´ã
- ç»ååºååï¼æ·±æ·è´ã
- éè¿`org.apache.commons`ä¸çå·¥å
·ç±»`BeanUtils`å`PropertyUtils`è¿è¡å¯¹è±¡å¤å¶ã
## 忥å弿¥çåºå«ï¼
忥ï¼ååºä¸ä¸ªè°ç¨æ¶ï¼å¨æ²¡æå¾å°ç»æä¹åï¼è¯¥è°ç¨å°±ä¸è¿åã
弿¥ï¼å¨è°ç¨ååºåï¼è¢«è°ç¨è
è¿åç»æä¹åä¼éç¥è°ç¨è
ï¼æéè¿åè°å½æ°å¤çè¿ä¸ªè°ç¨ã
## é»å¡åéé»å¡çåºå«ï¼
é»å¡åéé»å¡å
³æ³¨çæ¯çº¿ç¨çç¶æã
é»å¡è°ç¨æ¯æè°ç¨ç»æè¿åä¹åï¼å½å线ç¨ä¼è¢«æèµ·ãè°ç¨çº¿ç¨åªæå¨å¾å°ç»æä¹åæä¼æ¢å¤è¿è¡ã
éé»å¡è°ç¨æå¨ä¸è½ç«å»å¾å°ç»æä¹åï¼è¯¥è°ç¨ä¸ä¼é»å¡å½å线ç¨ã
> 举个ä¾åï¼çè§£ä¸åæ¥ãé»å¡ã弿¥ãéé»å¡çåºå«ï¼
>
> 忥就æ¯ç§å¼æ°´ï¼è¦èªå·±æ¥ç弿²¡å¼ï¼å¼æ¥å°±æ¯æ°´å¼äºï¼ç¶å水壶åäºéç¥ä½ æ°´å¼äºï¼åè°éç¥ï¼ãé»å¡æ¯ç§å¼æ°´çè¿ç¨ä¸ï¼ä½ ä¸è½å¹²å
¶ä»äºæ
ï¼å¿
é¡»å¨æè¾¹ççï¼éé»å¡æ¯ç§å¼æ°´çè¿ç¨éå¯ä»¥å¹²å
¶ä»äºæ
ã
## Java8çæ°ç¹æ§æåªäºï¼
- Lambda 表达å¼ï¼Lambdaå
许æå½æ°ä½ä¸ºä¸ä¸ªæ¹æ³çåæ°
- Stream API ï¼æ°æ·»å çStream APIï¼java.util.streamï¼ æçæ£ç彿°å¼ç¼ç¨é£æ ¼å¼å
¥å°Javaä¸
- é»è®¤æ¹æ³ï¼é»è®¤æ¹æ³å°±æ¯ä¸ä¸ªå¨æ¥å£é颿äºä¸ä¸ªå®ç°çæ¹æ³ã
- Optional ç±» ï¼Optional ç±»å·²ç»æä¸º Java 8 ç±»åºçä¸é¨åï¼ç¨æ¥è§£å³ç©ºæéå¼å¸¸ã
- Date Time API ï¼å å¼ºå¯¹æ¥æä¸æ¶é´çå¤çã
> [Java8 æ°ç¹æ§æ»ç»](https://github.com/Tyson0314/Java-learning/blob/master/Java/Java8æ°ç¹æ§.md)
## åºåååååºåå
- åºååï¼æå¯¹è±¡è½¬æ¢ä¸ºåèåºåçè¿ç¨ç§°ä¸ºå¯¹è±¡çåºåå.
- ååºååï¼æåèåºåæ¢å¤ä¸ºå¯¹è±¡çè¿ç¨ç§°ä¸ºå¯¹è±¡çååºåå.
## ä»ä¹æ¶åéè¦ç¨å°åºåååååºååå¢?
彿们åªå¨æ¬å° JVM éè¿è¡ä¸ Java å®ä¾ï¼è¿ä¸ªæ¶åæ¯ä¸éè¦ä»ä¹åºåååååºååçï¼ä½å½æä»¬éè¦å°å
åä¸ç对象æä¹
åå°ç£çï¼æ°æ®åºä¸æ¶ï¼å½æä»¬éè¦ä¸æµè§å¨è¿è¡äº¤äºæ¶ï¼å½æä»¬éè¦å®ç° RPC æ¶ï¼è¿ä¸ªæ¶åå°±éè¦åºåååååºååäº.
å两个éè¦ç¨å°åºåååååºååçåºæ¯ï¼æ¯ä¸æ¯è®©æä»¬æä¸ä¸ªå¾å¤§ççé®? æä»¬å¨ä¸æµè§å¨äº¤äºæ¶ï¼è¿æå°å
åä¸ç对象æä¹
åå°æ°æ®åºä¸æ¶ï¼å¥½å齿²¡æå»è¿è¡åºåååååºååï¼å 为æä»¬é½æ²¡æå®ç° Serializable æ¥å£ï¼ä½ä¸ç´æ£å¸¸è¿è¡.
ä¸é¢å
ç»åºç»è®º:
**åªè¦æä»¬å¯¹å
åä¸ç对象è¿è¡æä¹
åæç½ç»ä¼ è¾ï¼è¿ä¸ªæ¶åé½éè¦åºåååååºåå.**
çç±:
æå¡å¨ä¸æµè§å¨äº¤äºæ¶ççæ²¡æç¨å° Serializable æ¥å£å? JSON æ ¼å¼å®é
ä¸å°±æ¯å°ä¸ä¸ªå¯¹è±¡è½¬å为åç¬¦ä¸²ï¼æä»¥æå¡å¨ä¸æµè§å¨äº¤äºæ¶çæ°æ®æ ¼å¼å
¶å®æ¯åç¬¦ä¸²ï¼æä»¬æ¥çæ¥ String ç±»åçæºç :
```
public final class String
implements java.io.Serializableï¼Comparableï¼CharSequence {
/\*\* The value is used for character storage. \*/
private final char value\[\];
/\*\* Cache the hash code for the string \*/
private int hash; // Default to 0
/\*\* use serialVersionUID from JDK 1.0.2 for interoperability \*/
private static final long serialVersionUID = -6849794470754667710L;
......
}
```
String ç±»åå®ç°äº Serializable æ¥å£ï¼å¹¶æ¾ç¤ºæå® serialVersionUID çå¼.
ç¶åæä»¬åæ¥ç对象æä¹
åå°æ°æ®åºä¸æ¶çæ
åµï¼Mybatis æ°æ®åºæ å°æä»¶éç insert 代ç :
```
INSERT INTO t\_user(nameï¼age) VALUES (#{name}ï¼#{age})
```
å®é
䏿们并䏿¯å°æ´ä¸ªå¯¹è±¡æä¹
åå°æ°æ®åºä¸ï¼èæ¯å°å¯¹è±¡ä¸ç屿§æä¹
åå°æ°æ®åºä¸ï¼èè¿äºå±æ§ï¼å¦Date/Stringï¼é½å®ç°äº Serializable æ¥å£ã
## å®ç°åºåååååºåå为ä»ä¹è¦å®ç° Serializable æ¥å£?
å¨ Java ä¸å®ç°äº Serializable æ¥å£åï¼ JVM å¨ç±»å è½½çæ¶åå°±ä¼åç°æä»¬å®ç°äºè¿ä¸ªæ¥å£ï¼ç¶åå¨åå§åå®ä¾å¯¹è±¡çæ¶åå°±ä¼å¨åºå±å¸®æä»¬å®ç°åºåååååºååã
å¦æè¢«å对象类å䏿¯Stringãæ°ç»ãEnumï¼å¹¶ä¸æ²¡æå®ç°Serializableæ¥å£ï¼é£ä¹å¨è¿è¡åºååçæ¶åï¼å°æåºNotSerializableExceptionãæºç å¦ä¸ï¼
```java
// remaining cases
if (obj instanceof String) {
writeString((String) obj, unshared);
} else if (cl.isArray()) {
writeArray(obj, desc, unshared);
} else if (obj instanceof Enum) {
writeEnum((Enum>) obj, desc, unshared);
} else if (obj instanceof Serializable) {
writeOrdinaryObject(obj, desc, unshared);
} else {
if (extendedDebugInfo) {
throw new NotSerializableException(
cl.getName() + "\n" + debugInfoStack.toString());
} else {
throw new NotSerializableException(cl.getName());
}
}
```
## å®ç° Serializable æ¥å£ä¹åï¼ä¸ºä»ä¹è¿è¦æ¾ç¤ºæå® serialVersionUID çå¼?
妿䏿¾ç¤ºæå® serialVersionUIDï¼JVM å¨åºå忶伿 ¹æ®å±æ§èªå¨çæä¸ä¸ª serialVersionUIDï¼ç¶åä¸å±æ§ä¸èµ·åºååï¼åè¿è¡æä¹
åæç½ç»ä¼ è¾. å¨ååºååæ¶ï¼JVM ä¼åæ ¹æ®å±æ§èªå¨çæä¸ä¸ªæ°ç serialVersionUIDï¼ç¶åå°è¿ä¸ªæ°ç serialVersionUID ä¸åºååæ¶çæçæ§ç serialVersionUID è¿è¡æ¯è¾ï¼å¦æç¸ååååºååæåï¼å¦åæ¥é.
妿æ¾ç¤ºæå®äº serialVersionUIDï¼JVM å¨åºåååååºååæ¶ä»ç¶é½ä¼çæä¸ä¸ª serialVersionUIDï¼ä½å¼ä¸ºæä»¬æ¾ç¤ºæå®çå¼ï¼è¿æ ·å¨ååºååæ¶æ°æ§çæ¬ç serialVersionUID å°±ä¸è´äº.
妿æä»¬çç±»åå®åä¸åä¿®æ¹ï¼é£ä¹ä¸æå®serialVersionUIDï¼ä¸ä¼æé®é¢ï¼ä½è¿å¨å®é
å¼å䏿¯ä¸å¯è½çï¼æä»¬çç±»ä¼ä¸æè¿ä»£ï¼ä¸æ¦ç±»è¢«ä¿®æ¹äºï¼é£æ§å¯¹è±¡ååºåå就伿¥éã æä»¥å¨å®é
å¼åä¸ï¼æä»¬é½ä¼æ¾ç¤ºæå®ä¸ä¸ª serialVersionUIDã
## static 屿§ä¸ºä»ä¹ä¸ä¼è¢«åºåå?
å 为åºå忝é对对象èè¨çï¼è static 屿§ä¼å
äºå¯¹è±¡åå¨ï¼éçç±»çå è½½èå è½½ï¼æä»¥ä¸ä¼è¢«åºåå.
çå°è¿ä¸ªç»è®ºï¼æ¯ä¸æ¯æäººä¼é®ï¼serialVersionUID ä¹è¢« static 修饰ï¼ä¸ºä»ä¹ serialVersionUID ä¼è¢«åºåå? å
¶å® serialVersionUID 屿§å¹¶æ²¡æè¢«åºååï¼JVM å¨åºåå对象æ¶ä¼èªå¨çæä¸ä¸ª serialVersionUIDï¼ç¶å尿们æ¾ç¤ºæå®ç serialVersionUID 屿§å¼èµç»èªå¨çæç serialVersionUID.
## transientå
³é®åçä½ç¨ï¼
Javaè¯è¨çå
³é®åï¼åé修饰符ï¼å¦æç¨transient声æä¸ä¸ªå®ä¾åéï¼å½å¯¹è±¡å卿¶ï¼å®çå¼ä¸éè¦ç»´æã
ä¹å°±æ¯è¯´è¢«transient修饰çæååéï¼å¨åºååçæ¶åå
¶å¼ä¼è¢«å¿½ç¥ï¼å¨è¢«ååºåååï¼ transient åéçå¼è¢«è®¾ä¸ºåå§å¼ï¼ å¦ int åçæ¯ 0ï¼å¯¹è±¡åçæ¯ nullã
## ä»ä¹æ¯åå°ï¼
卿è·åçä¿¡æ¯ä»¥å卿è°ç¨å¯¹è±¡çæ¹æ³çåè½ç§°ä¸ºJavaè¯è¨çåå°æºå¶ã
å¨è¿è¡ç¶æä¸ï¼å¯¹äºä»»æä¸ä¸ªç±»ï¼è½å¤ç¥éè¿ä¸ªç±»çææå±æ§åæ¹æ³ã对äºä»»æä¸ä¸ªå¯¹è±¡ï¼è½å¤è°ç¨å®çä»»æä¸ä¸ªæ¹æ³å屿§ã
## åå°æåªäºåºç¨åºæ¯å¢ï¼
1. JDBCè¿æ¥æ°æ®åºæ¶ä½¿ç¨`Class.forName()`éè¿åå°å è½½æ°æ®åºç驱å¨ç¨åº
2. EclispeãIDEAçå¼åå·¥å
·å©ç¨åå°å¨æè§£æå¯¹è±¡çç±»åä¸ç»æï¼å¨ææç¤ºå¯¹è±¡ç屿§åæ¹æ³
3. Webæå¡å¨ä¸å©ç¨åå°è°ç¨äºSevletç`service`æ¹æ³
4. JDK卿代çåºå±ä¾èµåå°å®ç°
## 讲讲ä»ä¹æ¯æ³åï¼
Javaæ³åæ¯JDK 5ä¸å¼â¼çâ¼ä¸ªæ°ç¹æ§ï¼ å
许å¨å®ä¹ç±»åæ¥å£çæ¶å使⽤类ååæ°ã声æçç±»ååæ°å¨ä½¿â½¤æ¶â½¤å
·ä½çç±»åæ¥æ¿æ¢ã
æ³åæâ¼¤ç好夿¯å¯ä»¥æâ¾¼ä»£ç çå¤â½¤æ§ã以Listæ¥å£ä¸ºä¾ï¼æä»¬å¯ä»¥å°Stringã Integerçç±»åæ¾â¼Listä¸ï¼ å¦ä¸â½¤æ³åï¼ åæ¾Stringç±»åè¦åâ¼ä¸ªListæ¥å£ï¼ åæ¾Integerè¦åå¦å¤â¼ä¸ªListæ¥å£ï¼ æ³åå¯ä»¥å¾å¥½çè§£å³è¿ä¸ªé®é¢ã
## å¦ä½åæ¢ä¸ä¸ªæ£å¨è¿è¡ç线ç¨ï¼
æå ç§æ¹å¼ã
1ã**使ç¨çº¿ç¨çstopæ¹æ³**ã
使ç¨stop()æ¹æ³å¯ä»¥å¼ºå¶ç»æ¢çº¿ç¨ãä¸è¿stopæ¯ä¸ä¸ªè¢«åºå¼æçæ¹æ³ï¼ä¸æ¨è使ç¨ã
使ç¨Stopæ¹æ³ï¼ä¼ä¸ç´åä¸ä¼ æThreadDeathå¼å¸¸ï¼ä»è使å¾ç®æ 线ç¨è§£éææéä½ççè§å¨ï¼å³éæ¾æææç对象éã使å¾ä¹å被éä½ç对象å¾ä¸å°åæ¥çå¤çï¼å æ¤å¯è½ä¼é ææ°æ®ä¸ä¸è´çé®é¢ã
2ã**使ç¨interruptæ¹æ³ä¸æçº¿ç¨**ï¼è¯¥æ¹æ³åªæ¯åè¯çº¿ç¨è¦ç»æ¢ï¼ä½æç»ä½æ¶ç»æ¢åå³äºè®¡ç®æºãè°ç¨interruptæ¹æ³ä»
ä»
æ¯å¨å½å线ç¨ä¸æäºä¸ä¸ªåæ¢çæ è®°ï¼å¹¶ä¸æ¯ççåæ¢çº¿ç¨ã
æ¥çè°ç¨ Thread.currentThread().isInterrupted()æ¹æ³ï¼å¯ä»¥ç¨æ¥å¤æå½åçº¿ç¨æ¯å¦è¢«ç»æ¢ï¼éè¿è¿ä¸ªå¤ææä»¬å¯ä»¥åä¸äºä¸å¡é»è¾å¤çï¼é叏妿isInterruptedè¿åtrueçè¯ï¼ä¼æä¸ä¸ªä¸æå¼å¸¸ï¼ç¶åéè¿try-catchæè·ã
3ã**设置æ å¿ä½**
设置æ å¿ä½ï¼å½æ è¯ä½ä¸ºæä¸ªå¼æ¶ï¼ä½¿çº¿ç¨æ£å¸¸éåºã设置æ å¿ä½æ¯ç¨å°äºå
±äº«åéçæ¹å¼ï¼ä¸ºäºä¿è¯å
±äº«åéå¨å
åä¸çå¯è§æ§ï¼å¯ä»¥ä½¿ç¨volatile修饰å®ï¼è¿æ ·çè¯ï¼åéåå¼å§ç»ä¼ä»ä¸»åä¸è·åææ°å¼ã
使¯è¿ç§volatileæ è®°å
±äº«åéçæ¹å¼ï¼å¨çº¿ç¨åçé»å¡æ¶æ¯æ æ³å®æååºçãæ¯å¦è°ç¨Thread.sleep() æ¹æ³ä¹åï¼çº¿ç¨å¤äºä¸å¯è¿è¡ç¶æï¼å³ä¾¿æ¯ä¸»çº¿ç¨ä¿®æ¹äºå
±äº«åéçå¼ï¼è¯¥çº¿ç¨æ¤æ¶æ ¹æ¬æ æ³æ£æ¥å¾ªç¯æ å¿ï¼æä»¥ä¹å°±æ æ³å®ç°çº¿ç¨ä¸æã
å æ¤ï¼interrupt() å 䏿卿å¼å¸¸çæ¹å¼æ¯ç®å䏿ä¸ä¸ªæ£å¨è¿è¡ç线ç¨**æä¸ºæ£ç¡®**çæ¹å¼äºã
## ä»ä¹æ¯è·¨åï¼
ç®åæ¥è®²ï¼è·¨åæ¯æä»ä¸ä¸ªååçç½é¡µå»è¯·æ±å¦ä¸ä¸ªååçèµæºãç±äºæ**åæºçç¥**çå
³ç³»ï¼ä¸è¬æ¯ä¸å
许è¿ä¹ç´æ¥è®¿é®çã使¯ï¼å¾å¤åºæ¯ç»å¸¸ä¼æè·¨å访é®çéæ±ï¼æ¯å¦ï¼å¨åå端åç¦»çæ¨¡å¼ä¸ï¼åå端çå忝ä¸ä¸è´çï¼æ¤æ¶å°±ä¼åçè·¨åé®é¢ã
**é£ä»ä¹æ¯åæºçç¥å¢**ï¼
æè°åæºæ¯æ"åè®®+åå+端å£"ä¸è
ç¸åï¼å³ä¾¿ä¸¤ä¸ªä¸åçååæååä¸ä¸ªipå°åï¼ä¹éåæºã
åæºçç¥éå¶ä»¥ä¸å ç§è¡ä¸ºï¼
```mipsasm
1. CookieãLocalStorage å IndexDB æ æ³è¯»å
2. DOM å Jså¯¹è±¡æ æ³è·å¾
3. AJAX 请æ±ä¸è½åé
```
**为ä»ä¹è¦æåæºçç¥**ï¼
举个ä¾åï¼åå¦ä½ ååå¨ç½é¶è¾å
¥è´¦å·å¯ç ï¼æ¥çäºèªå·±çä½é¢ï¼ç¶ååå»è®¿é®å
¶ä»å¸¦é¢è²çç½ç«ï¼è¿ä¸ªç½ç«å¯ä»¥è®¿é®ååçç½é¶ç«ç¹ï¼å¹¶ä¸è·åè´¦å·å¯ç ï¼é£åæå¯æ³èç¥ãå æ¤ï¼ä»å®å
¨çè§åº¦æ¥è®²ï¼åæºçç¥æ¯æå©äºä¿æ¤ç½ç«ä¿¡æ¯çã
## è·¨åé®é¢æä¹è§£å³å¢ï¼
å¯ï¼æä»¥ä¸å ç§æ¹æ³ï¼
**CORS**ï¼è·¨åèµæºå
񄧮
CORSï¼Cross-origin resource sharingï¼ï¼è·¨åèµæºå
±äº«ãCORS å
¶å®æ¯æµè§å¨å¶å®çä¸ä¸ªè§èï¼æµè§å¨ä¼èªå¨è¿è¡ CORS éä¿¡ï¼å®çå®ç°ä¸»è¦å¨æå¡ç«¯ï¼éè¿ä¸äº HTTP Header æ¥éå¶å¯ä»¥è®¿é®çåï¼ä¾å¦é¡µé¢ A éè¦è®¿é® B æå¡å¨ä¸çæ°æ®ï¼å¦æ B æå¡å¨ ä¸å£°æäºå
许 A çåå访é®ï¼é£ä¹ä» A å° B çè·¨å请æ±å°±å¯ä»¥å®æã
**@CrossOrigin注解**
妿项ç®ä½¿ç¨çæ¯Springbootï¼å¯ä»¥å¨Controllerç±»ä¸æ·»å ä¸ä¸ª @CrossOrigin(origins ="*") 注解就å¯ä»¥å®ç°å¯¹å½åcontroller çè·¨å访é®äºï¼å½ç¶è¿ä¸ªæ ç¾ä¹å¯ä»¥å å°æ¹æ³ä¸ï¼æè
ç´æ¥å å°å
¥å£ç±»ä¸å¯¹æææ¥å£è¿è¡è·¨åå¤çãæ³¨æSpringMVCççæ¬è¦å¨4.2æä»¥ä¸çæ¬ææ¯æ@CrossOriginã
**nginxååä»£çæ¥å£è·¨å**
nginxåå代çè·¨ååçå¦ä¸ï¼ é¦å
åæºçç¥æ¯æµè§å¨çå®å
¨çç¥ï¼ä¸æ¯HTTPåè®®çä¸é¨åãæå¡å¨ç«¯è°ç¨HTTPæ¥å£åªæ¯ä½¿ç¨HTTPåè®®ï¼ä¸ä¼æ§è¡JSèæ¬ï¼ä¸éè¦åæºçç¥ï¼ä¹å°±ä¸åå¨è·¨è¶é®é¢ã
nginxååä»£çæ¥å£è·¨åå®ç°æè·¯å¦ä¸ï¼éè¿nginxé
ç½®ä¸ä¸ªä»£çæå¡å¨ï¼ååä¸domain1ç¸åï¼ç«¯å£ä¸åï¼åè·³æ¿æºï¼åå代ç访é®domain2æ¥å£ï¼å¹¶ä¸å¯ä»¥é¡ºä¾¿ä¿®æ¹cookieä¸domainä¿¡æ¯ï¼æ¹ä¾¿å½ååcookieåå
¥ï¼å®ç°è·¨åç»å½ã
```js
// proxyæå¡å¨
server {
listen 81;
server_name www.domain1.com;
location / {
proxy_pass http://www.domain2.com:8080; #åå代ç
proxy_cookie_domain www.domain2.com www.domain1.com; #ä¿®æ¹cookieéåå
index index.html index.htm;
add_header Access-Control-Allow-Origin http://www.domain1.com;
}
}
```
è¿æ ·æä»¬çå端代çåªè¦è®¿é® http:www.domain1.com:81/*å°±å¯ä»¥äºã
**éè¿jsonpè·¨å**
é常为äºåè½»webæå¡å¨çè´è½½ï¼æä»¬æjsãcssï¼imgçéæèµæºå离å°å¦ä¸å°ç¬ç«ååçæå¡å¨ä¸ï¼å¨html页é¢ä¸åéè¿ç¸åºçæ ç¾ä»ä¸åååä¸å è½½éæèµæºï¼è¿æ¯æµè§å¨å
许çæä½ï¼åºäºæ¤åçï¼æä»¬å¯ä»¥éè¿å¨æå建scriptï¼å请æ±ä¸ä¸ªå¸¦åç½åå®ç°è·¨åéä¿¡ã
## 设计æ¥å£è¦æ³¨æä»ä¹?
1. **æ¥å£åæ°æ ¡éª**ãæ¥å£å¿
é¡»æ ¡éªåæ°ï¼æ¯å¦å
¥åæ¯å¦å
许为空ï¼å
¥åé¿åº¦æ¯å¦ç¬¦å颿ã
2. 设计æ¥å£æ¶ï¼å
åèèæ¥å£ç**坿©å±æ§**ãæèæ¥å£æ¯å¦å¯ä»¥å¤ç¨ï¼ææ ·ä¿ææ¥å£ç坿©å±æ§ã
3. **串è¡è°ç¨èèæ¹å¹¶è¡è°ç¨**ãæ¯å¦è®¾è®¡ä¸ä¸ªååé¦é¡µæ¥å£ï¼éè¦æ¥ååä¿¡æ¯ãè¥éä¿¡æ¯ãç¨æ·ä¿¡æ¯ççã妿æ¯ä¸²è¡ä¸ä¸ªä¸ä¸ªæ¥ï¼é£èæ¶å°±æ¯è¾å¤§äºãè¿ç§åºæ¯æ¯å¯ä»¥æ¹ä¸ºå¹¶è¡è°ç¨çï¼é使¥å£èæ¶ã
4. æ¥å£æ¯å¦éè¦**é²é**å¤çãæ¶åå°æ°æ®åºä¿®æ¹çï¼è¦èèé²éå¤çï¼å¯ä»¥ä½¿ç¨æ°æ®åºé²é表ï¼ä»¥å¯ä¸æµæ°´å·ä½ä¸ºå¯ä¸ç´¢å¼ã
5. **æ¥å¿æå°å
¨é¢**ï¼å
¥ååºåï¼æ¥å£èæ¶ï¼è®°å½å¥½æ¥å¿ï¼æ¹ä¾¿ç©é
ã
6. ä¿®æ¹æ§æ¥å£æ¶ï¼æ³¨æ**å
¼å®¹æ§è®¾è®¡**ã
7. **å¼å¸¸å¤çå¾å½**ã使ç¨finallyå
³éæµèµæºã使ç¨logæå°è䏿¯e.printStackTrace()ãä¸è¦åå¼å¸¸çç
8. æ¯å¦éè¦èè**éæµ**ãéæµä¸ºäºä¿æ¤ç³»ç»ï¼é²æ¢æµé洪峰è¶
è¿ç³»ç»çæ¿è½½è½åã
## è¿æ»¤å¨åæ¦æªå¨æä»ä¹åºå«ï¼
1ã**å®ç°åçä¸å**ã
è¿æ»¤å¨åæ¦æªå¨åºå±å®ç°ä¸åãè¿æ»¤å¨æ¯åºäºå½æ°åè°çï¼æ¦æªå¨æ¯åºäºJavaçåå°æºå¶ï¼å¨æä»£çï¼å®ç°çãä¸è¬èªå®ä¹çè¿æ»¤å¨ä¸é½ä¼å®ç°ä¸ä¸ªdoFilter()æ¹æ³ï¼è¿ä¸ªæ¹æ³æä¸ä¸ªFilterChainåæ°ï¼èå®é
ä¸å®æ¯ä¸ä¸ªåè°æ¥å£ã
2ã**è§¦åæ¶æºä¸å**ã
è¿æ»¤å¨Filteræ¯å¨è¯·æ±è¿å
¥å®¹å¨åï¼ä½å¨è¿å
¥servletä¹åè¿è¡é¢å¤çï¼è¯·æ±ç»ææ¯å¨servletå¤çå®ä»¥åã
æ¦æªå¨ Interceptor æ¯å¨è¯·æ±è¿å
¥servletåï¼å¨è¿å
¥Controllerä¹åè¿è¡é¢å¤ççï¼Controller 䏿¸²æäºå¯¹åºçè§å¾ä¹å请æ±ç»æã

3ã**使ç¨çåºæ¯ä¸å**ã
å ä¸ºæ¦æªå¨æ´æ¥è¿ä¸å¡ç³»ç»ï¼æä»¥æ¦æªå¨ä¸»è¦ç¨æ¥å®ç°é¡¹ç®ä¸çä¸å¡å¤æçï¼æ¯å¦ï¼æ¥å¿è®°å½ãæé夿çä¸å¡ãèè¿æ»¤å¨é常æ¯ç¨æ¥å®ç°éç¨åè½è¿æ»¤çï¼æ¯å¦ï¼ææè¯è¿æ»¤ãååºæ°æ®å缩çåè½ã
4ã**æ¦æªç请æ±èå´ä¸å**ã
请æ±çæ§è¡é¡ºåºæ¯ï¼è¯·æ±è¿å
¥å®¹å¨ -> è¿å
¥è¿æ»¤å¨ -> è¿å
¥ Servlet -> è¿å
¥æ¦æªå¨ -> æ§è¡æ§å¶å¨ãå¯ä»¥çå°è¿æ»¤å¨åæ¦æªå¨çæ§è¡æ¶æºä¹æ¯ä¸åçï¼è¿æ»¤å¨ä¼å
æ§è¡ï¼ç¶åæä¼æ§è¡æ¦æªå¨ï¼æåæä¼è¿å
¥çæ£çè¦è°ç¨çæ¹æ³ã
> åè龿¥ï¼https://segmentfault.com/a/1190000022833940
## 对æ¥ç¬¬ä¸æ¹æ¥å£è¦èèä»ä¹ï¼
å¯ï¼éè¦èè以ä¸å ç¹ï¼
1. 确认æ¥å£å¯¹æ¥ç**ç½ç»åè®®**ï¼æ¯https/httpæè
èªå®ä¹çç§æåè®®çã
2. 约å®å¥½**æ°æ®ä¼ åãååºæ ¼å¼**ï¼å¦application/jsonï¼ï¼å¼±ç±»å对æ¥å¼ºç±»åè¯è¨æ¶è¦ç¹å«æ³¨æ
3. **æ¥å£å®å
¨**æ¹é¢ï¼è¦ç¡®å®èº«ä»½æ ¡éªæ¹å¼ï¼ä½¿ç¨tokenãè¯ä¹¦æ ¡éªç
4. 确认æ¯å¦éè¦æ¥å£è°ç¨å¤±è´¥åç**éè¯**æºå¶ï¼ä¿è¯æ°æ®ä¼ è¾çæç»ä¸è´æ§ã
5. **æ¥å¿è®°å½è¦å
¨é¢**ãæ¥å£åºå
¥åæ°ï¼ä»¥åè§£æä¹åçåæ°å¼ï¼é½è¦ç¨æ¥å¿è®°å½ä¸æ¥ï¼æ¹ä¾¿å®ä½é®é¢ï¼ç©é
ï¼ã
åèï¼https://blog.csdn.net/gzt19881123/article/details/108791034
## å端æ¥å£æ§è½ä¼åæåªäºæ¹æ³ï¼
æä»¥ä¸è¿äºæ¹æ³ï¼
1ã**ä¼åç´¢å¼**ãç»whereæ¡ä»¶çå
³é®åæ®µï¼æè
`order by`åé¢çæåºå段ï¼å ç´¢å¼ã
2ã**ä¼åsqlè¯å¥**ãæ¯å¦é¿å
使ç¨select *ãæ¹éæä½ãé¿å
æ·±å页ãæågroup byçæçç
3ã**é¿å
大äºå¡**ã使ç¨@Transactional注解è¿ç§å£°æå¼äºå¡çæ¹å¼æä¾äºå¡åè½ï¼å®¹æé æå¤§äºå¡ï¼å¼åå
¶ä»çé®é¢ãåºè¯¥é¿å
å¨äºå¡ä¸ä¸æ¬¡æ§å¤çå¤ªå¤æ°æ®ï¼å°ä¸äºè·äºå¡æ å
³çé»è¾æ¾å°äºå¡å¤é¢æ§è¡ã
4ã**弿¥å¤ç**ãå¥ç¦»ä¸»é»è¾åå¯é»è¾ï¼å¯é»è¾å¯ä»¥å¼æ¥æ§è¡ï¼å¼æ¥ååºãæ¯å¦ç¨æ·è´ä¹°çåååè´§äºï¼éè¦åçä¿¡éç¥ï¼çä¿¡éç¥æ¯å¯æµç¨ï¼å¯ä»¥å¼æ¥æ§è¡ï¼ä»¥å
å½±å主æµç¨çæ§è¡ã
5ã**éä½éç²åº¦**ãå¨å¹¶ååºæ¯ä¸ï¼å¤ä¸ªçº¿ç¨åæ¶ä¿®æ¹æ°æ®ï¼é ææ°æ®ä¸ä¸è´çæ
åµãè¿ç§æ
åµä¸ï¼ä¸è¬ä¼å éè§£å³ãä½å¦æéå å¾ä¸å¥½ï¼å¯¼è´éçç²åº¦å¤ªç²ï¼ä¹ä¼é叏影忥壿§è½ã
6ã**å ç¼å**ãå¦æè¡¨æ°æ®éé常大çè¯ï¼ç´æ¥ä»æ°æ®åºæ¥è¯¢æ°æ®ï¼æ§è½ä¼é常差ãå¯ä»¥ä½¿ç¨Redis`å`memcachedæåæ¥è¯¢æ§è½ï¼ä»èæé«æ¥å£æ§è½ã
7ã**ååºå表**ãå½ç³»ç»åå±å°ä¸å®çé¶æ®µï¼ç¨æ·å¹¶åé大ï¼ä¼æå¤§éçæ°æ®åºè¯·æ±ï¼éè¦å ç¨å¤§éçæ°æ®åºè¿æ¥ï¼åæ¶ä¼å¸¦æ¥ç£çIOçæ§è½ç¶é¢é®é¢ãæè
æ°æ®åºè¡¨æ°æ®é常大ï¼SQLæ¥è¯¢å³ä½¿èµ°äºç´¢å¼ï¼ä¹å¾èæ¶ãè¿æ¶ï¼å¯ä»¥éè¿ååºå表解å³ãååºç¨äºè§£å³æ°æ®åºè¿æ¥èµæºä¸è¶³é®é¢ï¼åç£çIOçæ§è½ç¶é¢é®é¢ãå表ç¨äºè§£å³åè¡¨æ°æ®é太大ï¼sqlè¯å¥æ¥è¯¢æ°æ®æ¶ï¼å³ä½¿èµ°äºç´¢å¼ä¹éå¸¸èæ¶é®é¢ã
8ã**é¿å
å¨å¾ªç¯ä¸æ¥è¯¢æ°æ®åº**ãå¾ªç¯æ¥è¯¢æ°æ®åºï¼éå¸¸èæ¶ï¼æå¥½è½å¨ä¸æ¬¡æ¥è¯¢ä¸è·åææéè¦çæ°æ®ã
## 为ä»ä¹å¨é¿éå·´å·´Javaå¼åæåä¸å¼ºå¶è¦æ±ä½¿ç¨å
è£
ç±»åå®ä¹å±æ§å¢ï¼
å¯ï¼ä»¥å¸å°å段为ä¾ï¼å½æä»¬æ²¡æè®¾ç½®å¯¹è±¡çåæ®µçå¼çæ¶åï¼Booleanç±»åçåéä¼è®¾ç½®é»è®¤å¼ä¸º`null`ï¼èbooleanç±»åçåéä¼è®¾ç½®é»è®¤å¼ä¸º`false`ã
ä¹å°±æ¯è¯´ï¼å
è£
ç±»åçé»è®¤å¼é½æ¯nullï¼èåºæ¬æ°æ®ç±»åçé»è®¤å¼æ¯ä¸ä¸ªåºå®å¼ï¼å¦booleanæ¯falseï¼byteãshortãintãlongæ¯0ï¼floatæ¯0.0fçã
举ä¸ä¸ªä¾åï¼æ¯å¦æä¸ä¸ªæ£è´¹ç³»ç»ï¼æ£è´¹æ¶éè¦ä»å¤é¨çå®ä»·ç³»ç»ä¸è¯»åä¸ä¸ªè´¹ççå¼ï¼æä»¬é¢æè¯¥æ¥å£çè¿åå¼ä¸ä¼å
å«ä¸ä¸ªæµ®ç¹åçè´¹çåæ®µã彿们åå°è¿ä¸ªå¼å¾æ¶å就使ç¨å
¬å¼ï¼éé¢*è´¹ç=è´¹ç¨ è¿è¡è®¡ç®ï¼è®¡ç®ç»æè¿è¡åæ£ã
妿ç±äºè®¡è´¹ç³»ç»å¼å¸¸ï¼ä»å¯è½ä¼è¿å个é»è®¤å¼ï¼å¦æè¿ä¸ªå段æ¯Doubleç±»åçè¯ï¼è¯¥é»è®¤å¼ä¸ºnullï¼å¦æè¯¥å段æ¯doubleç±»åçè¯ï¼è¯¥é»è®¤å¼ä¸º0.0ã
妿æ£è´¹ç³»ç»å¯¹äºè¯¥è´¹çè¿å弿²¡åç¹æ®å¤ççè¯ï¼æ¿å°nullå¼è¿è¡è®¡ç®ä¼ç´æ¥æ¥éï¼é»æç¨åºãæ¿å°0.0å¯è½å°±ç´æ¥è¿è¡è®¡ç®ï¼å¾åºæ¥å£ä¸º0åè¿è¡æ£è´¹äºãè¿ç§å¼å¸¸æ
åµå°±æ æ³è¢«æç¥ã
**飿å¯ä»¥å¯¹0.0åç¹æ®å¤æï¼å¦ææ¯0就黿æ¥éï¼è¿æ ·æ¯å¦å¯ä»¥å¢ï¼**
ä¸å¯¹ï¼è¿æ¶åå°±ä¼äº§çä¸ä¸ªé®é¢ï¼å¦æå
è®¸è´¹çæ¯0çåºæ¯åæä¹å¤çå¢ï¼
使ç¨åºæ¬æ°æ®ç±»ååªä¼è®©æ¹æ¡è¶æ¥è¶å¤æï¼åè¶æ¥è¶å¤ã
è¿ç§ä½¿ç¨å
è£
ç±»åå®ä¹åéçæ¹å¼ï¼éè¿å¼å¸¸æ¥é»æç¨åºï¼è¿èå¯ä»¥è¢«è¯å«å°è¿ç§çº¿ä¸é®é¢ãå¦æä½¿ç¨åºæ¬æ°æ®ç±»åçè¯ï¼ç³»ç»å¯è½ä¸ä¼æ¥éï¼è¿è认为æ å¼å¸¸ã
å æ¤ï¼å»ºè®®å¨POJOåRPCçè¿åå¼ä¸ä½¿ç¨å
è£
ç±»åã
> åè龿¥ï¼https://mp.weixin.qq.com/s/O_jCxZWtTTkFZ9FlaZgOCg
## 8æè®©æ¥å£æ§è½æå100å
**æ± åææ³**
å¦æä½ æ¯æ¬¡éè¦ç¨å°çº¿ç¨ï¼é½å»å建ï¼å°±ä¼æå¢å ä¸å®çèæ¶ï¼èçº¿ç¨æ± å¯ä»¥éå¤å©ç¨çº¿ç¨ï¼é¿å
ä¸å¿
è¦çèæ¶ã
æ¯å¦`TCP`䏿¬¡æ¡æï¼å®ä¸ºäºåå°æ§è½æèï¼å¼å
¥äº`Keep-Aliveé¿è¿æ¥`ï¼é¿å
é¢ç¹çå建åéæ¯è¿æ¥ã
**æç»é»å¡çå¾
**
å¦æä½ è°ç¨ä¸ä¸ªç³»ç»`B`çæ¥å£ï¼ä½æ¯å®å¤çä¸å¡é»è¾ï¼èæ¶éè¦`10s`çè³æ´å¤ãç¶åä½ æ¯ä¸ç´**é»å¡çå¾
ï¼ç´å°ç³»ç»Bç䏿¸¸æ¥å£è¿å**ï¼åç»§ç»ä½ çä¸ä¸æ¥æä½åï¼è¿æ ·**æ¾ç¶ä¸åç**ã
åè**IOå¤è·¯å¤ç¨æ¨¡å**ã峿们ä¸ç¨é»å¡çå¾
ç³»ç»`B`çæ¥å£ï¼èæ¯å
å»åå«çæä½ãçç³»ç»`B`çæ¥å£å¤çå®ï¼éè¿**äºä»¶åè°**éç¥ï¼æä»¬æ¥å£æ¶å°éç¥åè¿è¡å¯¹åºçä¸å¡æä½å³å¯ã
**è¿ç¨è°ç¨ç±ä¸²è¡æ¹ä¸ºå¹¶è¡**
æ¯å¦è®¾è®¡ä¸ä¸ªååé¦é¡µæ¥å£ï¼éè¦æ¥ååä¿¡æ¯ãè¥éä¿¡æ¯ãç¨æ·ä¿¡æ¯ççã妿æ¯ä¸²è¡ä¸ä¸ªä¸ä¸ªæ¥ï¼é£èæ¶å°±æ¯è¾å¤§äºãè¿ç§åºæ¯æ¯å¯ä»¥æ¹ä¸ºå¹¶è¡è°ç¨çï¼é使¥å£èæ¶ã
**éç²åº¦é¿å
è¿ç²**
å¨é«å¹¶ååºæ¯ï¼ä¸ºäºé²æ¢**è¶
åçæ
åµ**ï¼æä»¬ç»å¸¸éè¦**å éæ¥ä¿æ¤å
±äº«èµæº**ã使¯ï¼å¦æå éçç²åº¦è¿ç²ï¼æ¯å¾å½±åæ¥å£æ§è½çã
ä¸ç®¡ä½ æ¯`synchronized`å éè¿æ¯`redis`åå¸å¼éï¼åªéè¦å¨å
±äº«ä¸´çèµæºå éå³å¯ï¼ä¸æ¶åå
±äº«èµæºçï¼å°±ä¸å¿
è¦å éã
**èæ¶æä½ï¼èèæ¾å°å¼æ¥æ§è¡**
èæ¶æä½ï¼èèç¨**弿¥å¤ç**ï¼è¿æ ·å¯ä»¥é使¥å£èæ¶ãæ¯å¦ç¨æ·æ³¨åæååï¼çä¿¡é®ä»¶éç¥ï¼æ¯å¯ä»¥å¼æ¥å¤ççã
**使ç¨ç¼å**
æè¦æ¥çæ°æ®ï¼æåæ¾å¥½å°ç¼åéé¢ï¼éè¦æ¶ï¼**ç´æ¥æ¥ç¼åï¼èé¿å
廿¥æ°æ®åºæè
计ç®çè¿ç¨**ã
**æååå§åå°ç¼å**
é¢åææ³å¾å®¹æçè§£ï¼å°±æ¯**æåæè¦è®¡ç®æ¥è¯¢çæ°æ®ï¼åå§åå°ç¼å**ãå¦æä½ å¨æªæ¥æä¸ªæ¶é´éè¦ç¨å°æä¸ªç»è¿å¤æè®¡ç®çæ°æ®ï¼**æå®æ¶å»è®¡ç®çè¯ï¼å¯è½èæ¶æ¯è¾å¤§**ãè¿æ¶åï¼æä»¬å¯ä»¥éåé¢åææ³ï¼**æåæå°æ¥å¯è½éè¦çæ°æ®è®¡ç®å¥½ï¼æ¾å°ç¼åä¸**ï¼çéè¦çæ¶åï¼å»ç¼ååå°±è¡ãè¿å°å¤§å¹
度æé«æ¥å£æ§è½ã
**åç¼©ä¼ è¾å
容**
åç¼©ä¼ è¾å
容ï¼ä¼ è¾æ¥æå徿´å°ï¼å æ¤ä¼ è¾ä¼æ´å¿«ã
> åèï¼https://juejin.cn/post/7167153109158854687
æåç»å¤§å®¶å享**200夿¬è®¡ç®æºç»å
¸ä¹¦ç±PDFçµå书**ï¼å
æ¬**Cè¯è¨ãC++ãJavaãPythonãåç«¯ãæ°æ®åºãæä½ç³»ç»ãè®¡ç®æºç½ç»ãæ°æ®ç»æåç®æ³ãæºå¨å¦ä¹ ãç¼ç¨äººç**çï¼æå
´è¶£çå°ä¼ä¼´å¯ä»¥èªåï¼


**200夿¬è®¡ç®æºç»å
¸ä¹¦ç±PDFçµå书**ï¼https://pan.xunlei.com/s/VNlmlh9jBl42w0QH2l4AJaWGA1?pwd=j8eq#
å¤ç¨é¾æ¥ï¼https://pan.quark.cn/s/3f1321952a16
