# Java åºç¡æ ¸å¿æ»ç»
å
æ¥çä¸ä¸æ¬ç¯æç« çæç»´å¯¼å¾å§ï¼æä¼å´ç»ä¸é¢è¿äºå
容è¿è¡è®²è§£ãå
容å¾å¹²ï¼å°ä¼ä¼´ä»¬çå®è¿å¸æä¸å转åã(髿¸
æç»´å¯¼å¾çæ¬å
³æ³¨ä½è
å
¬ä¼å· `Java建设è
` åå¤ `Java666` è·åï¼å
¶ä»æç»´å¯¼å¾è·åæ¹å¼å¨ææ«)ã

## Java æ¦è¿°
### ä»ä¹æ¯ Javaï¼
Java æ¯ Sun Microsystems äº1995 年馿¬¡åå¸çä¸ç§`ç¼ç¨è¯è¨`å计ç®å¹³å°ãç¼ç¨è¯è¨è¿æ¯è¾å¥½çè§£ï¼é£ä¹ä»ä¹æ¯ `计ç®å¹³å°` å¢ï¼
>计ç®å¹³å°æ¯å¨çµèä¸è¿è¡åºç¨ç¨åºï¼è½¯ä»¶ï¼çç¯å¢ï¼å
æ¬`硬件ç¯å¢`å`软件ç¯å¢`ãä¸è¬ç³»ç»å¹³å°å
æ¬ä¸å°çµèç硬件ä½ç³»ç»æãæä½ç³»ç»ãè¿è¡æ¶åºã
Java æ¯å¿«éï¼å®å
¨åå¯é çã ä»ç¬è®°æ¬çµèå°æ°æ®ä¸å¿ï¼ä»æ¸¸ææºå°ç§å¦è¶
çº§è®¡ç®æºï¼ä»ææºå°äºèç½ï¼Java æ å¤ä¸å¨ï¼Java 主è¦å为ä¸ä¸ªçæ¬
- JavaSE(J2SE)(Java2 Platform Standard Editionï¼java平尿 åçï¼
- JavaEE(J2EE)(Java 2 Platform,Enterprise Editionï¼javaå¹³å°ä¼ä¸ç)
- JavaME(J2ME)(Java 2 Platform Micro Editionï¼javaå¹³å°å¾®åç)ã
### Java çç¹ç¹
* Java æ¯ä¸é¨`é¢å对象`çç¼ç¨è¯è¨
ä»ä¹æ¯é¢å对象ï¼`é¢å对象(Object Oriented)` æ¯ä¸ç§è½¯ä»¶å¼åææ³ã宿¯å¯¹ç°å®ä¸ççä¸ç§æ½è±¡ï¼é¢åå¯¹è±¡ä¼æç¸å
³çæ°æ®åæ¹æ³ç»ç»ä¸ºä¸ä¸ªæ´ä½æ¥çå¾
ã
ç¸å¯¹çå¦å¤ä¸ç§å¼åææ³å°±æ¯é¢åè¿ç¨çå¼åææ³ï¼ä»ä¹é¢åè¿ç¨ï¼`é¢åè¿ç¨(Procedure Oriented)` æ¯ä¸ç§ä»¥è¿ç¨ä¸ºä¸å¿çç¼ç¨ææ³ã举个ä¾åï¼æ¯å¦ä½ æ¯ä¸ªå¦çï¼ä½ æ¯å¤©å»ä¸å¦éè¦åå ä»¶äºæ
ï¼
èµ·åºãç©¿è¡£æãæ´è¸å·çï¼åé¥ï¼å»å¦æ ¡ãä¸è¬æ¯é¡ºåºæ§ç宿ä¸ç³»åå¨ä½ã
```java
class student {
void student_wakeUp(){...}
void student_cloth(){...}
void student_wash(){...}
void student_eating(){...}
void student_gotoSchool(){...}
}
```
èé¢å对象å¯ä»¥æå¦çè¿è¡æ½è±¡ï¼æä»¥è¿ä¸ªä¾åå°±ä¼å为
```java
class student(){
void wakeUp(){...}
void cloth(){...}
void wash(){...}
void eating(){...}
void gotoSchool(){...}
}
```
å¯ä»¥ä¸ç¨ä¸¥æ ¼æç
§é¡ºåºæ¥æ§è¡æ¯ä¸ªå¨ä½ãè¿æ¯ç¹ç¹ä¸ã
* Java æå¼äº C++ ä¸é¾ä»¥çè§£çå¤ç»§æ¿ãæéãå
å管ççæ¦å¿µï¼ä¸ç¨æå¨ç®¡ç对象ççå½å¨æï¼è¿æ¯ç¹å¾äºã
* Java è¯è¨å
·æåè½å¼ºå¤§åç®åæç¨ä¸¤ä¸ªç¹å¾ï¼ç°å¨ä¼ä¸çº§å¼åï¼å¿«éææ·å¼åï¼å°¤å
¶æ¯åç§æ¡æ¶çåºç°ï¼ä½¿ Java æä¸ºè¶æ¥è¶ç«çä¸é¨è¯è¨ãè¿æ¯ç¹ç¹ä¸ã
* Java æ¯ä¸é¨éæè¯è¨ï¼éæè¯è¨æçå°±æ¯å¨ç¼è¯æé´å°±è½å¤ç¥éæ°æ®ç±»åçè¯è¨ï¼å¨è¿è¡åå°±è½å¤æ£æ¥ç±»åçæ£ç¡®æ§ï¼ä¸æ¦ç±»åç¡®å®åå°±ä¸è½åæ´æ¹ï¼æ¯å¦ä¸é¢è¿ä¸ªä¾åã
```java
public void foo() {
int x = 5;
boolean b = x;
}
```
éæè¯è¨ä¸»è¦æ **Pascal, Perl, C/C++, JAVA, C#, Scala** çã
ç¸å¯¹åºçï¼å¨æè¯è¨æ²¡æä»»ä½ç¹å®çæ
åµéè¦æå®åéçç±»åï¼å¨è¿è¡æ¶ç¡®å®çæ°æ®ç±»åãæ¯å¦æ**Lisp, Perl, PythonãRubyãJavaScript **çã
ä»è®¾è®¡çè§åº¦ä¸æ¥è¯´ï¼ææçè¯è¨é½æ¯è®¾è®¡ç¨æ¥æäººç±»å¯è¯»ç代ç 转æ¢ä¸ºæºå¨æä»¤ã卿è¯è¨æ¯ä¸ºäºè½å¤è®©ç¨åºåæé«ç¼ç æçï¼å æ¤ä½ å¯ä»¥ä½¿ç¨æ´å°çä»£ç æ¥å®ç°åè½ãéæè¯è¨è®¾è®¡æ¯ç¨æ¥è®©ç¡¬ä»¶æ§è¡çæ´é«æï¼å æ¤éè¦ç¨åºåç¼ååç¡®æ 误ç代ç ï¼ä»¥æ¤æ¥è®©ä½ ç代ç å°½å¿«çæ§è¡ãä»è¿ä¸ªè§åº¦æ¥è¯´ï¼éæè¯è¨çæ§è¡æçè¦æ¯å¨æè¯è¨é«ï¼é度æ´å¿«ãè¿æ¯ç¹ç¹åã
* Java å
·æå¹³å°ç¬ç«æ§åå¯ç§»æ¤æ§
Java æä¸å¥é常èåçå£å·ï¼ `Write once, run anywhere`ï¼ä¹å°±æ¯ä¸æ¬¡ç¼åãå°å¤è¿è¡ã为ä»ä¹ Java è½å¤å¹åºè¿ç§çæ¹çå£å·æ¥ï¼æ ¸å¿å°±æ¯ `JVM`ãæä»¬ç¥éï¼è®¡ç®æºåºç¨ç¨åºå硬件ä¹é´ä¼å±è½å¾å¤ç»èï¼å®ä»¬ä¹é´ä¾é æä½ç³»ç»å®æè°åº¦ååè°ï¼å¤§è´çä½ç³»ç»æå¦ä¸

é£ä¹å ä¸ Java åºç¨ãJVM çä½ç³»ç»æä¼å为å¦ä¸
Java æ¯è·¨å¹³å°çï¼å·²ç¼è¯ç Java ç¨åºå¯ä»¥å¨ä»»ä½å¸¦æ JVM çå¹³å°ä¸è¿è¡ãä½ å¯ä»¥å¨ Windows å¹³å°ä¸ç¼å代ç ï¼ç¶åæ¿å° Linux å¹³å°ä¸è¿è¡ï¼è¯¥å¦ä½å®ç°å¢ï¼
é¦å
ä½ éè¦å¨åºç¨ä¸ç¼å Java 代ç ï¼
ç¨ `Eclipse` æè
`javac` æ Java 代ç ç¼è¯ä¸º `.class` æä»¶ï¼
ç¶åæä½ ç .class æä»¶ææ `.jar` æä»¶ï¼
ç¶åä½ ç .jar æä»¶å°±è½å¤å¨ Windows ãMac OS XãLinux ç³»ç»ä¸è¿è¡äºãä¸åçæä½ç³»ç»æä¸åç JVM å®ç°ï¼åæ¢å¹³å°æ¶ï¼ä¸éè¦å次ç¼è¯ä½ ç Java 代ç äºãè¿æ¯ç¹ç¹äºã
* Java è½å¤å®¹æå®ç°å¤çº¿ç¨
Java æ¯ä¸é¨é«çº§è¯è¨ï¼é«çº§è¯è¨ä¼å¯¹ç¨æ·å±è½å¾å¤åºå±å®ç°ç»èãæ¯å¦ Java æ¯å¦ä½å®ç°å¤çº¿ç¨çã仿ä½ç³»ç»çè§åº¦æ¥è¯´ï¼å®ç°å¤çº¿ç¨çæ¹å¼ä¸»è¦æä¸é¢è¿å ç§
**å¨ç¨æ·ç©ºé´ä¸å®ç°å¤çº¿ç¨**
**å¨å
æ ¸ç©ºé´ä¸å®ç°å¤çº¿ç¨**
**å¨ç¨æ·åå
æ ¸ç©ºé´ä¸æ··åå®ç°çº¿ç¨**
èæè®¤ä¸º Java åºè¯¥æ¯å¨ `ç¨æ·ç©ºé´` å®ç°çå¤çº¿ç¨ï¼å
æ ¸æ¯æç¥ä¸å° Java åå¨å¤çº¿ç¨æºå¶çãè¿æ¯ç¹ç¹å
ã
* Java å
·æé«æ§è½
æä»¬ç¼åç代ç ï¼ç»è¿ javac ç¼è¯å¨ç¼è¯ç§°ä¸º `åèç (bytecode)`ï¼ç»è¿ JVM å
åµçè§£éå¨å°åèç 转æ¢ä¸ºæºå¨ä»£ç ï¼è¿æ¯è§£éæ§è¡ï¼è¿ç§è½¬æ¢è¿ç¨æçè¾ä½ã使¯é¨å JVM çå®ç°æ¯å¦ `Hotspot JVM` 齿ä¾äº `JIT(Just-In-Time)` ç¼è¯å¨ï¼ä¹å°±æ¯é常æè¯´ç卿ç¼è¯ô±å¨ï¼JIT è½å¤å¨è¿è¡æ¶å°ô²çç¹ä»£ç ç¼è¯æºå¨ç ï¼è¿ç§æ¹å¼è¿è¡æçæ¯è¾é«ï¼è¿æ¯ç¼è¯æ§è¡ãæä»¥ Java ä¸ä»
ä»
åªæ¯ä¸ç§è§£éæ§è¡çè¯è¨ãè¿æ¯ç¹ç¹ä¸ã
* Java è¯è¨å
·æå¥å£®æ§
Java çå¼ºç±»åæºå¶ãå¼å¸¸å¤çãåå¾çèªå¨æ¶éçæ¯ Java ç¨åºå¥å£®æ§çéè¦ä¿è¯ãè¿ä¹æ¯ Java ä¸ C è¯è¨çéè¦åºå«ãè¿æ¯ç¹ç¹å
«ã
* Java å¾å®¹æå¼ååå¸å¼é¡¹ç®
Java è¯è¨æ¯æ Internet åºç¨çå¼åï¼Java 䏿 net apiï¼å®æä¾äºç¨äºç½ç»åºç¨ç¼ç¨çç±»åºï¼å
æ¬URLãURLConnectionãSocketãServerSocketçãJavaç `RMIï¼è¿ç¨æ¹æ³æ¿æ´»ï¼`æºå¶ä¹æ¯å¼ååå¸å¼åºç¨çéè¦ææ®µãè¿æ¯ç¹ç¹ä¹ã
### Java å¼åç¯å¢
#### JDK
`JDKï¼Java Development Kitï¼`称为 Java å¼åå
æ Java å¼åå·¥å
·ï¼æ¯ä¸ä¸ªç¼å Java ç Applet å°ç¨åºååºç¨ç¨åºçç¨åºå¼åç¯å¢ãJDKæ¯æ´ä¸ªJavaçæ ¸å¿ï¼å
æ¬äº`Javaè¿è¡ç¯å¢ï¼Java Runtime Environmentï¼`ï¼ä¸äº`Java å·¥å
·` å `Java çæ ¸å¿ç±»åºï¼Java APIï¼`ã

æä»¬å¯ä»¥è®¤çç ç©¶ä¸ä¸è¿å¼ å¾ï¼å®å ä¹å
æ¬äº Java 䏿æçæ¦å¿µï¼æä½¿ç¨çæ¯ `jdk1.8`ï¼å¯ä»¥ç¹è¿å» `Description of Java Conceptual Diagram`ï¼ å¯ä»¥åç°è¿éé¢å
æ¬äºææå
³äº Java çæè¿°
Oracle æä¾äºä¸¤ç§ Java å¹³å°çå®ç°ï¼ä¸ç§æ¯æä»¬ä¸é¢è¯´ç JDKï¼Java å¼åæ åå·¥å
·å
ï¼ä¸ç§æ¯ JREï¼å«åJava Runtime Environmentï¼Java è¿è¡æ¶ç¯å¢ãJDK çåè½è¦æ¯ JRE å
¨å¾å¤ã
#### JRE
JRE æ¯ä¸ªè¿è¡ç¯å¢ï¼JDK æ¯ä¸ªå¼åç¯å¢ãå æ¤å Java ç¨åºçæ¶åéè¦ JDKï¼èè¿è¡ Java ç¨åºçæ¶åå°±éè¦JREãè JDK éé¢å·²ç»å
å«äºJREï¼å æ¤åªè¦å®è£
äºJDKï¼å°±å¯ä»¥ç¼è¾ Java ç¨åºï¼ä¹å¯ä»¥æ£å¸¸è¿è¡ Java ç¨åºãä½ç±äº JDK å
å«äºè®¸å¤ä¸è¿è¡æ å
³çå
容ï¼å ç¨ç空é´è¾å¤§ï¼å æ¤è¿è¡æ®éç Java ç¨åºæ é¡»å®è£
JDKï¼èåªéè¦å®è£
JRE å³å¯ã
## Java å¼åç¯å¢é
ç½®
è¿ä¸ªå°æ¹ä¸åå¤è¯´äºï¼ç½ä¸æå¾å¤æç¨é
ç½®çèµæå¯ä¾åèã
## Java åºæ¬è¯æ³
å¨é
ç½®å® Java å¼åç¯å¢ï¼å¹¶ä¸è½½ Java å¼åå·¥å
·ï¼EclipseãIDEA çï¼åï¼å°±å¯ä»¥å Java 代ç äºï¼å 为æ¬ç¯æç« æ¯ä»å¤´æ¢³ç Java ä½ç³»ï¼æä»¥æå¿
è¦ä»åºç¡çæ¦å¿µå¼å§è°èµ·ã
### æ°æ®ç±»å
å¨ Java ä¸ï¼æ°æ®ç±»ååªæ`åç±»å
«ç§`
* æ´æ°åï¼byteãshortãintãlong
byte ä¹å°±æ¯åèï¼1 byte = 8 bitsï¼byte çé»è®¤å¼æ¯ 0 ï¼
short å ç¨ä¸¤ä¸ªåèï¼ä¹å°±æ¯ 16 ä½ï¼1 short = 16 bitsï¼å®çé»è®¤å¼ä¹æ¯ 0 ï¼
int å ç¨å个åèï¼ä¹å°±æ¯ 32 ä½ï¼1 int = 32 bitsï¼é»è®¤å¼æ¯ 0 ï¼
long å ç¨å
«ä¸ªåèï¼ä¹å°±æ¯ 64 ä½ï¼1 long = 64 bitsï¼é»è®¤å¼æ¯ 0Lï¼
æä»¥æ´æ°åçå ç¨åè大å°ç©ºé´ä¸º long > int > short > byte
* æµ®ç¹å
æµ®ç¹åæä¸¤ç§æ°æ®ç±»åï¼float å double
float æ¯å精度浮ç¹åï¼å ç¨ 4 ä½ï¼1 float = 32 bitsï¼é»è®¤å¼æ¯ 0.0fï¼
double æ¯å精度浮ç¹åï¼å ç¨ 8 ä½ï¼1 double = 64 bitsï¼é»è®¤å¼æ¯ 0.0dï¼
* å符å
å符åå°±æ¯ charï¼char ç±»åæ¯ä¸ä¸ªåä¸ç 16 ä½ Unicode åç¬¦ï¼æå°å¼æ¯ `\u0000 (ä¹å°±æ¯ 0 )`ï¼æå¤§å¼æ¯ `\uffff (å³ä¸º 65535)`ï¼char æ°æ®ç±»åå¯ä»¥åå¨ä»»ä½å符ï¼ä¾å¦ char a = 'A'ã
* å¸å°å
å¸å°åæçå°±æ¯ booleanï¼boolean åªæä¸¤ç§å¼ï¼true æè
æ¯ falseï¼åªè¡¨ç¤º 1 ä½ï¼é»è®¤å¼æ¯ falseã
ä»¥ä¸ `x ä½`é½æçæ¯å¨å
åä¸çå ç¨ã

### åºç¡è¯æ³
* 大å°åææï¼Java æ¯å¯¹å¤§å°åææçè¯è¨ï¼ä¾å¦ Hello ä¸ hello æ¯ä¸åçï¼è¿å
¶å®å°±æ¯ Java çå符串表示æ¹å¼
* ç±»åï¼å¯¹äºææçç±»æ¥è¯´ï¼é¦åæ¯åºè¯¥å¤§åï¼ä¾å¦ `MyFirstClass`
* å
åï¼å
ååºè¯¥å°½éä¿è¯å°åï¼ä¾å¦ `my.first.package`
* æ¹æ³åï¼æ¹æ³åé¦åæ¯éè¦å°åï¼å颿¯ä¸ªåè¯åæ¯é½éè¦å¤§åï¼ä¾å¦ `myFirstMethod()`
### è¿ç®ç¬¦
è¿ç®ç¬¦ä¸åª Java 䏿ï¼å
¶ä»è¯è¨ä¹æè¿ç®ç¬¦ï¼è¿ç®ç¬¦æ¯ä¸äºç¹æ®ç符å·ï¼ä¸»è¦ç¨äºæ°å¦å½æ°ãä¸äºç±»åçèµå¼è¯å¥åé»è¾æ¯è¾æ¹é¢ï¼æä»¬å°±ä»¥ Java 为ä¾ï¼æ¥çä¸ä¸è¿ç®ç¬¦ã
* èµå¼è¿ç®ç¬¦
èµå¼è¿ç®ç¬¦ä½¿ç¨æä½ç¬¦ `=` æ¥è¡¨ç¤ºï¼å®çæææ¯æ = å·å³è¾¹çå¼å¤å¶ç»å·¦è¾¹ï¼å³è¾¹çå¼å¯ä»¥æ¯ä»»ä½å¸¸æ°ãåéæè
表达å¼ï¼ä½å·¦è¾¹çå¼å¿
é¡»æ¯ä¸ä¸ªæç¡®çï¼å·²ç»å®ä¹çåéãæ¯å¦ `int a = 4`ã
使¯å¯¹äºå¯¹è±¡æ¥è¯´ï¼å¤å¶ç䏿¯å¯¹è±¡çå¼ï¼èæ¯å¯¹è±¡çå¼ç¨ï¼æä»¥å¦æè¯´å°ä¸ä¸ªå¯¹è±¡å¤å¶ç»å¦ä¸ä¸ªå¯¹è±¡ï¼å®é
䏿¯å°**ä¸ä¸ªå¯¹è±¡çå¼ç¨èµå¼ç»å¦ä¸ä¸ªå¯¹è±¡**ã
* ç®æ°è¿ç®ç¬¦
ç®æ°è¿ç®ç¬¦å°±åæ°å¦ä¸çæ°å¼è®¡ç®å·®ä¸å¤ï¼ä¸»è¦æ

ç®æ°è¿ç®ç¬¦éè¦æ³¨æçå°±æ¯`ä¼å
级é®é¢`ï¼å½ä¸ä¸ªè¡¨è¾¾å¼ä¸åå¨å¤ä¸ªæä½ç¬¦æ¶ï¼æä½ç¬¦çä¼å
级顺åºå°±å³å®äºè®¡ç®é¡ºåºï¼æç®åçè§åå°±æ¯å
ä¹é¤åå åï¼`()` çä¼å
级æé«ï¼æ²¡å¿
è¦è®°ä½ææçä¼å
级顺åºï¼ä¸ç¡®å®çç´æ¥ç¨ () å°±å¯ä»¥äºã
* èªå¢ãèªåè¿ç®ç¬¦
è¿ä¸ªå°±ä¸æåè§£éäºï¼è§£éä¸å¦ç´æ¥çä¾åæç½
```java
int a = 5;
b = ++a;
c = a++;
```
* æ¯è¾è¿ç®ç¬¦
æ¯è¾è¿ç®ç¬¦ç¨äºç¨åºä¸çåéä¹é´ï¼åéåèªåéä¹é´ä»¥åå
¶ä»ç±»åçä¿¡æ¯ä¹é´çæ¯è¾ã
æ¯è¾è¿ç®ç¬¦çè¿ç®ç»ææ¯ boolean åãå½è¿ç®ç¬¦å¯¹åºçå
³ç³»æç«æ¶ï¼è¿ç®çç»æä¸º trueï¼å¦å为 falseãæ¯è¾è¿ç®ç¬¦å
±æ 6 个ï¼é常ä½ä¸ºå¤æç便®ç¨äºæ¡ä»¶è¯å¥ä¸ã

* é»è¾è¿ç®ç¬¦
é»è¾è¿ç®ç¬¦ä¸»è¦æä¸ç§ï¼ä¸ãæãé

ä¸é¢æ¯é»è¾è¿ç®ç¬¦å¯¹åºç true/false 符å·è¡¨

* æä½è¿ç®ç¬¦
æä½è¿ç®ç¬¦ç¨æ¥æä½æ´æ°åºæ¬ç±»åä¸çæ¯ä¸ª`æ¯ç¹`ä½ï¼ä¹å°±æ¯äºè¿å¶ä½ãæä½æä½ç¬¦ä¼å¯¹ä¸¤ä¸ªåæ°ä¸å¯¹åºç使§è¡å¸å°ä»£æ°è¿ç®ï¼å¹¶æç»çæä¸ä¸ªç»æã
| è¿ç®ç¬¦ | ä½ç¨ |
| ------ | ------------------- |
| & | ä¸ eg: 4 & 5 = 4 |
| \| | æ eg: 4 \| 5 = 5 |
| ~ | é eg: ~4 = ~5 |
| ^ | 弿 eg : 4 ^ 5 = 1 |
妿è¿è¡æ¯è¾çåæ¹æ¯æ°åçè¯ï¼é£ä¹è¿è¡æ¯è¾å°±ä¼å为æä½è¿ç®ã
æä½ä¸ï¼æä½è¿è¡ä¸è¿ç®ï¼ANDï¼ï¼ä¸¤ä¸ªæä½æ°ä¸ä½é½ä¸º1ï¼ç»ææä¸º1ï¼å¦åç»æä¸º0ãéè¦é¦å
ææ¯è¾åæ¹è½¬æ¢æäºè¿å¶åææ¯ä¸ªä½è¿è¡æ¯è¾
æä½æï¼æä½è¿è¡æè¿ç®ï¼ORï¼ï¼ä¸¤ä¸ªä½åªè¦æä¸ä¸ªä¸º1ï¼é£ä¹ç»æå°±æ¯1ï¼å¦å就为0ã
æä½å¼æï¼æä½è¿è¡å¼æè¿ç®ï¼XORï¼ï¼å¦æä½ä¸º0ï¼ç»ææ¯1ï¼å¦æä½ä¸º1ï¼ç»ææ¯0ã
æä½éï¼æä½è¿è¡ååè¿ç®ï¼NOTï¼ï¼ä¸¤ä¸ªæä½æ°çä½ä¸ï¼ç¸ååç»æä¸º0ï¼ä¸ååç»æä¸º1ã
* ç§»ä½è¿ç®ç¬¦
ç§»ä½è¿ç®ç¬¦ç¨æ¥å°æä½æ°åæä¸ªæ¹åï¼åå·¦æè
å³ï¼ç§»å¨æå®çäºè¿å¶ä½æ°ã

* ä¸å
è¿ç®ç¬¦
ä¸å
è¿ç®ç¬¦æ¯ç±»ä¼¼ `if...else...` è¿ç§çæä½ç¬¦ï¼è¯æ³ä¸ºï¼**æ¡ä»¶è¡¨è¾¾å¼ï¼è¡¨è¾¾å¼ 1ï¼è¡¨è¾¾å¼ 2**ãé®å·åé¢çä½ç½®æ¯å¤æçæ¡ä»¶ï¼å¤æç»æä¸ºå¸å°åï¼ä¸º true æ¶è°ç¨è¡¨è¾¾å¼ 1ï¼ä¸º false æ¶è°ç¨è¡¨è¾¾å¼ 2ã
## Java æ§è¡æ§å¶æµç¨
Java ä¸çæ§å¶æµç¨å
¶å®å C 䏿 ·ï¼å¨ Java ä¸ï¼æµç¨æ§å¶ä¼æ¶åå°å
æ¬ **if-elseãwhileãdo-whileãforãreturnãbreak** 以åéæ©è¯å¥ `switch`ãä¸é¢ä»¥æ¤è¿è¡åæ
### æ¡ä»¶è¯å¥
æ¡ä»¶è¯å¥å¯æ ¹æ®ä¸åçæ¡ä»¶æ§è¡ä¸åçè¯å¥ãå
æ¬ if æ¡ä»¶è¯å¥ä¸ switch å¤åæ¯è¯å¥ã
#### if æ¡ä»¶è¯å¥
if è¯å¥å¯ä»¥åç¬å¤æè¡¨è¾¾å¼çç»æï¼è¡¨ç¤ºè¡¨è¾¾çæ§è¡ç»æï¼ä¾å¦
```java
int a = 10;
if(a > 10){
return true;
}
return false;
```
#### if...else æ¡ä»¶è¯å¥
if è¯å¥è¿å¯ä»¥ä¸ else è¿ç¨ï¼é常表ç°ä¸º **å¦ææ»¡è¶³æç§æ¡ä»¶ï¼å°±è¿è¡æç§å¤çï¼å¦åå°±è¿è¡å¦ä¸ç§å¤ç**ã
```java
int a = 10;
int b = 11;
if(a >= b){
System.out.println("a >= b");
}else{
System.out.println("a < b");
}
```
if åç () å
ç表达å¼å¿
é¡»æ¯ boolean åçãå¦æä¸º trueï¼åæ§è¡ if åçå¤åè¯å¥ï¼å¦æä¸º falseï¼åæ§è¡ else åçå¤åè¯å¥ã
#### if...else if å¤åæ¯è¯å¥
ä¸é¢ä¸ç if...else æ¯å忝åä¸¤ä¸ªåæ¯ç夿ï¼å¦ææå¤ä¸ªå¤ææ¡ä»¶ï¼å°±éè¦ä½¿ç¨ **if...else if**
```java
int x = 40;
if(x > 60) {
System.out.println("xçå¼å¤§äº60");
} else if (x > 30) {
System.out.println("xçå¼å¤§äº30ä½å°äº60");
} else if (x > 0) {
System.out.println("xçå¼å¤§äº0ä½å°äº30");
} else {
System.out.println("xçå¼å°äºçäº0");
}
```
#### switch å¤åæ¯è¯å¥
ä¸ç§æ¯ **if...else if ** è¯å¥æ´ä¼é
çæ¹å¼æ¯ä½¿ç¨ `switch` å¤åæ¯è¯å¥ï¼å®ç示ä¾å¦ä¸
```java
switch (week) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("No Else");
break;
}
```
### 循ç¯è¯å¥
循ç¯è¯å¥å°±æ¯å¨æ»¡è¶³ä¸å®çæ¡ä»¶ä¸å夿§è¡æä¸è¡¨è¾¾å¼çæä½ï¼ç´å°æ»¡è¶³å¾ªç¯è¯å¥çè¦æ±ã使ç¨ç循ç¯è¯å¥ä¸»è¦æ **forãdo...while() ã while **ï¼
#### while 循ç¯è¯å¥
while 循ç¯è¯å¥çå¾ªç¯æ¹å¼ä¸ºå©ç¨ä¸ä¸ªæ¡ä»¶æ¥æ§å¶æ¯å¦è¦ç»§ç»å夿§è¡è¿ä¸ªè¯å¥ãwhile 循ç¯è¯å¥çæ ¼å¼å¦ä¸
```java
while(å¸å°å¼){
表达å¼
}
```
å®çå«ä¹æ¯ï¼å½ (å¸å°å¼) 为 true çæ¶åï¼æ§è¡ä¸é¢ç表达å¼ï¼å¸å°å¼ä¸º false çæ¶åï¼ç»æå¾ªç¯ï¼å¸å°å¼å
¶å®ä¹æ¯ä¸ä¸ªè¡¨è¾¾å¼ï¼æ¯å¦
```java
int a = 10;
while(a > 5){
a--;
}
```
#### do...while 循ç¯
while ä¸ do...while 循ç¯çå¯ä¸åºå«æ¯ do...while è¯å¥è³å°æ§è¡ä¸æ¬¡ï¼å³ä½¿ç¬¬ä¸æ¬¡ç表达å¼ä¸º falseãèå¨ while 循ç¯ä¸ï¼å¦æç¬¬ä¸æ¬¡æ¡ä»¶ä¸º falseï¼é£ä¹å
¶ä¸çè¯å¥æ ¹æ¬ä¸ä¼æ§è¡ãå¨å®é
åºç¨ä¸ï¼while è¦æ¯ do...while åºç¨çæ´å¹¿ãå®çä¸è¬å½¢å¼å¦ä¸
```java
int b = 10;
// do···while循ç¯è¯å¥
do {
System.out.println("b == " + b);
b--;
} while(b == 1);
```
#### for 循ç¯è¯å¥
for å¾ªç¯æ¯æä»¬ç»å¸¸ä½¿ç¨çå¾ªç¯æ¹å¼ï¼è¿ç§å½¢å¼ä¼å¨ç¬¬ä¸æ¬¡è¿ä»£åè¿è¡åå§åãå®çå½¢å¼å¦ä¸
```java
for(åå§å; å¸å°è¡¨è¾¾å¼; æ¥è¿){}
```
æ¯æ¬¡è¿ä»£å伿µè¯å¸å°è¡¨è¾¾å¼ã妿è·å¾çç»ææ¯ falseï¼å°±ä¼æ§è¡ for è¯å¥åé¢ç代ç ï¼æ¯æ¬¡å¾ªç¯ç»æï¼ä¼æç
§æ¥è¿ç弿§è¡ä¸ä¸æ¬¡å¾ªç¯ã
**éå·æä½ç¬¦**
è¿éä¸å¯å¿½ç¥çä¸ä¸ªå°±æ¯éå·æä½ç¬¦ï¼Java éå¯ä¸ç¨å°éå·æä½ç¬¦çå°±æ¯ for å¾ªç¯æ§å¶è¯å¥ãå¨è¡¨è¾¾å¼çåå§åé¨åï¼å¯ä»¥ä½¿ç¨ä¸ç³»åçéå·åéçè¯å¥ï¼éè¿éå·æä½ç¬¦ï¼å¯ä»¥å¨ for è¯å¥å
å®ä¹å¤ä¸ªåéï¼ä½å®ä»¬å¿
é¡»å
·æç¸åçç±»å
```java
for(int i = 1,j = i + 10;i < 5;i++, j = j * 2){}
```
**for-each è¯å¥**
å¨ Java JDK 1.5 ä¸è¿å¼å
¥äºä¸ç§æ´å ç®æ´çãæ¹ä¾¿å¯¹æ°ç»åéåè¿è¡éåçæ¹æ³ï¼å³ `for-each` è¯å¥ï¼ä¾åå¦ä¸
```java
int array[] = {7, 8, 9};
for (int arr : array) {
System.out.println(arr);
}
```
### 跳转è¯å¥
Java è¯è¨ä¸ï¼æä¸ç§è·³è½¬è¯å¥: **breakãcontinue å return**
#### break è¯å¥
break è¯å¥æä»¬å¨ switch ä¸å·²ç»è§å°äºï¼å®æ¯ç¨äºç»æ¢å¾ªç¯çæä½ï¼å®é
ä¸ break è¯å¥å¨forãwhileãdo···while循ç¯è¯å¥ä¸ï¼ç¨äºå¼ºè¡éåºå½å循ç¯ï¼ä¾å¦
```java
for(int i = 0;i < 10;i++){
if(i == 5){
break;
}
}
```
#### continue è¯å¥
continue ä¹å¯ä»¥æ¾å¨å¾ªç¯è¯å¥ä¸ï¼å®ä¸ break è¯å¥å
·æç¸åçææï¼å®çä½ç¨æ¯ç¨äºæ§è¡ä¸ä¸æ¬¡å¾ªç¯ï¼è䏿¯éåºå½å循ç¯ï¼è¿ä»¥ä¸é¢çä¾å为主
```java
for(int i = 0;i < 10;i++){
System.out.printl(" i = " + i );
if(i == 5){
System.out.printl("continue ... ");
continue;
}
}
```
**return è¯å¥**
return è¯å¥å¯ä»¥ä»ä¸ä¸ªæ¹æ³è¿åï¼å¹¶ææ§å¶æäº¤ç»è°ç¨å®çè¯å¥ã
```java
public void getName() {
return name;
}
```
## é¢å对象
ä¸é¢æä»¬æ¥æ¢è®¨é¢åå¯¹è±¡çææ³ï¼é¢åå¯¹è±¡çææ³å·²ç»éæ¥å代äºè¿ç¨åçææ³ --- é¢åè¿ç¨ï¼Java æ¯é¢å对象çé«çº§ç¼ç¨è¯è¨ï¼é¢å对象è¯è¨å
·æå¦ä¸ç¹å¾
* é¢å对象æ¯ä¸ç§å¸¸è§çææ³ï¼æ¯è¾ç¬¦å人们çæèä¹ æ¯ï¼
* é¢å对象å¯ä»¥å°å¤æçä¸å¡é»è¾ç®ååï¼å¢å¼ºä»£ç å¤ç¨æ§ï¼
* é¢å对象å
·ææ½è±¡ãå°è£
ãç»§æ¿ã夿çç¹æ§ã
é¢å对象çç¼ç¨è¯è¨ä¸»è¦æï¼C++ãJavaãC#çã
æä»¥å¿
é¡»çæé¢åå¯¹è±¡çææ³æè½ç¼ååº Java ç¨åºã
### ç±»ä¹æ¯ä¸ç§å¯¹è±¡
ç°å¨æä»¬æ¥è®¤è¯ä¸ä¸ªé¢åå¯¹è±¡çæ°çæ¦å¿µ --- ç±»ï¼ä»ä¹æ¯ç±»ï¼å®å°±ç¸å½äºæ¯ä¸ç³»åå¯¹è±¡çæ½è±¡ï¼å°±æ¯å¦ä¹¦ç±ä¸æ ·ï¼ç±»ç¸å½äºæ¯ä¹¦çå°é¢ï¼å¤§å¤æ°é¢å对象çè¯è¨é½ä½¿ç¨ `class` æ¥å®ä¹ç±»ï¼å®åè¯ä½ å®éé¢å®ä¹çå¯¹è±¡é½æ¯ä»ä¹æ ·çï¼æä»¬ä¸è¬ä½¿ç¨ä¸é¢æ¥å®ä¹ç±»
```java
class ClassName {
// body;
}
```
ä»£ç æ®µä¸æ¶åä¸ä¸ªæ°çæ¦å¿µ `//` ï¼è¿ä¸ªæä»¬åé¢ä¼è¯´ãä¸é¢ï¼ä½ 声æäºä¸ä¸ª class ç±»ï¼ç°å¨ï¼ä½ å°±å¯ä»¥ä½¿ç¨ new æ¥å建è¿ä¸ªå¯¹è±¡
```java
ClassName classname = new ClassName();
```
ä¸è¬ï¼ç±»çå½åéµå¾ª`驼峰åå`ï¼å®çå®ä¹å¦ä¸
>éªé©¼å¼å½åæ³ï¼Camel-Caseï¼å称驼峰å¼å½åæ³ï¼æ¯çµèç¨å¼ç¼åæ¶çä¸å¥å½åè§åï¼æ¯ä¾ï¼ãæ£å¦å®çåç§° CamelCase æè¡¨ç¤ºç飿 ·ï¼æ¯ææ··å使ç¨å¤§å°ååæ¯æ¥ææåéå彿°çååãç¨åºå们为äºèªå·±ç代ç è½æ´å®¹æçå¨åè¡ä¹é´äº¤æµï¼æä»¥å¤éåç»ä¸çå¯è¯»æ§æ¯è¾å¥½çå½åæ¹å¼ã
### 对象çå建
å¨ Java ä¸ï¼**ä¸äºä¸ç©é½æ¯å¯¹è±¡**ãè¿å¥è¯ç¸ä¿¡ä½ ä¸å®ä¸éçï¼å°½ç®¡ä¸åé½ç使¯å¯¹è±¡ï¼ä½æ¯ä½ æçºµçå´æ¯ä¸ä¸ªå¯¹è±¡ç `å¼ç¨(reference)`ãå¨è¿éæä¸ä¸ªå¾å½¢è±¡çæ¯å»ï¼ä½ å¯ä»¥æè½¦é¥åå车ç使¯ä¸ç»**对象å¼ç¨å对象**çç»åãå½ä½ æ³è¦å¼è½¦çæ¶åï¼ä½ é¦å
éè¦æ¿åºè½¦é¥åç¹å»å¼éçé项ï¼å车æ¶ï¼ä½ éè¦ç¹å»å 鿥é车ã车é¥åç¸å½äºå°±æ¯å¼ç¨ï¼è½¦å°±æ¯å¯¹è±¡ï¼ç±è½¦é¥åæ¥é©±å¨è½¦çå éåå¼éãå¹¶ä¸ï¼å³ä½¿æ²¡æè½¦çåå¨ï¼è½¦é¥å乿¯ä¸ä¸ªç¬ç«åå¨çå®ä½ï¼ä¹å°±æ¯è¯´ï¼**ä½ æä¸ä¸ªå¯¹è±¡å¼ç¨ï¼ä½ä½ ä¸ä¸å®éè¦ä¸ä¸ªå¯¹è±¡ä¸ä¹å
³è**ï¼ä¹å°±æ¯
```java
Car carKey;
```
è¿éå建çåªæ¯å¼ç¨ï¼èå¹¶é对象ï¼ä½æ¯å¦æä½ æ³è¦ä½¿ç¨ s è¿ä¸ªå¼ç¨æ¶ï¼ä¼è¿åä¸ä¸ªå¼å¸¸ï¼åè¯ä½ éè¦ä¸ä¸ªå¯¹è±¡æ¥åè¿ä¸ªå¼ç¨è¿è¡å
³èãä¸ç§å®å
¨çåæ³æ¯ï¼å¨å建对象å¼ç¨æ¶åæ¶æä¸ä¸ªå¯¹è±¡èµç»å®ã
```java
Car carKey = new Car();
```
å¨ Java ä¸ï¼ä¸æ¦å建äºä¸ä¸ªå¼ç¨ï¼å°±å¸æå®è½ä¸ä¸ä¸ªæ°ç对象è¿è¡å
³èï¼éå¸¸ä½¿ç¨ `new` æä½ç¬¦æ¥å®ç°è¿ä¸ç®çãnew çæææ¯ï¼ç»æä¸ä¸ªæ°`对象`ï¼å¦æä½ 䏿³ç¸äº²ï¼èªå·± new ä¸ä¸ªå¯¹è±¡å°±å¥½äºãç¥ä½ ä¸è¾å幸ç¦ã
### 屿§åæ¹æ³
ç±»ä¸ä¸ªæåºæ¬çè¦ç´ å°±æ¯æå±æ§åæ¹æ³ã
屿§ä¹è¢«ç§°ä¸ºå段ï¼å®æ¯ç±»çéè¦ç»æé¨åï¼å±æ§å¯ä»¥æ¯ä»»æç±»åç对象ï¼ä¹å¯ä»¥æ¯åºæ¬æ°æ®ç±»åãä¾å¦ä¸
```java
class A{
int a;
Apple apple;
}
```
ç±»ä¸è¿åºè¯¥å
æ¬æ¹æ³ï¼æ¹æ³è¡¨ç¤ºçæ¯ **åæäºäºæ
çæ¹å¼**ãæ¹æ³å
¶å®å°±æ¯å½æ°ï¼åªä¸è¿ Java ä¹ æ¯æå½æ°ç§°ä¸ºæ¹æ³ãè¿ç§å«æ³ä¹ä½ç°äºé¢åå¯¹è±¡çæ¦å¿µã
æ¹æ³çåºæ¬ç»æå
æ¬ **æ¹æ³åç§°ãåæ°ãè¿åå¼åæ¹æ³ä½**ï¼ ä¸é¢æ¯å®ç示ä¾
```java
public int getResult(){
// ...
return 1;
}
```
å
¶ä¸ï¼`getResult` å°±æ¯æ¹æ³åç§°ã`()` éé¢è¡¨ç¤ºæ¹æ³æ¥æ¶çåæ°ã`return` è¡¨ç¤ºæ¹æ³çè¿åå¼ãæä¸ç§ç¹æ®çåæ°ç±»å --- `void` è¡¨ç¤ºæ¹æ³æ è¿åå¼ã`{}` å
å«çä»£ç æ®µè¢«ç§°ä¸ºæ¹æ³ä½ã
#### æé æ¹æ³
å¨ Java ä¸ï¼æä¸ç§ç¹æ®çæ¹æ³è¢«ç§°ä¸º `æé æ¹æ³`ï¼ä¹è¢«ç§°ä¸ºæé 彿°ãæé å¨çãå¨ Java ä¸ï¼éè¿æä¾è¿ä¸ªæé å¨ï¼æ¥ç¡®ä¿æ¯ä¸ªå¯¹è±¡é½è¢«åå§åãæé æ¹æ³åªè½å¨å¯¹è±¡çåå»ºæ¶æè°ç¨ä¸æ¬¡ï¼ä¿è¯äºå¯¹è±¡åå§åçè¿è¡ãæé æ¹æ³æ¯è¾ç¹æ®ï¼å®æ²¡æåæ°ç±»ååè¿åå¼ï¼å®çåç§°è¦åç±»åä¿æä¸è´ï¼å¹¶ä¸æé æ¹æ³å¯ä»¥æå¤ä¸ªï¼ä¸é¢æ¯ä¸ä¸ªæé æ¹æ³ç示ä¾
```java
class Apple {
int sum;
String color;
public Apple(){}
public Apple(int sum){}
public Apple(String color){}
public Apple(int sum,String color){}
}
```
ä¸é¢å®ä¹äºä¸ä¸ª Apple ç±»ï¼ä½ ä¼åç°è¿ä¸ª Apple 类没æåæ°ç±»ååè¿åå¼ï¼å¹¶ä¸æå¤ä¸ªä»¥ Apple ååçæ¹æ³ï¼èä¸å个 Apple çåæ°å表é½ä¸ä¸æ ·ï¼è¿å
¶å®æ¯ä¸ç§å¤æçä½ç°ï¼æä»¬åé¢ä¼è¯´ãå¨å®ä¹å®ææé æ¹æ³åï¼æä»¬å°±è½å¤å建 Apple 对象äºã
```java
class createApple {
public static void main(String[] args) {
Apple apple1 = new Apple();
Apple apple2 = new Apple(1);
Apple apple3 = new Apple("red");
Apple apple4 = new Apple(2,"color");
}
}
```
å¦ä¸é¢æç¤ºï¼æä»¬å®ä¹äºå个 Apple 对象ï¼å¹¶è°ç¨äº Apple çåç§ä¸åçæé æ¹æ³ï¼å
¶ä¸ï¼ä¸å ä»»ä½åæ°çæé æ¹æ³è¢«ç§°ä¸ºé»è®¤çæé æ¹æ³ï¼ä¹å°±æ¯
```java
Apple apple1 = new Apple();
```
å¦æç±»ä¸æ²¡æå®ä¹ä»»ä½æé æ¹æ³ï¼é£ä¹ JVM ä¼ä¸ºä½ èªå¨çæä¸ä¸ªæé æ¹æ³ï¼å¦ä¸
```java
class Apple {
int sum;
String color;
}
class createApple {
public static void main(String[] args) {
Apple apple1 = new Apple();
}
}
```
ä¸é¢ä»£ç ä¸ä¼åçç¼è¯é误ï¼å 为 Apple 对象å
å«äºä¸ä¸ªé»è®¤çæé æ¹æ³ã
é»è®¤çæé æ¹æ³ä¹è¢«ç§°ä¸ºé»è®¤æé 卿è
æ åæé å¨ã
è¿ééè¦æ³¨æä¸ç¹çæ¯ï¼å³ä½¿ JVM ä¼ä¸ºä½ é»è®¤æ·»å ä¸ä¸ªæ åçæé å¨ï¼ä½æ¯å¦æä½ æå¨å®ä¹äºä»»ä½ä¸ä¸ªæé æ¹æ³ï¼**JVM å°±ä¸åä¸ºä½ æä¾é»è®¤çæé å¨ï¼ä½ å¿
é¡»æå¨æå®ï¼å¦åä¼åºç°ç¼è¯é误**ã
æ¾ç¤ºçé误æ¯ï¼å¿
é¡»æä¾ Apple 带æ int åæ°çæé 彿°ï¼èé»è®¤çæ åæé 彿°æ²¡æè¢«å
许使ç¨ã
#### æ¹æ³éè½½
å¨ Java ä¸ä¸ä¸ªå¾éè¦çæ¦å¿µæ¯æ¹æ³çéè½½ï¼å®æ¯ç±»åçä¸å表ç°å½¢å¼ãæä»¬ä¸é¢è¯´å°äºæé 彿°ï¼å
¶å®æé 彿°ä¹æ¯éè½½çä¸ç§ãå¦å¤ä¸ç§å°±æ¯æ¹æ³çéè½½
```java
public class Apple {
int sum;
String color;
public Apple(){}
public Apple(int sum){}
public int getApple(int num){
return 1;
}
public String getApple(String color){
return "color";
}
}
```
å¦ä¸é¢æç¤ºï¼å°±æä¸¤ç§éè½½çæ¹å¼ï¼ä¸ç§æ¯ Apple æé 彿°çéè½½ï¼ä¸ç§æ¯ getApple æ¹æ³çéè½½ã
使¯è¿æ ·å°±æ¶åå°ä¸ä¸ªé®é¢ï¼è¦æ¯æå 个ç¸åçååï¼Java å¦ä½ç¥éä½ è°ç¨çæ¯åªä¸ªæ¹æ³å¢ï¼è¿éè®°ä½ä¸ç¹å³å¯ï¼**æ¯ä¸ªéè½½çæ¹æ³é½æç¬ä¸æ äºçåæ°å表**ãå
¶ä¸å
æ¬åæ°çç±»åã顺åºãåæ°æ°éçï¼æ»¡è¶³ä¸ç§ä¸ä¸ªå ç´ å°±ææäºéè½½çå¿
è¦æ¡ä»¶ã
请记ä½ä¸é¢éè½½çæ¡ä»¶
* æ¹æ³åç§°å¿
é¡»ç¸åã
* åæ°å表å¿
é¡»ä¸åï¼ä¸ªæ°ä¸åãæç±»åä¸åãåæ°ç±»åæå顺åºä¸åçï¼ã
* æ¹æ³çè¿åç±»åå¯ä»¥ç¸åä¹å¯ä»¥ä¸ç¸åã
* ä»
ä»
è¿åç±»åä¸åä¸è¶³ä»¥æä¸ºæ¹æ³çéè½½ã
* éè½½æ¯åçå¨ç¼è¯æ¶çï¼å 为ç¼è¯å¨å¯ä»¥æ ¹æ®åæ°çç±»åæ¥éæ©ä½¿ç¨åªä¸ªæ¹æ³ã
#### æ¹æ³çéå
æ¹æ³çéåä¸éè½½è½ç¶ååå¾ç¸ä¼¼ï¼ä½å´å®å
¨æ¯ä¸åçä¸è¥¿ãæ¹æ³éåçæè¿°æ¯å¯¹`åç±»åç¶ç±»`ä¹é´çãèéè½½æçæ¯åä¸ç±»ä¸çãä¾å¦å¦ä¸ä»£ç
```java
class Fruit {
public void eat(){
System.out.printl('eat fruit');
}
}
class Apple extends Fruit{
@Override
public void eat(){
System.out.printl('eat apple');
}
}
```
ä¸é¢è¿æ®µä»£ç æè¿°çå°±æ¯éåç代ç ï¼ä½ å¯ä»¥çå°ï¼åç±» Apple ä¸çæ¹æ³åç¶ç±» Fruit ä¸çæ¹æ³ååï¼æä»¥ï¼æä»¬è½å¤æ¨æåºéåçåå
* éåçæ¹æ³å¿
é¡»è¦åç¶ç±»ä¿æä¸è´ï¼å
æ¬**è¿åå¼ç±»å,æ¹æ³å,åæ°å表** ä¹é½ä¸æ ·ã
* éåçæ¹æ³å¯ä»¥ä½¿ç¨ `@Override` æ³¨è§£æ¥æ è¯
* åç±»ä¸éåæ¹æ³çè®¿é®æéä¸è½ä½äºç¶ç±»ä¸æ¹æ³çè®¿é®æéã
### åå§å
#### ç±»çåå§å
ä¸é¢æä»¬åå»ºåºæ¥äºä¸ä¸ª Car è¿ä¸ªå¯¹è±¡ï¼å
¶å®å¨ä½¿ç¨ new å
³é®åå建ä¸ä¸ªå¯¹è±¡çæ¶åï¼å
¶å®æ¯è°ç¨äºè¿ä¸ªå¯¹è±¡æ åæ°çæé æ¹æ³è¿è¡çåå§åï¼ä¹å°±æ¯å¦ä¸è¿æ®µä»£ç
```java
class Car{
public Car(){}
}
```
è¿ä¸ªæ åæ°çæé 彿°å¯ä»¥éèï¼ç± JVM èªå¨æ·»å ãä¹å°±æ¯è¯´ï¼æé 彿°è½å¤ç¡®ä¿ç±»çåå§åã
#### æååå§å
Java ä¼å°½éä¿è¯æ¯ä¸ªåéå¨ä½¿ç¨åé½ä¼è·å¾åå§åï¼åå§åæ¶å两ç§åå§åã
* ä¸ç§æ¯ç¼è¯å¨é»è®¤æå®çåæ®µåå§åï¼åºæ¬æ°æ®ç±»åçåå§å

ä¸ç§æ¯å
¶ä»å¯¹è±¡ç±»åçåå§åï¼String 乿¯ä¸ç§å¯¹è±¡ï¼å¯¹è±¡çåå§å¼é½ä¸º `null` ï¼å
¶ä¸ä¹å
æ¬åºæ¬ç±»åçå
è£
ç±»ã
* ä¸ç§æ¯æå®æ°å¼çåå§åï¼ä¾å¦
```java
int a = 11
```
ä¹å°±æ¯è¯´ï¼ æå® a çåå§åå¼ä¸æ¯ 0 ï¼èæ¯ 11ãå
¶ä»åºæ¬ç±»åå对象类å乿¯ä¸æ ·çã
#### æé å¨åå§å
å¯ä»¥å©ç¨æé 卿¥å¯¹æäºæ¹æ³åæäºå¨ä½è¿è¡åå§åï¼ç¡®å®åå§å¼ï¼ä¾å¦
```java
public class Counter{
int i;
public Counter(){
i = 11;
}
}
```
å©ç¨æé 彿°ï¼è½å¤æ i çå¼åå§å为 11ã
#### åå§å顺åº
é¦å
å
æ¥çä¸ä¸æåªäºéè¦æ¢è®¨çåå§å顺åº
* éæå±æ§ï¼static å¼å¤´å®ä¹ç屿§
* éææ¹æ³åï¼ static {} å
èµ·æ¥ç代ç å
* æ®é屿§ï¼ é static å®ä¹ç屿§
* æ®éæ¹æ³åï¼ {} å
èµ·æ¥ç代ç å
* æé 彿°ï¼ ç±»åç¸åçæ¹æ³
* æ¹æ³ï¼ æ®éæ¹æ³
```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);
}
// æé 彿°
public LifeCycle() {
System.out.println("æé 彿°åå§å");
}
public static String getStaticField() {
String statiFiled = "Static Field Initial";
return statiFiled;
}
public static String getField() {
String filed = "Field Initial";
return filed;
}
// 䏻彿°
public static void main(String[] argc) {
new LifeCycle();
}
}
```
è¿æ®µä»£ç çæ§è¡ç»æå°±ååºäºå®çåå§å顺åº
éæå±æ§åå§å
éææ¹æ³ååå§å
æ®é屿§åå§å
æ®éæ¹æ³ååå§å
æé 彿°åå§å
#### æ°ç»åå§å
æ°ç»æ¯ç¸åç±»åçãç¨ä¸ä¸ªæ è¯ç¬¦åç§°å°è£
å°ä¸èµ·çä¸ä¸ªå¯¹è±¡åºåæåºæ¬ç±»åæ°æ®åºåãæ°ç»æ¯éè¿æ¹æ¬å·ä¸æ æä½ç¬¦ `[]` æ¥å®ä¹ä½¿ç¨ã
ä¸è¬æ°ç»æ¯è¿ä¹å®ä¹ç
```java
int[] a1;
//æè
int a1[];
```
ä¸¤ç§æ ¼å¼çå«ä¹æ¯ä¸æ ·çã
* ç´æ¥ç»æ¯ä¸ªå
ç´ èµå¼ : int array[4] = {1,2,3,4};
* ç»ä¸é¨åèµå¼ï¼åé¢çé½ä¸º 0 ï¼ int array[4] = {1,2};
* ç±èµå¼åæ°ä¸ªæ°å³å®æ°ç»çä¸ªæ° ï¼ int array[] = {1,2};
**å¯ååæ°å表**
Java ä¸ä¸ç§æ°ç»å·é¨çç¨æ³å°±æ¯`å¯ååæ°` ï¼å¯ååæ°çå®ä¹å¦ä¸
```java
public int add(int... numbers){
int sum = 0;
for(int num : numbers){
sum += num;
}
return sum;
}
```
ç¶åï¼ä½ å¯ä»¥ä½¿ç¨ä¸é¢è¿å ç§æ¹å¼è¿è¡å¯ååæ°çè°ç¨
```java
add(); // ä¸ä¼ åæ°
add(1); // ä¼ éä¸ä¸ªåæ°
add(2,1); // ä¼ éå¤ä¸ªåæ°
add(new Integer[] {1, 3, 2}); // ä¼ éæ°ç»
```
### 对象ç鿝
è½ç¶ Java è¯è¨æ¯åºäº C++ çï¼ä½æ¯å®å C/C++ ä¸ä¸ªéè¦çç¹å¾å°±æ¯ä¸éè¦æå¨ç®¡ç对象ç鿝工ä½ãå¨èåçä¸ä¹¦ ãæ·±å
¥çè§£ Java èææºã䏿å°ä¸ä¸ªè§ç¹

å¨ Java ä¸ï¼æä»¬ä¸åéè¦æå¨ç®¡ç对象ç鿝ï¼å®æ¯ç± `Java èææº`è¿è¡ç®¡çå鿝çãè½ç¶æä»¬ä¸éè¦æå¨ç®¡ç对象ï¼ä½æ¯ä½ éè¦ç¥é `对象ä½ç¨å` è¿ä¸ªæ¦å¿µã
#### 对象ä½ç¨å
J夿°è¯è¨é½æ`ä½ç¨å(scope)` è¿ä¸ªæ¦å¿µãä½ç¨åå³å®äºå
¶å
é¨å®ä¹çåéåçå¯è§æ§åçå½å¨æãå¨ CãC++ å Java ä¸ï¼ä½ç¨åéå¸¸ç± `{}` çä½ç½®æ¥å³å®ï¼ä¾å¦
```java
{
int a = 11;
{
int b = 12;
}
}
```
a åéä¼å¨ä¸¤ä¸ª `{}` ä½ç¨åå
ææï¼è b åéçå¼åªè½å¨å®èªå·±ç `{}` å
ææã
è½ç¶åå¨ä½ç¨åï¼ä½æ¯ä¸å
è®¸è¿æ ·å
```java
{
int x = 11;
{
int x = 12;
}
}
```
è¿ç§åæ³å¨ C/C++ 䏿¯å¯ä»¥çï¼ä½æ¯å¨ Java ä¸ä¸å
è®¸è¿æ ·åï¼å 为 Java 设计è
è®¤ä¸ºè¿æ ·åä¼å¯¼è´ç¨åºæ··ä¹±ã
###this å super
this å super 齿¯ Java ä¸çå
³é®å
this 表示çå½å对象ï¼this å¯ä»¥è°ç¨æ¹æ³ãè°ç¨å±æ§åæå对象æ¬èº«ãthis å¨ Java ä¸ç使ç¨ä¸è¬æä¸ç§ï¼æåå½å对象
```java
public class Apple {
int i = 0;
Apple eatApple(){
i++;
return this;
}
public static void main(String[] args) {
Apple apple = new Apple();
apple.eatApple().eatApple();
}
}
```
è¿æ®µä»£ç æ¯è¾ç²¾å¦ï¼ç²¾å¦å¨åªå¢ï¼æä¸ä¸ª eatApple() æ¹æ³ç«ç¶å¯ä»¥è°ç¨å¤æ¬¡ï¼ä½ å¨åé¢è¿å¯ä»¥ç»§ç»è°ç¨ï¼è¿å°±å¾ç¥å¥äºï¼ä¸ºå¥å¢ï¼å
¶å®å°±æ¯ this å¨ä½ç¥äºï¼æå¨ `eatApple ` æ¹æ³ä¸å äºä¸ä¸ª `return this` çè¿åå¼ï¼ä¹å°±æ¯è¯´åªä¸ªå¯¹è±¡è°ç¨ eatApple æ¹æ³é½è½è¿å对象çèªèº«ã
this è¿å¯ä»¥ä¿®é¥°å±æ§ï¼æå¸¸è§çå°±æ¯å¨æé æ¹æ³ä¸ä½¿ç¨ this ï¼å¦ä¸æç¤º
```java
public class Apple {
private int num;
public Apple(int num){
this.num = num;
}
public static void main(String[] args) {
new Apple(10);
}
}
```
main æ¹æ³ä¸ä¼ éäºä¸ä¸ª int å¼ä¸º 10 çåæ°ï¼å®è¡¨ç¤ºçå°±æ¯è¹æçæ°éï¼å¹¶æè¿ä¸ªæ°éèµç»äº num å
¨å±åéãæä»¥ num çå¼ç°å¨å°±æ¯ 10ã
this è¿å¯ä»¥åæé 彿°ä¸èµ·ä½¿ç¨ï¼å
å½ä¸ä¸ªå
¨å±å
³é®åçææ
```java
public class Apple {
private int num;
private String color;
public Apple(int num){
this(num,"红è²");
}
public Apple(String color){
this(1,color);
}
public Apple(int num, String color) {
this.num = num;
this.color = color;
}
}
```
ä½ ä¼åç°ä¸é¢è¿æ®µä»£ç 使ç¨ç䏿¯ this, èæ¯ `this(åæ°)`ãå®ç¸å½äºè°ç¨äºå
¶ä»æé æ¹æ³ï¼ç¶åä¼ éåæ°è¿å»ãè¿é注æä¸ç¹ï¼this() å¿
é¡»æ¾å¨æé æ¹æ³ç第ä¸è¡ï¼å¦åç¼è¯ä¸éè¿
å¦æä½ æ this ç解为æåèªèº«çä¸ä¸ªå¼ç¨ï¼é£ä¹ super å°±æ¯æåç¶ç±»çä¸ä¸ªå¼ç¨ãsuper å
³é®åå this 䏿 ·ï¼ä½ å¯ä»¥ä½¿ç¨ `super.对象` æ¥å¼ç¨ç¶ç±»çæåï¼å¦ä¸
```java
public class Fruit {
int num;
String color;
public void eat(){
System.out.println("eat Fruit");
}
}
public class Apple extends Fruit{
@Override
public void eat() {
super.num = 10;
System.out.println("eat " + num + " Apple");
}
}
```
ä½ ä¹å¯ä»¥ä½¿ç¨ `super(åæ°)` æ¥è°ç¨ç¶ç±»çæé 彿°ï¼è¿éä¸å举ä¾åäºã
ä¸é¢ä¸ºä½ æ±æ»äº this å
³é®åå super å
³é®åçæ¯è¾ã

## è®¿é®æ§å¶æé
è®¿é®æ§å¶æéå称为`å°è£
`ï¼å®æ¯é¢å对象ä¸å¤§ç¹æ§ä¸çä¸ç§ï¼æä¹åå¨å¦ä¹ è¿ç¨ä¸ç»å¸¸ä¼å¿½ç¥å°è£
ï¼å¿æ³è¿ä¸å°±æ¯ä¸ä¸ªè®¿é®ä¿®é¥°ç¬¦ä¹ï¼æä¹å°±æ¯ä¸å¤§ç¹æ§çå¿
è¦æ¡ä»¶äºï¼åæ¥ææç¥éï¼**å¦æä½ ä¿¡ä»»çä¸å±å¯¹ä½ éç bugï¼ä½ æ¯æ ¹æ¬ä¸ç¥éç**ã
è®¿é®æ§å¶æéå
¶å®ææ ¸å¿å°±æ¯ä¸ç¹ï¼åªå¯¹éè¦çç±»å¯è§ã
Java䏿åçè®¿é®æéå
±æåç§ï¼å嫿¯ **publicãprotectedãdefaultãprivate**ï¼å®ä»¬çå¯è§æ§å¦ä¸

### ç»§æ¿
ç»§æ¿æ¯ææ `OOP(Object Oriented Programming)` è¯è¨å Java è¯è¨é½ä¸å¯æç¼ºçä¸é¨åãåªè¦æä»¬å建äºä¸ä¸ªç±»ï¼å°±éå¼çç»§æ¿èª `Object` ç¶ç±»ï¼åªä¸è¿æ²¡ææå®ãå¦æä½ æ¾ç¤ºæå®äºç¶ç±»ï¼é£ä¹ä½ ç»§æ¿äºç¶ç±»ï¼èä½ çç¶ç±»ç»§æ¿äº Object ç±»ã

ç»§æ¿çå
³é®åæ¯ `extends` ï¼å¦ä¸å¾æç¤ºï¼å¦æä½¿ç¨äº extends æ¾ç¤ºæå®äºç»§æ¿ï¼é£ä¹æä»¬å¯ä»¥è¯´ Father æ¯ç¶ç±»ï¼è Son æ¯åç±»ï¼ç¨ä»£ç 表示å¦ä¸
```java
class Father{}
class Son extends Father{}
```
ç»§æ¿åæ¹æ¥ææç§å
±æ§çç¹å¾
```java
class Father{
public void feature(){
System.out.println("ç¶äº²çç¹å¾");
}
}
class Son extends Father {
}
```
妿 Son 没æå®ç°èªå·±çæ¹æ³çè¯ï¼é£ä¹é»è®¤å°±æ¯ç¨çæ¯ç¶ç±»ç `feature` æ¹æ³ã妿åç±»å®ç°äºèªå·±ç feature æ¹æ³ï¼é£ä¹å°±ç¸å½äºæ¯éåäºç¶ç±»ç feature æ¹æ³ï¼è¿ä¹æ¯æä»¬ä¸é¢æå°çéåäºã
### 夿
夿æçæ¯åä¸ä¸ªè¡ä¸ºå
·æå¤ä¸ªä¸å表ç°å½¢å¼ãæ¯æä¸ä¸ªç±»å®ä¾ï¼å¯¹è±¡ï¼çç¸åæ¹æ³å¨ä¸åæ
å½¢ä¸å
·æä¸å表ç°å½¢å¼ãå°è£
åç»§æ¿æ¯å¤æçåºç¡ï¼ä¹å°±æ¯è¯´ï¼å¤æåªæ¯ä¸ç§è¡¨ç°å½¢å¼èå·²ã
å¦ä½å®ç°å¤æï¼å¤æçå®ç°å
·æä¸ç§å
è¦æ¡ä»¶
* ç»§æ¿
* éåç¶ç±»æ¹æ³
* ç¶ç±»å¼ç¨æåå类对象
æ¯å¦ä¸é¢è¿æ®µä»£ç
```java
public class Fruit {
int num;
public void eat(){
System.out.println("eat Fruit");
}
}
public class Apple extends Fruit{
@Override
public void eat() {
super.num = 10;
System.out.println("eat " + num + " Apple");
}
public static void main(String[] args) {
Fruit fruit = new Apple();
fruit.eat();
}
}
```
ä½ å¯ä»¥åç° `main` æ¹æ³ä¸æä¸ä¸ªå¾ç¥å¥çå°æ¹ï¼`Fruit fruit = new Apple()`ï¼Fruit ç±»åç对象ç«ç¶æåäº Apple 对象çå¼ç¨ï¼è¿å
¶å®å°±æ¯å¤æ -> ç¶ç±»å¼ç¨æåå类对象ï¼å 为 Apple ç»§æ¿äº Fruitï¼å¹¶ä¸éåäº eat æ¹æ³ï¼æä»¥è½å¤è¡¨ç°åºæ¥å¤ç§ç¶æçå½¢å¼ã
### ç»å
ç»åå
¶å®ä¸é¾çè§£ï¼å°±æ¯å°å¯¹è±¡å¼ç¨ç½®äºæ°ç±»ä¸å³å¯ãç»å乿¯ä¸ç§æé«ç±»çå¤ç¨æ§çä¸ç§æ¹å¼ãå¦æä½ æ³è®©ç±»å
·ææ´å¤çæ©å±åè½ï¼ä½ éè¦è®°ä½ä¸å¥è¯**å¤ç¨ç»åï¼å°ç¨ç»§æ¿**ã
```java
public class SoccerPlayer {
private String name;
private Soccer soccer;
}
public class Soccer {
private String soccerName;
}
```
代ç ä¸ SoccerPlayer å¼ç¨äº Soccer ç±»ï¼éè¿å¼ç¨ Soccer ç±»ï¼æ¥è¾¾å°è°ç¨ soccer ä¸ç屿§åæ¹æ³ã
ç»ååç»§æ¿æ¯æåºå«çï¼å®ä»¬ç主è¦åºå«å¦ä¸ã

å
³äºç»§æ¿åç»åå°ä¼å°å£çäºè®ºæ²¡æç»æï¼åªè¦åæ¥åèªçé¿å¤åä¼ç¹å³å¯ï¼ä¸è¬æ
åµä¸ï¼ç»ååç»§æ¿ä¹æ¯ä¸å¯¹å¯ä»¥è¿ç¨ç好å
å¼ã
### 代ç
é¤äºç»§æ¿åç»åå¤ï¼å¦å¤ä¸ç§å¼å¾æ¢è®¨çå
³ç³»æ¨¡å称为 `代ç`ã代ççå¤§è´æè¿°æ¯ï¼A æ³è¦è°ç¨ B ç±»çæ¹æ³ï¼A ä¸ç´æ¥è°ç¨ï¼A ä¼å¨èªå·±çç±»ä¸å建ä¸ä¸ª B 对象ç代çï¼åç±ä»£çè°ç¨ B çæ¹æ³ãä¾å¦å¦ä¸ä»£ç
```java
public class Destination {
public void todo(){
System.out.println("control...");
}
}
public class Device {
private String name;
private Destination destination;
private DeviceController deviceController;
public void control(Destination destination){
destination.todo();
}
}
public class DeviceController {
private Device name;
private Destination destination;
public void control(Destination destination){
destination.todo();
}
}
```
### åä¸è½¬å
åä¸è½¬å代表äºç¶ç±»ä¸åç±»ä¹é´çå
³ç³»ï¼å
¶å®ç¶ç±»ååç±»ä¹é´ä¸ä»
ä»
æåä¸è½¬åï¼è¿æåä¸è½¬åï¼å®ä»¬ç转ååçèå´ä¸ä¸æ ·
* `åä¸è½¬å`ï¼éè¿å类对象(å°èå´)转å为ç¶ç±»å¯¹è±¡(大èå´)ï¼è¿ç§è½¬æ¢æ¯èªå¨å®æçï¼ä¸ç¨å¼ºå¶ã
* `åä¸è½¬å` : éè¿ç¶ç±»å¯¹è±¡(大èå´)å®ä¾åå类对象(å°èå´)ï¼è¿ç§è½¬æ¢ä¸æ¯èªå¨å®æçï¼éè¦å¼ºå¶æå®ã
### static
static æ¯ Java ä¸çå
³é®åï¼å®çæææ¯ `éæç`ï¼static å¯ä»¥ç¨æ¥ä¿®é¥°æååéåæ¹æ³ï¼static ç¨å¨æ²¡æå建对象çæ
åµä¸è°ç¨ æ¹æ³/åéã
* ç¨ static 声æçæååéä¸ºéææååéï¼ä¹æä¸ºç±»åéãç±»åéççå½å¨æåç±»ç¸åï¼å¨æ´ä¸ªåºç¨ç¨åºæ§è¡æé´é½ææã
```java
static String name = "cxuan";
```
* ä½¿ç¨ static ä¿®é¥°çæ¹æ³ç§°ä¸ºéææ¹æ³ï¼éææ¹æ³è½å¤ç´æ¥ä½¿ç¨**ç±»å.æ¹æ³å** è¿è¡è°ç¨ãç±äºéææ¹æ³ä¸ä¾èµäºä»»ä½å¯¹è±¡å°±å¯ä»¥ç´æ¥è®¿é®ï¼å æ¤å¯¹äºéææ¹æ³æ¥è¯´ï¼æ¯æ²¡æ this å
³é®åçï¼å®ä¾åéé½ä¼æ this å
³é®åãå¨éææ¹æ³ä¸ä¸è½è®¿é®ç±»çééææååéåééææ¹æ³ï¼
```java
static void printMessage(){
System.out.println("cxuan is writing the article");
}
```
static é¤äºä¿®é¥°å±æ§åæ¹æ³å¤ï¼è¿æ`éæä»£ç å` çåè½ï¼å¯ç¨äºç±»çåå§åæä½ãè¿èæåç¨åºçæ§è½ã
```java
public class StaicBlock {
static{
System.out.println("I'm A static code block");
}
}
```
ç±äºéæä»£ç åéçç±»çå è½½èæ§è¡ï¼å æ¤ï¼å¾å¤æ¶åä¼å°åªéè¦è¿è¡ä¸æ¬¡çåå§åæä½æ¾å¨ static 代ç åä¸è¿è¡ã
### final
final çæææ¯æåçãæç»çï¼å®å¯ä»¥ä¿®é¥°ç±»ã屿§åæ¹æ³ã
* final 修饰类æ¶ï¼è¡¨æè¿ä¸ªç±»ä¸è½è¢«ç»§æ¿ãfinal ç±»ä¸çæååéå¯ä»¥æ ¹æ®éè¦è®¾ä¸º finalï¼ä½æ¯è¦æ³¨æ final ç±»ä¸çæææåæ¹æ³é½ä¼è¢«éå¼å°æå®ä¸º final æ¹æ³ã
* final ä¿®é¥°æ¹æ³æ¶ï¼è¡¨æè¿ä¸ªæ¹æ³ä¸è½è¢«ä»»ä½åç±»éåï¼å æ¤ï¼å¦æåªæå¨æ³æç¡®ç¦æ¢è¯¥æ¹æ³å¨åç±»ä¸è¢«è¦ççæ
åµä¸æå°æ¹æ³è®¾ç½®ä¸º finalã
* final 修饰åéåä¸ºä¸¤ç§æ
åµï¼ä¸ç§æ¯ä¿®é¥°åºæ¬æ°æ®ç±»åï¼è¡¨ç¤ºæ°æ®ç±»åçå¼ä¸è½è¢«ä¿®æ¹ï¼ä¸ç§æ¯ä¿®é¥°å¼ç¨ç±»åï¼è¡¨ç¤ºå¯¹å
¶åå§åä¹å便ä¸è½å让å
¶æåå¦ä¸ä¸ªå¯¹è±¡ã
## æ¥å£åæ½è±¡ç±»
### æ¥å£
æ¥å£ç¸å½äºå°±æ¯å¯¹å¤çä¸ç§çº¦å®åæ åï¼è¿éæ¿æä½ç³»ç»ä¸¾ä¾åï¼ä¸ºä»ä¹ä¼ææä½ç³»ç»ï¼å°±ä¼ä¸ºäºå±è½è½¯ä»¶ç夿æ§å硬件çç®åæ§ä¹é´çå·®å¼ï¼ä¸ºè½¯ä»¶æä¾ç»ä¸çæ åã
å¨ Java è¯è¨ä¸ï¼æ¥å£æ¯ç± `interface` å
³é®åæ¥è¡¨ç¤ºçï¼æ¯å¦æä»¬å¯ä»¥åä¸é¢è¿æ ·å®ä¹ä¸ä¸ªæ¥å£
```java
public interface CxuanGoodJob {}
```
æ¯å¦æä»¬å®ä¹äºä¸ä¸ª CxuanGoodJob çæ¥å£ï¼ç¶åä½ å°±å¯ä»¥å¨å
¶å
é¨å®ä¹ cxuan åç好çé£äºäºæ
ï¼æ¯å¦ cxuan åçæç« ä¸éã
```java
public interface CxuanGoodJob {
void writeWell();
}
```
è¿ééå«äºä¸äºæ¥å£çç¹å¾ï¼
* `interface` æ¥å£æ¯ä¸ä¸ªå®å
¨æ½è±¡çç±»ï¼ä»ä¸ä¼æä¾ä»»ä½æ¹æ³çå®ç°ï¼åªæ¯ä¼è¿è¡æ¹æ³çå®ä¹ã
* æ¥å£ä¸åªè½ä½¿ç¨ä¸¤ç§è®¿é®ä¿®é¥°ç¬¦ï¼ä¸ç§æ¯ `public`ï¼å®å¯¹æ´ä¸ªé¡¹ç®å¯è§ï¼ä¸ç§æ¯ `default` 缺çå¼ï¼å®åªå
·æå
è®¿é®æéã
* æ¥å£åªæä¾æ¹æ³çå®ä¹ï¼æ¥å£æ²¡æå®ç°ï¼ä½æ¯æ¥å£å¯ä»¥è¢«å
¶ä»ç±»å®ç°ãä¹å°±æ¯è¯´ï¼å®ç°æ¥å£çç±»éè¦æä¾æ¹æ³çå®ç°ï¼å®ç°æ¥å£ä½¿ç¨ `implements` å
³é®åæ¥è¡¨ç¤ºï¼ä¸ä¸ªæ¥å£å¯ä»¥æå¤ä¸ªå®ç°ã
```java
class CXuanWriteWell implements CxuanGoodJob{
@Override
public void writeWell() {
System.out.println("Cxuan write Java is vary well");
}
}
```
* æ¥å£ä¸è½è¢«å®ä¾åï¼æä»¥æ¥å£ä¸ä¸è½æä»»ä½æé æ¹æ³ï¼ä½ å®ä¹æé æ¹æ³ç¼è¯ä¼åºéã
* æ¥å£çå®ç°æ¯å¦å®ç°æ¥å£çå
¨é¨æ¹æ³ï¼å¦åå¿
é¡»å®ä¹ä¸º`æ½è±¡ç±»`ï¼è¿å°±æ¯æä»¬ä¸é¢è¦è¯´çå
容
### æ½è±¡ç±»
æ½è±¡ç±»æ¯ä¸ç§æ½è±¡è½åå¼±äºæ¥å£çç±»ï¼å¨ Java ä¸ï¼æ½è±¡ç±»ä½¿ç¨ `abstract` å
³é®åæ¥è¡¨ç¤ºãå¦æææ¥å£å½¢å®¹ä¸ºçè¿ä¸ªç©ç§ï¼é£ä¹æ½è±¡ç±»å¯ä»¥è¯´æ¯æ¯åæ¯ç½è²ãå°ä½çåç§ï¼èå®ç°ç±»å¯ä»¥æ¯å
·ä½çç±»ï¼æ¯å¦è¯´æ¯åç¾ã泰迪çãä½ å¯ä»¥åä¸é¢è¿æ ·å®ä¹æ½è±¡ç±»
```java
public interface Dog {
void FurColor();
}
abstract class WhiteDog implements Dog{
public void FurColor(){
System.out.println("Fur is white");
}
abstract void SmallBody();
}
```
卿½è±¡ç±»ä¸ï¼å
·æå¦ä¸ç¹å¾
* 妿ä¸ä¸ªç±»ä¸ææ½è±¡æ¹æ³ï¼é£ä¹è¿ä¸ªç±»ä¸å®æ¯æ½è±¡ç±»ï¼ä¹å°±æ¯è¯´ï¼ä½¿ç¨å
³é®å `abstract` ä¿®é¥°çæ¹æ³ä¸å®æ¯æ½è±¡æ¹æ³ï¼å
·ææ½è±¡æ¹æ³çç±»ä¸å®æ¯æ½è±¡ç±»ãå®ç°ç±»æ¹æ³ä¸åªææ¹æ³å
·ä½çå®ç°ã
* æ½è±¡ç±»ä¸ä¸ä¸å®åªææ½è±¡æ¹æ³ï¼æ½è±¡ç±»ä¸ä¹å¯ä»¥æå
·ä½çæ¹æ³ï¼ä½ å¯ä»¥èªå·±å»éæ©æ¯å¦å®ç°è¿äºæ¹æ³ã
* æ½è±¡ç±»ä¸ç约æä¸åæ¥å£é£ä¹ä¸¥æ ¼ï¼ä½ å¯ä»¥å¨æ½è±¡ç±»ä¸å®ä¹ **æé æ¹æ³ãæ½è±¡æ¹æ³ãæ®é屿§ãæ¹æ³ãéæå±æ§åéææ¹æ³**
* æ½è±¡ç±»åæ¥å£ä¸æ ·ä¸è½è¢«å®ä¾åï¼å®ä¾ååªè½å®ä¾å`å
·ä½çç±»`
## å¼å¸¸
å¼å¸¸æ¯ç¨åºç»å¸¸ä¼åºç°çï¼åç°é误çæä½³æ¶æºæ¯å¨ç¼è¯é¶æ®µï¼ä¹å°±æ¯ä½ è¯å¾å¨è¿è¡ç¨åºä¹åã使¯ï¼å¨ç¼è¯æé´å¹¶ä¸è½æ¾å°ææçéè¯¯ï¼æä¸äº `NullPointerException` å `ClassNotFoundException` å¼å¸¸å¨ç¼è¯ææ¾ä¸å°ï¼è¿äºå¼å¸¸æ¯ RuntimeException è¿è¡æ¶å¼å¸¸ï¼è¿äºå¼å¸¸å¾å¾å¨è¿è¡æ¶æè½è¢«åç°ã
æä»¬å Java ç¨åºç»å¸¸ä¼åºç°ä¸¤ç§é®é¢ï¼ä¸ç§æ¯ java.lang.Exception ï¼ä¸ç§æ¯ java.lang.Errorï¼é½ç¨æ¥è¡¨ç¤ºåºç°äºå¼å¸¸æ
åµï¼ä¸é¢å°±é对è¿ä¸¤ç§æ¦å¿µè¿è¡çè§£ã
### è®¤è¯ Exception
`Exception` ä½äº `java.lang` å
ä¸ï¼å®æ¯ä¸ç§é¡¶çº§æ¥å£ï¼ç»§æ¿äº `Throwable` ç±»ï¼Exception ç±»åå
¶åç±»é½æ¯ Throwable çç»ææ¡ä»¶ï¼æ¯ç¨åºåºç°çåçæ
åµã
å¨è®¤è¯ Exception ä¹åï¼æå¿
è¦å
äºè§£ä¸ä¸ä»ä¹æ¯ `Throwable`ã
### ä»ä¹æ¯ Throwable
Throwable ç±»æ¯ Java è¯è¨ä¸ææ`é误(errors)`å`å¼å¸¸(exceptions)`çç¶ç±»ãåªæç»§æ¿äº Throwable çç±»æè
å
¶åç±»æè½å¤è¢«æåºï¼è¿æä¸ç§æ¹å¼æ¯å¸¦æ Java ä¸ç `@throw` 注解çç±»ä¹å¯ä»¥æåºã
å¨[Javaè§è](https://docs.oracle.com/javase/specs/jls/se9/html/jls-11.html#jls-11.1.1)ä¸ï¼å¯¹é忥å¼å¸¸å忥å¼å¸¸çå®ä¹æ¯è¿æ ·çï¼
> The *unchecked exception classes* are the run-time exception classes and the error classes.
> The *checked exception classes* are all exception classes other than the unchecked exception classes. That is, the checked exception classes are `Throwable` and all its subclasses other than `RuntimeException` and its subclasses and `Error`and its subclasses.
ä¹å°±æ¯è¯´ï¼é¤äº `RuntimeException` åå
¶åç±»ï¼ä»¥å`error`åå
¶åç±»ï¼å
¶å®çææå¼å¸¸é½æ¯ `checkedException`ã
é£ä¹ï¼æç
§è¿ç§é»è¾å
³ç³»ï¼æä»¬å¯ä»¥å¯¹ Throwable åå
¶åç±»è¿è¡å½ç±»åæ

å¯ä»¥çå°ï¼Throwable ä½äºå¼å¸¸åé误çæé¡¶å±ï¼æä»¬æ¥ç Throwable ç±»ä¸åç°å®çæ¹æ³å屿§æå¾å¤ï¼æä»¬åªè®¨è®ºå
¶ä¸å 个æ¯è¾å¸¸ç¨ç
```java
// è¿åæåºå¼å¸¸ç详ç»ä¿¡æ¯
public string getMessage();
public string getLocalizedMessage();
//è¿åå¼å¸¸åçæ¶çç®è¦æè¿°
public public String toString()ï¼
// æå°å¼å¸¸ä¿¡æ¯å°æ åè¾åºæµä¸
public void printStackTrace();
public void printStackTrace(PrintStream s);
public void printStackTrace(PrintWriter s)
// è®°å½æ 帧ççå½åç¶æ
public synchronized Throwable fillInStackTrace();
```
æ¤å¤ï¼å 为 Throwable çç¶ç±»ä¹æ¯ `Object`ï¼æä»¥å¸¸ç¨çæ¹æ³è¿æç»§æ¿å
¶ç¶ç±»ç`getClass()` å `getName()` æ¹æ³ã
### 常è§ç Exception
ä¸é¢æä»¬åå° Exception çæ¢è®¨ä¸æ¥ï¼ç°å¨ä½ ç¥éäº Exception çç¶ç±»æ¯ Throwableï¼å¹¶ä¸ Exception æä¸¤ç§å¼å¸¸ï¼ä¸ç§æ¯ `RuntimeException` ï¼ä¸ç§æ¯ `CheckedException`ï¼è¿ä¸¤ç§å¼å¸¸é½åºè¯¥å»`æè·`ã
ä¸é¢ååºäºä¸äº Java ä¸å¸¸è§çå¼å¸¸åå
¶åç±»ï¼è¿åé¢è¯å®ä¹å¯è½è®©ä½ 举åºå 个常è§çå¼å¸¸æ
åµå¹¶å°å
¶åç±»
RuntimeException

CheckedException

### ä¸ Exception æå
³ç Java å
³é®å
é£ä¹ Java 䏿¯å¦ä½å¤çè¿äºå¼å¸¸çå¢ï¼å¨ Java 䏿è¿å 个å
³é®å **throwsãthrowãtryãfinallyãcatch** ä¸é¢æä»¬å嫿¥æ¢è®¨ä¸ä¸
#### throws å throw
å¨ Java ä¸ï¼å¼å¸¸ä¹å°±æ¯ä¸ä¸ªå¯¹è±¡ï¼å®è½å¤è¢«ç¨åºåèªå®ä¹æåºæè
åºç¨ç¨åºæåºï¼å¿
é¡»åå©äº `throws` å `throw` è¯å¥æ¥å®ä¹æåºå¼å¸¸ã
throws å throw éå¸¸æ¯æå¯¹åºç°çï¼ä¾å¦
```java
static void cacheException() throws Exception{
throw new Exception();
}
```
throw è¯å¥ç¨å¨æ¹æ³ä½å
ï¼è¡¨ç¤ºæåºå¼å¸¸ï¼ç±æ¹æ³ä½å
çè¯å¥å¤çã
throws è¯å¥ç¨å¨æ¹æ³å£°æåé¢ï¼è¡¨ç¤ºåæåºå¼å¸¸ï¼ç±è¯¥æ¹æ³çè°ç¨è
æ¥å¤çã
throws ä¸»è¦æ¯å£°æè¿ä¸ªæ¹æ³ä¼æåºè¿ç§ç±»åçå¼å¸¸ï¼ä½¿å®çè°ç¨è
ç¥éè¦æè·è¿ä¸ªå¼å¸¸ã
throw æ¯å
·ä½å夿å¼å¸¸çå¨ä½ï¼æä»¥å®æ¯æåºä¸ä¸ªå¼å¸¸å®ä¾ã
#### try ãfinally ãcatch
è¿ä¸ä¸ªå
³é®åä¸»è¦æä¸é¢å ç§ç»åæ¹å¼ **try...catch ãtry...finallyãtry...catch...finally**ã
try...catch 表示对æä¸æ®µä»£ç å¯è½æåºå¼å¸¸è¿è¡çæè·ï¼å¦ä¸
```java
static void cacheException() throws Exception{
try {
System.out.println("1");
}catch (Exception e){
e.printStackTrace();
}
}
```
try...finally è¡¨ç¤ºå¯¹ä¸æ®µä»£ç ä¸ç®¡æ§è¡æ
åµå¦ä½ï¼é½ä¼èµ° finally ä¸ç代ç
```java
static void cacheException() throws Exception{
for (int i = 0; i < 5; i++) {
System.out.println("enter: i=" + i);
try {
System.out.println("execute: i=" + i);
continue;
} finally {
System.out.println("leave: i=" + i);
}
}
}
```
try...catch...finally 乿¯ä¸æ ·çï¼è¡¨ç¤ºå¯¹å¼å¸¸æè·åï¼åèµ° finally ä¸ç代ç é»è¾ã
### ä»ä¹æ¯ Error
Error æ¯ç¨åºæ æ³å¤ççé误ï¼è¡¨ç¤ºè¿è¡åºç¨ç¨åºä¸è¾ä¸¥éé®é¢ã大夿°é误ä¸ä»£ç ç¼åè
æ§è¡çæä½æ å
³ï¼è表示代ç è¿è¡æ¶ JVMï¼Java èææºï¼åºç°çé®é¢ãè¿äºé误æ¯ä¸å¯æ£æ¥çï¼å 为å®ä»¬å¨åºç¨ç¨åºçæ§å¶åå¤çè½åä¹ å¤ï¼èä¸ç»å¤§å¤æ°æ¯ç¨åºè¿è¡æ¶ä¸å
许åºç°çç¶åµï¼æ¯å¦ `OutOfMemoryError` å `StackOverflowError`å¼å¸¸çåºç°ä¼æå ç§æ
åµï¼è¿ééè¦å
ä»ç»ä¸ä¸ Java å
忍¡å JDK1.7ã

å
¶ä¸å
æ¬ä¸¤é¨åï¼**ç±ææçº¿ç¨å
±äº«çæ°æ®åºå线ç¨éç¦»çæ°æ®åº**ç»æï¼å¨ä¸é¢ç Java å
忍¡åä¸ï¼**åªæç¨åºè®¡æ°å¨**æ¯ä¸ä¼åç `OutOfMemoryError` æ
åµçåºåï¼ç¨åºè®¡æ°å¨æ§å¶çè®¡ç®æºæä»¤ç忝ã循ç¯ã跳转ãå¼å¸¸å¤çåçº¿ç¨æ¢å¤ï¼å¹¶ä¸ç¨åºè®¡æ°å¨æ¯æ¯ä¸ªçº¿ç¨ç§æçã
>ä»ä¹æ¯çº¿ç¨ç§æï¼è¡¨ç¤ºçå°±æ¯åæ¡çº¿ç¨ä¹é´äºä¸å½±åï¼ç¬ç«åå¨çå
ååºåã
妿åºç¨ç¨åºæ§è¡çæ¯ Java æ¹æ³ï¼é£ä¹è¿ä¸ªè®¡æ°å¨è®°å½çå°±æ¯`èææºåèç `æä»¤çå°åï¼å¦ææ£å¨æ§è¡çæ¯ `Native` æ¹æ³ï¼è¿ä¸ªè®¡æ°å¨å¼å为`空(Undefined)`ã
é¤äºç¨åºè®¡æ°å¨å¤ï¼å
¶ä»åºåï¼`æ¹æ³åº(Method Area)`ã`èææºæ (VM Stack)`ã`æ¬å°æ¹æ³æ (Native Method Stack)` å `å (Heap)` 齿¯å¯è½åç OutOfMemoryError çåºåã
* èææºæ ï¼å¦æçº¿ç¨è¯·æ±çæ æ·±åº¦å¤§äºèææºæ æå
è®¸çæ·±åº¦ï¼å°ä¼åºç° `StackOverflowError` å¼å¸¸ï¼å¦æèææºå¨ææ©å±æ æ³ç³è¯·å°è¶³å¤çå
åï¼å°åºç° `OutOfMemoryError`ã
* æ¬å°æ¹æ³æ åèææºæ 䏿 ·
* å ï¼Java å å¯ä»¥å¤äºç©çä¸ä¸è¿ç»ï¼é»è¾ä¸è¿ç»ï¼å°±åæä»¬çç£ç空é´ä¸æ ·ï¼å¦æå 䏿²¡æå
å宿å®ä¾åé
ï¼å¹¶ä¸å æ æ³æ©å±æ¶ï¼å°ä¼æåº OutOfMemoryErrorã
* æ¹æ³åºï¼æ¹æ³åºæ æ³æ»¡è¶³å
ååé
éæ±æ¶ï¼å°æåº OutOfMemoryError å¼å¸¸ã
å¨ Java ä¸ï¼ä½ å¯ä»¥æå¼å¸¸ç解为æ¯ä¸ç§è½å¤æé«ä½ ç¨åºå¥å£®æ§çæºå¶ï¼å®è½å¤è®©ä½ å¨ç¼å代ç 䏿³¨æè¿äºé®é¢ï¼ä¹å¯ä»¥è¯´ï¼å¦æä½ å代ç ä¸ä¼æ³¨æè¿äºå¼å¸¸æ
åµï¼ä½ æ¯æ æ³æä¸ºä¸ä½ç¡¬æ ¸ç¨åºåçã
## å
é¨ç±»
è·ä»ä¸ºæ¢ï¼æä»¬äºè§£ç齿¯æ®éç±»çå®ä¹ï¼é£å°±æ¯ç´æ¥å¨ IDEA ä¸ç´æ¥æ°å»ºä¸ä¸ª class ã

æ°å»ºå®æåï¼ä½ 就伿¥æä¸ä¸ª class æä»¶çå®ä¹ï¼è¿ç§æä½å¤ªç®åäºï¼æ¶é´é¿äºå°±ä¼æ¯ç¥ï¼æä»¬å¹´è½»äººå¤éè¦æ´æ°æ½®åéªæ°çåæ³ï¼å¥½å§ï¼æ¢ç¶ä½ æå°äºé£å°±ä½¿ç¨ `å
é¨ç±»`å§ï¼è¿æ¯ä¸ç§æç¨èä¸éªæ°çå®ä¹ç±»çæ¹å¼ï¼å
é¨ç±»çå®ä¹é常ç®åï¼**å¯ä»¥å°ä¸ä¸ªç±»çå®ä¹æ¾å¨å¦ä¸ä¸ªç±»çå
é¨ï¼è¿å°±æ¯å
é¨ç±»**ã
å
é¨ç±»æ¯ä¸ç§é常æç¨çç¹æ§ï¼å®ä¹å¨ç±»å
é¨çç±»ï¼ææå¤é¨ç±»çå¼ç¨ï¼ä½å´å¯¹å
¶ä»å¤é¨ç±»ä¸å¯è§ï¼çèµ·æ¥å°±åæ¯ä¸ç§éè代ç çæºå¶ï¼å°±å `å¼å
°å¥å°å` ä¼¼çï¼å¼å
°å¥å¯ä»¥åå¼å
°å¥å°åè¿è¡é讯ï¼ä½æ¯å¤é¢çæäººå´æ æ³ç´æ¥æ»å»å°å¼å
°å¥æ¬ä½ã
ä¸é¢æä»¬å°±æ¥èä¸èå建å
é¨ç±»çæ¹å¼ã
### å建å
é¨ç±»
å®ä¹å
é¨ç±»é常ç®åï¼å°±æ¯ç´æ¥å°ä¸ä¸ªç±»å®ä¹å¨å¤å´ç±»çéé¢ï¼å¦ä¸ä»£ç æç¤º
```java
public class OuterClass {
private String name ;
private int age;
class InnerClass{
public InnerClass(){
name = "cxuan";
age = 25;
}
}
}
```
å¨è¿æ®µä»£ç ä¸ï¼InnerClass å°±æ¯ OuterClass çä¸ä¸ªå
é¨ç±»ãä¹å°±æ¯è¯´ï¼æ¯ä¸ªå
é¨ç±»é½è½ç¬ç«å°ç»§æ¿ä¸ä¸ªï¼æ¥å£çï¼å®ç°ï¼æä»¥æ 论å¤å´ç±»æ¯å¦å·²ç»ç»§æ¿äºæä¸ªï¼æ¥å£çï¼å®ç°ï¼å¯¹äºå
é¨ç±»é½æ²¡æå½±åãè¿ä¹æ¯éèäºå
é¨å®ç°ç»èã**å
é¨ç±»æ¥æå¤é¨ç±»çè®¿é®æ**ã
å
é¨ç±»ä¸ä»
ä»
è½å¤å®ä¹å¨ç±»çå
é¨ï¼è¿å¯ä»¥å®ä¹å¨æ¹æ³åä½ç¨åå
é¨ï¼è¿ç§è¢«ç§°ä¸º`å±é¨å
é¨ç±»`ï¼é¤æ¤ä¹å¤ï¼è¿æå¿åå
é¨ç±»ãå
é¨ç±»å¯ä»¥å®ç° Java ä¸ç `å¤éç»§æ¿`ãä¸é¢æ¯å®ä¹å
é¨ç±»çæ¹å¼
* ä¸ä¸ªå¨æ¹æ³ä¸å®ä¹çç±»(å±é¨å
é¨ç±»)
* ä¸ä¸ªå®ä¹å¨ä½ç¨åå
çç±»ï¼è¿ä¸ªä½ç¨å卿¹æ³çå
é¨(æåå
é¨ç±»)
* ä¸ä¸ªå®ç°äºæ¥å£çå¿åç±»(å¿åå
é¨ç±»)
* ä¸ä¸ªå¿åç±»ï¼å®æ©å±äºéé»è®¤æé å¨çç±»
* ä¸ä¸ªå¿åç±»ï¼æ§è¡å段åå§åæä½
* ä¸ä¸ªå¿åç±»ï¼å®éè¿å®ä¾åå§åå®ç°æé
ç±äºæ¯ä¸ªç±»é½ä¼äº§çä¸ä¸ª `.class` æä»¶ï¼å
¶ä¸å
å«äºå¦ä½å建该类åç对象çå
¨é¨ä¿¡æ¯ï¼é£ä¹ï¼å¦ä½è¡¨ç¤ºå
é¨ç±»çä¿¡æ¯å¢ï¼å¯ä»¥ä½¿ç¨ `$` æ¥è¡¨ç¤ºï¼æ¯å¦ **OuterClass$InnerClass.class**ã
## éå
éåå¨æä»¬çæ¥å¸¸å¼åä¸æä½¿ç¨ç次æ°ç®ç´å¤ªå¤äºï¼ä½ å·²ç»æå®ä»¬é½ç¨ççéäºï¼ä½æ¯ä½ä¸ºä¸ååæ ¼çç¨åºåï¼ä½ ä¸ä»
è¦äºè§£å®çåºæ¬ç¨æ³ï¼ä½ è¿è¦äºè§£å®çæºç ï¼åå¨å³åçï¼ä½ è¿è¦äºè§£å®æ¯å¦ä½è®¾è®¡åå®ç°çï¼ä½ è¿è¦äºè§£å®çè¡çè¿ç¨ã
è¿ç¯å客就æ¥è¯¦ç»ä»ç»ä¸ä¸ Collection è¿ä¸ªåºå¤§éåæ¡æ¶çå®¶æä½ç³»åæåï¼è®©ä½ äºè§£å®ç设计ä¸å®ç°ã
**æ¯æ¶åç¥åºè¿å¼ ç¥å¾äº**

é¦å
æ¥ä»ç»çå°±æ¯å表ç·ç·è¾å¿çæ¥å£- **Iterator**
### Iterable æ¥å£
å®ç°æ¤æ¥å£å
许对象æä¸º for-each 循ç¯çç®æ ï¼ä¹å°±æ¯å¢å¼º for 循ç¯ï¼å®æ¯ Java ä¸çä¸ç§`è¯æ³ç³`ã
```java
List