Javaåºç¡å¸¸è§é¢è¯é¢æ»ç»
è¿æ¯ä¸åæè®¸å¯¹ä½ æå¸®å©çä¿¡æ¯
- é¢è¯æåï¼è¿æ¯ä¸ä»½å¤§å½¬ç²¾å¿æ´çç大åé¢è¯æåææ°çï¼ç®åå·²ç»æ´æ°è¿ä»£äº19ä¸ªçæ¬ï¼è´¨éå¾é«ï¼ä¸ä¸ºé¢è¯æé ï¼
- ç¥è¯æçï¼ä¸å±é¢è¯æå/ä¸å¯¹ä¸äº¤æµ/ç®åä¿®æ¹/è¶ æ£çå¦ä¹ æ°å´/å¦ä¹ 路线è§åï¼æ¬¢è¿å å ¥å¤§å½¬çç¥è¯æçï¼ç¹å»é¾æ¥æ¥çæçç详ç»ä»ç»ï¼
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~
éè¦çå°ä¼ä¼´å¯ä»¥èªè¡ä¸è½½ï¼
Javaç¨åºæ¯ç¼è¯æ§è¡è¿æ¯è§£éæ§è¡ï¼
å ççä»ä¹æ¯ç¼è¯åè¯è¨åè§£éåè¯è¨ã
ç¼è¯åè¯è¨
å¨ç¨åºè¿è¡ä¹åï¼éè¿ç¼è¯å¨å°æºç¨åºç¼è¯ææºå¨ç å¯è¿è¡çäºè¿å¶ï¼ä»¥åæ§è¡è¿ä¸ªç¨åºæ¶ï¼å°±ä¸ç¨åè¿è¡ç¼è¯äºã
ä¼ç¹ï¼ç¼è¯å¨ä¸è¬ä¼æé¢ç¼è¯çè¿ç¨å¯¹ä»£ç è¿è¡ä¼åãå 为ç¼è¯åªå䏿¬¡ï¼è¿è¡æ¶ä¸éè¦ç¼è¯ï¼æä»¥ç¼è¯åè¯è¨çç¨åºæ§è¡æçé«ï¼å¯ä»¥è±ç¦»è¯è¨ç¯å¢ç¬ç«è¿è¡ã
缺ç¹ï¼ç¼è¯ä¹å妿éè¦ä¿®æ¹å°±éè¦æ´ä¸ªæ¨¡åéæ°ç¼è¯ãç¼è¯çæ¶åæ ¹æ®å¯¹åºçè¿è¡ç¯å¢çææºå¨ç ï¼ä¸åçæä½ç³»ç»ä¹é´ç§»æ¤å°±ä¼æé®é¢ï¼éè¦æ ¹æ®è¿è¡çæä½ç³»ç»ç¯å¢ç¼è¯ä¸åç坿§è¡æä»¶ã
æ»ç»ï¼æ§è¡é度快ãæçé«ï¼ä¾é ç¼è¯å¨ãè·¨å¹³å°æ§å·®äºã
代表è¯è¨ï¼CãC++ãPascalãObject-C以åSwiftã
è§£éåè¯è¨
å®ä¹ï¼è§£éåè¯è¨çæºä»£ç 䏿¯ç´æ¥ç¿»è¯ææºå¨ç ï¼èæ¯å ç¿»è¯æä¸é´ä»£ç ï¼åç±è§£éå¨å¯¹ä¸é´ä»£ç è¿è¡è§£éè¿è¡ãå¨è¿è¡çæ¶åæå°æºç¨åºç¿»è¯ææºå¨ç ï¼ç¿»è¯ä¸å¥ï¼ç¶åæ§è¡ä¸å¥ï¼ç´è³ç»æã
ä¼ç¹ï¼
- æè¯å¥½çå¹³å°å ¼å®¹æ§ï¼å¨ä»»ä½ç¯å¢ä¸é½å¯ä»¥è¿è¡ï¼åææ¯å®è£ äºè§£éå¨ï¼å¦èææºï¼ã
- çµæ´»ï¼ä¿®æ¹ä»£ç çæ¶åç´æ¥ä¿®æ¹å°±å¯ä»¥ï¼å¯ä»¥å¿«éé¨ç½²ï¼ä¸ç¨åæºç»´æ¤ã
缺ç¹ï¼æ¯æ¬¡è¿è¡çæ¶åé½è¦è§£éä¸éï¼æ§è½ä¸ä¸å¦ç¼è¯åè¯è¨ã
æ»ç»ï¼è§£éåè¯è¨æ§è¡éåº¦æ ¢ãæçä½ï¼ä¾é è§£éå¨ãè·¨å¹³å°æ§å¥½ã
代表è¯è¨ï¼JavaScriptãPythonãErlangãPHPãPerlãRubyã
对äºJavaè¿ç§è¯è¨ï¼å®çæºä»£ç ä¼å éè¿javacç¼è¯æåèç ï¼åéè¿jvmå°åèç è½¬æ¢ææºå¨ç æ§è¡ï¼å³è§£éè¿è¡ åç¼è¯è¿è¡é å使ç¨ï¼æä»¥å¯ä»¥ç§°ä¸ºæ··ååæè åç¼è¯åã
é¢å对象åé¢åè¿ç¨çåºå«ï¼
é¢å对象åé¢åè¿ç¨æ¯ä¸ç§è½¯ä»¶å¼åææ³ã
é¢åè¿ç¨å°±æ¯åæåºè§£å³é®é¢æéè¦çæ¥éª¤ï¼ç¶åç¨å½æ°æè¿äºæ¥éª¤å®ç°ï¼ä½¿ç¨çæ¶å便¬¡è°ç¨å°±å¯ä»¥äºã
é¢åå¯¹è±¡æ¯æææé®é¢äºå¡åè§£æå个对象ï¼åå«è®¾è®¡è¿äºå¯¹è±¡ï¼ç¶åå°ä»ä»¬ç»è£ ææå®æ´åè½çç³»ç»ãé¢åè¿ç¨åªç¨å½æ°å®ç°ï¼é¢å对象æ¯ç¨ç±»å®ç°å个åè½æ¨¡åã
以äºåæ£ä¸ºä¾ï¼é¢åè¿ç¨ç设计æè·¯å°±æ¯é¦å åæé®é¢çæ¥éª¤ï¼
1ãå¼å§æ¸¸æï¼2ãé»åå èµ°ï¼3ãç»å¶ç»é¢ï¼4ã夿è¾èµ¢ï¼5ãè½®å°ç½åï¼6ãç»å¶ç»é¢ï¼7ã夿è¾èµ¢ï¼8ãè¿åæ¥éª¤2ï¼9ãè¾åºæåç»æã æä¸é¢æ¯ä¸ªæ¥éª¤ç¨åå«ç彿°æ¥å®ç°ï¼é®é¢å°±è§£å³äºã
èé¢å对象çè®¾è®¡åæ¯ä»å¦å¤çæè·¯æ¥è§£å³é®é¢ãæ´ä¸ªäºåæ£å¯ä»¥å为ï¼
- é»ç½åæ¹
- æ£çç³»ç»ï¼è´è´£ç»å¶ç»é¢
- è§åç³»ç»ï¼è´è´£å¤å®è¯¸å¦ç¯è§ãè¾èµ¢çã
é»ç½åæ¹è´è´£æ¥åç¨æ·çè¾å ¥ï¼å¹¶åç¥æ£çç³»ç»æ£åå¸å±åçååï¼æ£çç³»ç»æ¥æ¶å°äºæ£åçååçä¿¡æ¯å°±è´è´£å¨å±å¹ä¸é¢æ¾ç¤ºåºè¿ç§ååï¼åæ¶å©ç¨è§åç³»ç»æ¥å¯¹æ£å±è¿è¡å¤å®ã
é¢å对象æåªäºç¹æ§ï¼
é¢å对象åå¤§ç¹æ§ï¼å°è£ ï¼ç»§æ¿ï¼å¤æï¼æ½è±¡
1ãå°è£ å°±æ¯å°ç±»çä¿¡æ¯éèå¨ç±»å é¨ï¼ä¸å 许å¤é¨ç¨åºç´æ¥è®¿é®ï¼èæ¯éè¿è¯¥ç±»çæ¹æ³å®ç°å¯¹éèä¿¡æ¯çæä½å访é®ã è¯å¥½çå°è£ è½å¤åå°è¦åã
2ãç»§æ¿æ¯ä»å·²æçç±»ä¸æ´¾çåºæ°çç±»ï¼æ°ç类继æ¿ç¶ç±»ç屿§åè¡ä¸ºï¼å¹¶è½æ©å±æ°çè½åï¼å¤§å¤§å¢å ç¨åºçéç¨æ§åæç»´æ¤æ§ãå¨Java䏿¯åç»§æ¿çï¼ä¹å°±æ¯è¯´ä¸ä¸ªåç±»åªæä¸ä¸ªç¶ç±»ã
3ã夿æ¯åä¸ä¸ªè¡ä¸ºå ·æå¤ä¸ªä¸å表ç°å½¢å¼çè½åãå¨ä¸ä¿®æ¹ç¨åºä»£ç çæ åµä¸æ¹åç¨åºè¿è¡æ¶ç»å®ç代ç ãå®ç°å¤æçä¸è¦ç´ ï¼ç»§æ¿ãéåãç¶ç±»å¼ç¨æåå类对象ã
- éæå¤ææ§ï¼éè¿éè½½å®ç°ï¼ç¸åçæ¹æ³æä¸åçåæ°å表ï¼å¯ä»¥æ ¹æ®åæ°çä¸åï¼ååºä¸åçå¤çã
- 卿夿æ§ï¼å¨åç±»ä¸éåç¶ç±»çæ¹æ³ãè¿è¡æé´å¤ææå¼ç¨å¯¹è±¡çå®é ç±»åï¼æ ¹æ®å ¶å®é ç±»åè°ç¨ç¸åºçæ¹æ³ã
4ãæ½è±¡ãæå®¢è§äºç©ç¨ä»£ç æ½è±¡åºæ¥ã
é¢å对象ç¼ç¨çå 大åå?
- 对象åä¸èè´£ï¼æä»¬è®¾è®¡å建ç对象ï¼å¿ é¡»èè´£æç¡®ï¼æ¯å¦ååç±»ï¼éé¢ç¸å ³ç屿§åæ¹æ³é½å¿ é¡»è·ååç¸å ³ï¼ä¸è½åºç°è®¢åçä¸ç¸å ³çå 容ãè¿éçç±»å¯ä»¥æ¯æ¨¡åãç±»åºãç¨åºéï¼èä¸ååæç±»ã
- é弿¿æ¢ååï¼åç±»è½å¤å®å ¨æ¿ä»£ç¶ç±»ï¼åä¹åä¸è¡ãé常ç¨äºå®ç°æ¥å£æ¶è¿ç¨ãå 为åç±»è½å¤å®å ¨æ¿ä»£åºï¼ç¶ï¼ç±»ï¼é£ä¹è¿æ ·ç¶ç±»å°±æ¥æå¾å¤åç±»ï¼å¨åç»çç¨åºæ©å±ä¸å°±å¾å®¹æè¿è¡æ©å±ï¼ç¨åºå®å ¨ä¸éè¦è¿è¡ä¿®æ¹å³å¯è¿è¡æ©å±ãæ¯å¦IAçå®ç°ä¸ºAï¼å 为项ç®éæ±åæ´ï¼ç°å¨éè¦æ°çå®ç°ï¼ç´æ¥å¨å®¹å¨æ³¨å ¥å¤æ´æ¢æ¥å£å³å¯.
- è¿ªç±³ç¹æ³åï¼ä¹å«æå°ååï¼æè 说æå°è¦åãé常å¨è®¾è®¡ç¨åºæå¼åç¨åºçæ¶åï¼å°½éè¦é«å èï¼ä½è¦åãå½ä¸¤ä¸ªç±»è¿è¡äº¤äºçæ¶åï¼ä¼äº§çä¾èµãèè¿ªç±³ç¹æ³åå°±æ¯å»ºè®®è¿ç§ä¾èµè¶å°è¶å¥½ãå°±åæé 彿°æ³¨å ¥ç¶ç±»å¯¹è±¡æ¶ä¸æ ·ï¼å½éè¦ä¾èµæä¸ªå¯¹è±¡æ¶ï¼å¹¶ä¸å¨æå ¶å 鍿¯æä¹å®ç°çï¼èæ¯å¨å®¹å¨ä¸æ³¨å ¥ç¸åºçå®ç°ï¼æ¢ç¬¦åé弿¿æ¢ååï¼åèµ·å°äºè§£è¦çä½ç¨ã
- å¼éååï¼å¼æ¾æ©å±ï¼å°éä¿®æ¹ãå½é¡¹ç®éæ±åçåæ´æ¶ï¼è¦å°½å¯è½çä¸å»å¯¹åæç代ç è¿è¡ä¿®æ¹ï¼èå¨åæçåºç¡ä¸è¿è¡æ©å±ã
- ä¾èµåç½®ååï¼é«å±æ¨¡åä¸åºè¯¥ç´æ¥ä¾èµäºåºå±æ¨¡åçå ·ä½å®ç°ï¼èåºè¯¥ä¾èµäºåºå±çæ½è±¡ãæ¥å£åæ½è±¡ç±»ä¸åºè¯¥ä¾èµäºå®ç°ç±»ï¼èå®ç°ç±»ä¾èµæ¥å£ææ½è±¡ç±»ã
- æ¥å£é离ååï¼ä¸ä¸ªå¯¹è±¡åå¦å¤ä¸ä¸ªå¯¹è±¡äº¤äºçè¿ç¨ä¸ï¼ä¾èµçå 容æå°ãä¹å°±æ¯è¯´å¨æ¥å£è®¾è®¡çæ¶åï¼å¨éµå¾ªå¯¹è±¡åä¸èè´£çæ åµä¸ï¼å°½éåå°æ¥å£çå 容ã
ç®æ´çï¼
- åä¸èè´£ï¼å¯¹è±¡è®¾è®¡è¦æ±ç¬ç«ï¼ä¸è½è®¾è®¡ä¸è½å¯¹è±¡ã
- å¼éååï¼å¯¹è±¡ä¿®æ¹æå°åã
- é弿¿æ¢ï¼ç¨åºæ©å±ä¸æ½è±¡è¢«å ·ä½å¯ä»¥æ¿æ¢ï¼æ¥å£ãç¶ç±»ãå¯ä»¥è¢«å®ç°ç±»å¯¹è±¡ãåç±»æ¿æ¢å¯¹è±¡ï¼
- 迪米ç¹ï¼é«å èï¼ä½è¦åãå°½éä¸è¦ä¾èµç»èã
- ä¾èµåç½®ï¼é¢åæ½è±¡ç¼ç¨ãä¹å°±æ¯åæ°ä¼ éï¼æè è¿åå¼ï¼å¯ä»¥ä½¿ç¨ç¶ç±»ç±»åæè æ¥å£ç±»åãä»å¹¿ä¹ä¸è®²ï¼åºäºæ¥å£ç¼ç¨ï¼æå设计好æ¥å£æ¡æ¶ã
- æ¥å£éç¦»ï¼æ¥å£è®¾è®¡å¤§å°è¦éä¸ãè¿å¤§å¯¼è´æ±¡æï¼è¿å°ï¼å¯¼è´è°ç¨éº»ç¦ã
æ°ç»å°åºæ¯ä¸æ¯å¯¹è±¡ï¼
å è¯´è¯´å¯¹è±¡çæ¦å¿µãå¯¹è±¡æ¯æ ¹æ®æä¸ªç±»åå»ºåºæ¥çä¸ä¸ªå®ä¾ï¼è¡¨ç¤ºæç±»äºç©ä¸ä¸ä¸ªå ·ä½ç个ä½ã
å¯¹è±¡å ·æåç§å±æ§ï¼å¹¶ä¸å ·æä¸äºç¹å®çè¡ä¸ºãç«å¨è®¡ç®æºçè§åº¦ï¼å¯¹è±¡å°±æ¯å åä¸çä¸ä¸ªå ååï¼å¨è¿ä¸ªå ååå°è£ äºä¸äºæ°æ®ï¼ä¹å°±æ¯ç±»ä¸å®ä¹çåä¸ªå±æ§ã
æä»¥ï¼å¯¹è±¡æ¯ç¨æ¥å°è£ æ°æ®çã
javaä¸çæ°ç»å ·æjavaä¸å ¶ä»å¯¹è±¡çä¸äºåºæ¬ç¹ç¹ãæ¯å¦å°è£ äºä¸äºæ°æ®ï¼å¯ä»¥è®¿é®å±æ§ï¼ä¹å¯ä»¥è°ç¨æ¹æ³ã
å æ¤ï¼å¯ä»¥è¯´ï¼æ°ç»æ¯å¯¹è±¡ã
ä¹å¯ä»¥éè¿ä»£ç éªè¯æ°ç»æ¯å¯¹è±¡çäºå®ãæ¯å¦ä»¥ä¸ç代ç ï¼è¾åºç»æä¸ºjava.lang.Objectã
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çéå类添å åºç¡ç±»åæ°æ®æ¶ï¼è£ ç®±ï¼
示ä¾ä»£ç ï¼
Integer x = 1; // è£
ç®± è°â½¤ Integer.valueOf(1)
int y = x; // æç®± è°â½¤ï¦º X.intValue()
两个Integer ç¨== æ¯è¾ä¸ç¸ççåå
ä¸é¢çä¸é常è§çé¢è¯é¢ï¼
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
Integer c = 200;
Integer d = 200;
System.out.println(c == d);
è¾åºï¼
true
false
为ä»ä¹ç¬¬äºä¸ªè¾åºæ¯falseï¼çç Integer ç±»çæºç å°±ç¥éå¦ã
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ã
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ç±»çæºç ï¼
public final class String
implements java.io.Serializable, Comparable<String>, 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è¦è®¾è®¡æä¸å¯åçï¼
ä¸»è¦æä»¥ä¸å ç¹åå ï¼
- 线ç¨å®å ¨ãåä¸ä¸ªå符串å®ä¾å¯ä»¥è¢«å¤ä¸ªçº¿ç¨å ±äº«ï¼å 为å符串ä¸å¯åï¼æ¬èº«å°±æ¯çº¿ç¨å®å ¨çã
- æ¯æhashæ å°åç¼åãå 为Stringçhashå¼ç»å¸¸ä¼ä½¿ç¨å°ï¼æ¯å¦ä½ä¸º Map çé®ï¼ä¸å¯åçç¹æ§ä½¿å¾ hash å¼ä¹ä¸ä¼åï¼ä¸éè¦éæ°è®¡ç®ã
- åºäºå®å ¨èèãç½ç»å°åURLãæä»¶è·¯å¾pathãå¯ç é常æ åµä¸é½æ¯ä»¥Stringç±»åä¿åï¼åè¥String䏿¯åºå®ä¸åçï¼å°ä¼å¼èµ·åç§å®å ¨éæ£ãæ¯å¦å°å¯ç ç¨Stringçç±»åä¿åï¼é£ä¹å®å°ä¸ç´çå¨å åä¸ï¼ç´å°å徿¶é卿宿¸ é¤ãåå¦Stringç±»ä¸æ¯åºå®ä¸åçï¼é£ä¹è¿ä¸ªå¯ç å¯è½ä¼è¢«æ¹åï¼å¯¼è´åºç°å®å ¨éæ£ã
- åç¬¦ä¸²å¸¸éæ± ä¼åã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 æä¸¤ä¸ªæé æ¹æ³ï¼ç¬¬ä¸ä¸ªæé è¦æ±ä¾æ¬¡ä¼ å ¥åé符ãåç¼ååç¼ã第äºä¸ªæé ååªè¦æ±ä¼ å ¥åé符å³å¯ï¼åç¼ååç¼é»è®¤ä¸ºç©ºå符串ï¼ã
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
StringJoiner(CharSequence delimiter)
æäºåç¬¦ä¸²æ¼æ¥åºæ¯ï¼ä½¿ç¨ StringBuffer æ StringBuilder 忾徿¯è¾ç¹çã
æ¯å¦ä¸é¢çä¾åï¼
List<Integer> 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çå个å ç´ ï¼ä»£ç çèµ·æ¥æ´å ç®æ´ã
List<Integer> values = Arrays.asList(1, 3, 5);
StringJoiner sj = new StringJoiner(",", "(", ")");
for (Integer value : values) {
sj.add(value.toString());
}
å¦å¤ï¼åå¹³æ¶ç»å¸¸ä½¿ç¨çCollectors.joining(",")ï¼åºå±å°±æ¯éè¿StringJoinerå®ç°çã
æºç å¦ä¸ï¼
public static Collector<CharSequence, ?, String> 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ç±»å表示ã
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
é»è®¤è¾åºå¯¹è±¡å°åã
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æ¹æ³ï¼æç §éåé»è¾è¾åºå¯¹è±¡å¼ã
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
é»è®¤æ¯è¾ä¸¤ä¸ªå¼ç¨å鿝妿ååä¸ä¸ªå¯¹è±¡ï¼å åå°åï¼ã
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æ¯å¦ç¸çæ¥å¤æï¼
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弿¯æ ¹æ®å åå°åæ¢ç®åºæ¥ã
public class Cat {
public static void main(String[] args) {
System.out.println(new Cat().hashCode());
}
//out
//1349277854
}
clone
Javaèµå¼æ¯å¤å¶å¯¹è±¡å¼ç¨ï¼å¦ææä»¬æ³è¦å¾å°ä¸ä¸ªå¯¹è±¡ç坿¬ï¼ä½¿ç¨èµå¼æä½æ¯æ æ³è¾¾å°ç®ççãObject对象æä¸ªclone()æ¹æ³ï¼å®ç°äºå¯¹
象ä¸åä¸ªå±æ§çå¤å¶ï¼ä½å®çå¯è§èå´æ¯protectedçã
protected native Object clone() throws CloneNotSupportedException;
æä»¥å®ä½ç±»ä½¿ç¨å éçåææ¯ï¼
- å®ç°Cloneableæ¥å£ï¼è¿æ¯ä¸ä¸ªæ è®°æ¥å£ï¼èªèº«æ²¡ææ¹æ³ï¼è¿åºè¯¥æ¯ä¸ç§çº¦å®ãè°ç¨cloneæ¹æ³æ¶ï¼ä¼å¤æææ²¡æå®ç°Cloneableæ¥å£ï¼æ²¡æå®ç°Cloneableçè¯ä¼æå¼å¸¸CloneNotSupportedExceptionã
- è¦çclone()æ¹æ³ï¼å¯è§æ§æå为publicã
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åå°æºå¶ã
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å¼ç¨çæ¯åä¸ä¸ªå¯¹è±¡ï¼è¿å°±æ¯æµ æ·è´ã
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æ¹æ³ï¼ï¼ä»èå®ç°äºæ·±æ·è´ãå¯ä»¥çå°ï¼æ·è´å¯¹è±¡çå¼ä¸ä¼åå°å对象çå½±åã
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çå ³ç³»ï¼
- å¦æä¸¤ä¸ªå¯¹è±¡è°ç¨equalsæ¯è¾è¿åtrueï¼é£ä¹å®ä»¬çhashCodeå¼ä¸å®è¦ç¸åï¼
- å¦æä¸¤ä¸ªå¯¹è±¡ç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ä¸ç±»å®ä¾å顺åºï¼
- éæå±æ§ï¼éæä»£ç åã
- æ®é屿§ï¼æ®é代ç åã
- æé æ¹æ³ã
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åéå¨å
ååªæä¸ä¸ªå¯æ¬ã
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æ¹æ³ä¸è¬ç§°ä½éææ¹æ³ãéææ¹æ³ä¸ä¾èµäºä»»ä½å¯¹è±¡å°±å¯ä»¥è¿è¡è®¿é®ï¼éè¿ç±»åå³å¯è°ç¨éææ¹æ³ã
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å¨ç±»å è½½çæ¶åè¿è¡èµå¼ã
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;
}
}
éæå é¨ç±»
å¨éææ¹æ³éï¼ä½¿ç¨â¾®éæå é¨ç±»ä¾èµäºå¤é¨ç±»çå®ï¦µï¼ä¹å°±æ¯è¯´éè¦å å建å¤é¨ç±»å®ï¦µï¼æè½ç¨è¿ä¸ªå®ï¦µå»å建ééæå é¨ç±»ãâ½½éæå é¨ç±»ï¥§éè¦ã
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
åºæ¬æ°æ®ç±»åç¨final修饰ï¼åä¸è½ä¿®æ¹ï¼æ¯å¸¸éï¼å¯¹è±¡å¼ç¨ç¨final修饰ï¼åå¼ç¨åªè½æå该对象ï¼ä¸è½æåå«ç对象ï¼ä½æ¯å¯¹è±¡æ¬èº«å¯ä»¥ä¿®æ¹ã
finalä¿®é¥°çæ¹æ³ä¸è½è¢«åç±»éå
final修饰çç±»ä¸è½è¢«ç»§æ¿ã
this
this.屿§åç§°æè®¿é®ç±»ä¸çæååéï¼å¯ä»¥ç¨æ¥åºåæååéåå±é¨åéãå¦ä¸ä»£ç æç¤ºï¼this.name访é®ç±»Personå½åå®ä¾çåéã
/**
* @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 çå½åå®ä¾çæ¹æ³ã
/**
* @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 å ³é®åç¨äºå¨åç±»ä¸è®¿é®ç¶ç±»çåéåæ¹æ³ã
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 修饰çåéå«å¸¸éï¼å¸¸éå¿ é¡»åå§åï¼åå§åä¹åå¼å°±ä¸è½è¢«ä¿®æ¹ã
æ¹æ³éè½½åéåçåºå«ï¼
å个类ä¸çå¤ä¸ªæ¹æ³å¯ä»¥æç¸åçæ¹æ³åç§°ï¼ä½æ¯æä¸åçåæ°å表ï¼è¿å°±ç§°ä¸ºæ¹æ³éè½½ãåæ°å表åå«åæ°ç¾åï¼å æ¬åæ°çç±»åãåæ°ç个æ°ãåæ°ç顺åºï¼åªè¦æä¸ä¸ªä¸åå°±å«ååæ°å表ä¸åã
éè½½æ¯é¢å对象çä¸ä¸ªåºæ¬ç¹æ§ã
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æ¹æ³ã
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ã设计å±é¢ä¸çåºå«
- æ½è±¡å±æ¬¡ä¸åãæ½è±¡ç±»æ¯å¯¹æ´ä¸ªç±»æ´ä½è¿è¡æ½è±¡ï¼å æ¬å±æ§ãè¡ä¸ºï¼ä½æ¯æ¥å£åªæ¯å¯¹ç±»è¡ä¸ºè¿è¡æ½è±¡ãç»§æ¿æ½è±¡ç±»æ¯ä¸ç§"æ¯ä¸æ¯"çå ³ç³»ï¼èæ¥å£å®ç°åæ¯ "ææ²¡æ"çå ³ç³»ã妿ä¸ä¸ªç±»ç»§æ¿äºæä¸ªæ½è±¡ç±»ï¼ååç±»å¿ å®æ¯æ½è±¡ç±»çç§ç±»ï¼èæ¥å£å®ç°åæ¯å ·å¤ä¸å ·å¤çå ³ç³»ï¼æ¯å¦é¸æ¯å¦è½é£ã
- ç»§æ¿æ½è±¡ç±»çæ¯å ·æç¸ä¼¼ç¹ç¹çç±»ï¼èå®ç°æ¥å£çå´å¯ä»¥ä¸åçç±»ã
é¨åè¦æ¥çä¾åï¼
class AlarmDoor extends Door implements Alarm {
//code
}
class BMWCar extends Car implements Alarm {
//code
}
常è§çExceptionæåªäºï¼
常è§çRuntimeExceptionï¼
ClassCastException//ç±»å转æ¢å¼å¸¸IndexOutOfBoundsException//æ°ç»è¶çå¼å¸¸NullPointerException//空æéArrayStoreException//æ°ç»åå¨å¼å¸¸NumberFormatException//æ°åæ ¼å¼åå¼å¸¸ArithmeticException//æ°å¦è¿ç®å¼å¸¸
checked Exceptionï¼
NoSuchFieldException//åå°å¼å¸¸ï¼æ²¡æå¯¹åºçåæ®µClassNotFoundException//ç±»æ²¡ææ¾å°å¼å¸¸IllegalAccessException//å®å ¨æéå¼å¸¸ï¼å¯è½æ¯åå°æ¶è°ç¨äºprivateæ¹æ³
ErroråExceptionçåºå«ï¼
Errorï¼JVM æ æ³è§£å³ç严éé®é¢ï¼å¦æ 溢åºStackOverflowErrorãå
åæº¢åºOOMçãç¨åºæ æ³å¤ççé误ã
Exceptionï¼å ¶å®å ç¼ç¨é误æå¶ç¶çå¤å¨å ç´ å¯¼è´çä¸è¬æ§é®é¢ãå¯ä»¥å¨ä»£ç ä¸è¿è¡å¤çãå¦ï¼ç©ºæéå¼å¸¸ãæ°ç»ä¸æ è¶ççã
è¿è¡æ¶å¼å¸¸åéè¿è¡æ¶å¼å¸¸ï¼checkedï¼çåºå«ï¼
unchecked exceptionå
æ¬RuntimeExceptionåErrorç±»ï¼å
¶ä»ææå¼å¸¸ç§°ä¸ºæ£æ¥ï¼checkedï¼å¼å¸¸ã
RuntimeExceptionç±ç¨åºé误导è´ï¼åºè¯¥ä¿®æ£ç¨åºé¿å è¿ç±»å¼å¸¸åçã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 ï¼å å¼ºå¯¹æ¥æä¸æ¶é´çå¤çã
åºåååååºåå
- åºååï¼æå¯¹è±¡è½¬æ¢ä¸ºåèåºåçè¿ç¨ç§°ä¸ºå¯¹è±¡çåºåå.
- ååºååï¼æåèåºåæ¢å¤ä¸ºå¯¹è±¡çè¿ç¨ç§°ä¸ºå¯¹è±¡çååºåå.
ä»ä¹æ¶åéè¦ç¨å°åºåååååºååå¢?
彿们åªå¨æ¬å° JVM éè¿è¡ä¸ Java å®ä¾ï¼è¿ä¸ªæ¶åæ¯ä¸éè¦ä»ä¹åºåååååºååçï¼ä½å½æä»¬éè¦å°å åä¸ç对象æä¹ åå°ç£çï¼æ°æ®åºä¸æ¶ï¼å½æä»¬éè¦ä¸æµè§å¨è¿è¡äº¤äºæ¶ï¼å½æä»¬éè¦å®ç° RPC æ¶ï¼è¿ä¸ªæ¶åå°±éè¦åºåååååºååäº.
å两个éè¦ç¨å°åºåååååºååçåºæ¯ï¼æ¯ä¸æ¯è®©æä»¬æä¸ä¸ªå¾å¤§ççé®? æä»¬å¨ä¸æµè§å¨äº¤äºæ¶ï¼è¿æå°å åä¸ç对象æä¹ åå°æ°æ®åºä¸æ¶ï¼å¥½å齿²¡æå»è¿è¡åºåååååºååï¼å 为æä»¬é½æ²¡æå®ç° Serializable æ¥å£ï¼ä½ä¸ç´æ£å¸¸è¿è¡.
ä¸é¢å ç»åºç»è®º:
åªè¦æä»¬å¯¹å åä¸ç对象è¿è¡æä¹ åæç½ç»ä¼ è¾ï¼è¿ä¸ªæ¶åé½éè¦åºåååååºåå.
çç±:
æå¡å¨ä¸æµè§å¨äº¤äºæ¶ççæ²¡æç¨å° Serializable æ¥å£å? JSON æ ¼å¼å®é ä¸å°±æ¯å°ä¸ä¸ªå¯¹è±¡è½¬å为åç¬¦ä¸²ï¼æä»¥æå¡å¨ä¸æµè§å¨äº¤äºæ¶çæ°æ®æ ¼å¼å ¶å®æ¯åç¬¦ä¸²ï¼æä»¬æ¥çæ¥ String ç±»åçæºç :
public final class String
implements java.io.Serializableï¼Comparable<String>ï¼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 id="insertUser" parameterType="org.tyshawn.bean.User">
INSERT INTO t\_user(nameï¼age) VALUES (#{name}ï¼#{age})
</insert>
å®é 䏿们并䏿¯å°æ´ä¸ªå¯¹è±¡æä¹ åå°æ°æ®åºä¸ï¼èæ¯å°å¯¹è±¡ä¸ç屿§æä¹ åå°æ°æ®åºä¸ï¼èè¿äºå±æ§ï¼å¦Date/Stringï¼é½å®ç°äº Serializable æ¥å£ã
å®ç°åºåååååºåå为ä»ä¹è¦å®ç° Serializable æ¥å£?
å¨ Java ä¸å®ç°äº Serializable æ¥å£åï¼ JVM å¨ç±»å è½½çæ¶åå°±ä¼åç°æä»¬å®ç°äºè¿ä¸ªæ¥å£ï¼ç¶åå¨åå§åå®ä¾å¯¹è±¡çæ¶åå°±ä¼å¨åºå±å¸®æä»¬å®ç°åºåååååºååã
å¦æè¢«å对象类å䏿¯Stringãæ°ç»ãEnumï¼å¹¶ä¸æ²¡æå®ç°Serializableæ¥å£ï¼é£ä¹å¨è¿è¡åºååçæ¶åï¼å°æåºNotSerializableExceptionãæºç å¦ä¸ï¼
// 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è¯è¨çåå°æºå¶ã
å¨è¿è¡ç¶æä¸ï¼å¯¹äºä»»æä¸ä¸ªç±»ï¼è½å¤ç¥éè¿ä¸ªç±»çææå±æ§åæ¹æ³ã对äºä»»æä¸ä¸ªå¯¹è±¡ï¼è½å¤è°ç¨å®çä»»æä¸ä¸ªæ¹æ³å屿§ã
åå°æåªäºåºç¨åºæ¯å¢ï¼
- JDBCè¿æ¥æ°æ®åºæ¶ä½¿ç¨
Class.forName()éè¿åå°å è½½æ°æ®åºç驱å¨ç¨åº - EclispeãIDEAçå¼åå·¥å ·å©ç¨åå°å¨æè§£æå¯¹è±¡çç±»åä¸ç»æï¼å¨ææç¤ºå¯¹è±¡ç屿§åæ¹æ³
- Webæå¡å¨ä¸å©ç¨åå°è°ç¨äºSevletç
serviceæ¹æ³ - 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å°åï¼ä¹éåæºã
åæºçç¥éå¶ä»¥ä¸å ç§è¡ä¸ºï¼
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åå ¥ï¼å®ç°è·¨åç»å½ã
// 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ï¼å请æ±ä¸ä¸ªå¸¦åç½åå®ç°è·¨åéä¿¡ã
设计æ¥å£è¦æ³¨æä»ä¹?
- æ¥å£åæ°æ ¡éªãæ¥å£å¿ é¡»æ ¡éªåæ°ï¼æ¯å¦å ¥åæ¯å¦å 许为空ï¼å ¥åé¿åº¦æ¯å¦ç¬¦å颿ã
- 设计æ¥å£æ¶ï¼å åèèæ¥å£ç坿©å±æ§ãæèæ¥å£æ¯å¦å¯ä»¥å¤ç¨ï¼ææ ·ä¿ææ¥å£ç坿©å±æ§ã
- 串è¡è°ç¨èèæ¹å¹¶è¡è°ç¨ãæ¯å¦è®¾è®¡ä¸ä¸ªååé¦é¡µæ¥å£ï¼éè¦æ¥ååä¿¡æ¯ãè¥éä¿¡æ¯ãç¨æ·ä¿¡æ¯ççã妿æ¯ä¸²è¡ä¸ä¸ªä¸ä¸ªæ¥ï¼é£èæ¶å°±æ¯è¾å¤§äºãè¿ç§åºæ¯æ¯å¯ä»¥æ¹ä¸ºå¹¶è¡è°ç¨çï¼é使¥å£èæ¶ã
- æ¥å£æ¯å¦éè¦é²éå¤çãæ¶åå°æ°æ®åºä¿®æ¹çï¼è¦èèé²éå¤çï¼å¯ä»¥ä½¿ç¨æ°æ®åºé²é表ï¼ä»¥å¯ä¸æµæ°´å·ä½ä¸ºå¯ä¸ç´¢å¼ã
- æ¥å¿æå°å ¨é¢ï¼å ¥ååºåï¼æ¥å£èæ¶ï¼è®°å½å¥½æ¥å¿ï¼æ¹ä¾¿ç©é ã
- ä¿®æ¹æ§æ¥å£æ¶ï¼æ³¨æå ¼å®¹æ§è®¾è®¡ã
- å¼å¸¸å¤çå¾å½ã使ç¨finallyå ³éæµèµæºã使ç¨logæå°è䏿¯e.printStackTrace()ãä¸è¦åå¼å¸¸çç
- æ¯å¦éè¦èèéæµãéæµä¸ºäºä¿æ¤ç³»ç»ï¼é²æ¢æµéæ´ªå³°è¶ è¿ç³»ç»çæ¿è½½è½åã
è¿æ»¤å¨åæ¦æªå¨æä»ä¹åºå«ï¼
1ãå®ç°åçä¸åã
è¿æ»¤å¨åæ¦æªå¨åºå±å®ç°ä¸åãè¿æ»¤å¨æ¯åºäºå½æ°åè°çï¼æ¦æªå¨æ¯åºäºJavaçåå°æºå¶ï¼å¨æä»£çï¼å®ç°çãä¸è¬èªå®ä¹çè¿æ»¤å¨ä¸é½ä¼å®ç°ä¸ä¸ªdoFilter()æ¹æ³ï¼è¿ä¸ªæ¹æ³æä¸ä¸ªFilterChainåæ°ï¼èå®é ä¸å®æ¯ä¸ä¸ªåè°æ¥å£ã
2ãè§¦åæ¶æºä¸åã
è¿æ»¤å¨Filteræ¯å¨è¯·æ±è¿å ¥å®¹å¨åï¼ä½å¨è¿å ¥servletä¹åè¿è¡é¢å¤çï¼è¯·æ±ç»ææ¯å¨servletå¤çå®ä»¥åã
æ¦æªå¨ Interceptor æ¯å¨è¯·æ±è¿å ¥servletåï¼å¨è¿å ¥Controllerä¹åè¿è¡é¢å¤ççï¼Controller 䏿¸²æäºå¯¹åºçè§å¾ä¹å请æ±ç»æã

3ã使ç¨çåºæ¯ä¸åã
å ä¸ºæ¦æªå¨æ´æ¥è¿ä¸å¡ç³»ç»ï¼æä»¥æ¦æªå¨ä¸»è¦ç¨æ¥å®ç°é¡¹ç®ä¸çä¸å¡å¤æçï¼æ¯å¦ï¼æ¥å¿è®°å½ãæé夿çä¸å¡ãèè¿æ»¤å¨é常æ¯ç¨æ¥å®ç°éç¨åè½è¿æ»¤çï¼æ¯å¦ï¼ææè¯è¿æ»¤ãååºæ°æ®å缩çåè½ã
4ãæ¦æªç请æ±èå´ä¸åã
请æ±çæ§è¡é¡ºåºæ¯ï¼è¯·æ±è¿å ¥å®¹å¨ -> è¿å ¥è¿æ»¤å¨ -> è¿å ¥ Servlet -> è¿å ¥æ¦æªå¨ -> æ§è¡æ§å¶å¨ãå¯ä»¥çå°è¿æ»¤å¨åæ¦æªå¨çæ§è¡æ¶æºä¹æ¯ä¸åçï¼è¿æ»¤å¨ä¼å æ§è¡ï¼ç¶åæä¼æ§è¡æ¦æªå¨ï¼æåæä¼è¿å ¥çæ£çè¦è°ç¨çæ¹æ³ã
åè龿¥ï¼https://segmentfault.com/a/1190000022833940
对æ¥ç¬¬ä¸æ¹æ¥å£è¦èèä»ä¹ï¼
å¯ï¼éè¦èè以ä¸å ç¹ï¼
- 确认æ¥å£å¯¹æ¥çç½ç»åè®®ï¼æ¯https/httpæè èªå®ä¹çç§æåè®®çã
- 约å®å¥½æ°æ®ä¼ åãååºæ ¼å¼ï¼å¦application/jsonï¼ï¼å¼±ç±»å对æ¥å¼ºç±»åè¯è¨æ¶è¦ç¹å«æ³¨æ
- æ¥å£å®å ¨æ¹é¢ï¼è¦ç¡®å®èº«ä»½æ ¡éªæ¹å¼ï¼ä½¿ç¨tokenãè¯ä¹¦æ ¡éªç
- 确认æ¯å¦éè¦æ¥å£è°ç¨å¤±è´¥åçéè¯æºå¶ï¼ä¿è¯æ°æ®ä¼ è¾çæç»ä¸è´æ§ã
- æ¥å¿è®°å½è¦å ¨é¢ãæ¥å£åºå ¥åæ°ï¼ä»¥åè§£æä¹åçåæ°å¼ï¼é½è¦ç¨æ¥å¿è®°å½ä¸æ¥ï¼æ¹ä¾¿å®ä½é®é¢ï¼ç©é ï¼ã
åèï¼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åå¸å¼éï¼åªéè¦å¨å
±äº«ä¸´çèµæºå éå³å¯ï¼ä¸æ¶åå
±äº«èµæºçï¼å°±ä¸å¿
è¦å éã
èæ¶æä½ï¼èèæ¾å°å¼æ¥æ§è¡
èæ¶æä½ï¼èèç¨å¼æ¥å¤çï¼è¿æ ·å¯ä»¥é使¥å£èæ¶ãæ¯å¦ç¨æ·æ³¨åæååï¼çä¿¡é®ä»¶éç¥ï¼æ¯å¯ä»¥å¼æ¥å¤ççã
使ç¨ç¼å
æè¦æ¥çæ°æ®ï¼æåæ¾å¥½å°ç¼åéé¢ï¼éè¦æ¶ï¼ç´æ¥æ¥ç¼åï¼èé¿å 廿¥æ°æ®åºæè 计ç®çè¿ç¨ã
æååå§åå°ç¼å
é¢åææ³å¾å®¹æçè§£ï¼å°±æ¯æåæè¦è®¡ç®æ¥è¯¢çæ°æ®ï¼åå§åå°ç¼åãå¦æä½ å¨æªæ¥æä¸ªæ¶é´éè¦ç¨å°æä¸ªç»è¿å¤æè®¡ç®çæ°æ®ï¼æå®æ¶å»è®¡ç®çè¯ï¼å¯è½èæ¶æ¯è¾å¤§ãè¿æ¶åï¼æä»¬å¯ä»¥éåé¢åææ³ï¼æåæå°æ¥å¯è½éè¦çæ°æ®è®¡ç®å¥½ï¼æ¾å°ç¼åä¸ï¼çéè¦çæ¶åï¼å»ç¼ååå°±è¡ãè¿å°å¤§å¹ 度æé«æ¥å£æ§è½ã
åç¼©ä¼ è¾å 容
åç¼©ä¼ è¾å 容ï¼ä¼ è¾æ¥æå徿´å°ï¼å æ¤ä¼ è¾ä¼æ´å¿«ã
æåç»å¤§å®¶å享200夿¬è®¡ç®æºç»å ¸ä¹¦ç±PDFçµå书ï¼å æ¬Cè¯è¨ãC++ãJavaãPythonãåç«¯ãæ°æ®åºãæä½ç³»ç»ãè®¡ç®æºç½ç»ãæ°æ®ç»æåç®æ³ãæºå¨å¦ä¹ ãç¼ç¨äººççï¼æå ´è¶£çå°ä¼ä¼´å¯ä»¥èªåï¼


200夿¬è®¡ç®æºç»å ¸ä¹¦ç±PDFçµå书ï¼https://mp.weixin.qq.com/s/3udLZjoVTdqAcp3jJ0MRGQ


