# Java åºç¡æ ¸å¿æ»ç» * [Java åºç¡æ ¸å¿æ»ç»](#java-åºç¡æ ¸å¿æ»ç») * [Java æ¦è¿°](#java-æ¦è¿°) * [ä»ä¹æ¯ Javaï¼](#ä»ä¹æ¯-java) * [Java çç¹ç¹](#java-çç¹ç¹) * [Java å¼åç¯å¢](#java-å¼åç¯å¢) * [JDK](#jdk) * [JRE](#jre) * [Java å¼åç¯å¢é ç½®](#java-å¼åç¯å¢é ç½®) * [Java åºæ¬è¯æ³](#java-åºæ¬è¯æ³) * [æ°æ®ç±»å](#æ°æ®ç±»å) * [åºç¡è¯æ³](#åºç¡è¯æ³) * [è¿ç®ç¬¦](#è¿ç®ç¬¦) * [Java æ§è¡æ§å¶æµç¨](#java-æ§è¡æ§å¶æµç¨) * [æ¡ä»¶è¯å¥](#æ¡ä»¶è¯å¥) * [if æ¡ä»¶è¯å¥](#if-æ¡ä»¶è¯å¥) * [if...else æ¡ä»¶è¯å¥](#ifelse-æ¡ä»¶è¯å¥) * [if...else if å¤åæ¯è¯å¥](#ifelse-if-å¤åæ¯è¯å¥) * [switch caseå¤åæ¯è¯å¥](#switch-caseå¤åæ¯è¯å¥) * [循ç¯è¯å¥](#循ç¯è¯å¥) * [while 循ç¯è¯å¥](#while-循ç¯è¯å¥) * [do...while 循ç¯](#dowhile-循ç¯) * [for 循ç¯è¯å¥](#for-循ç¯è¯å¥) * [跳转è¯å¥](#跳转è¯å¥) * [break è¯å¥](#break-è¯å¥) * [continue è¯å¥](#continue-è¯å¥) * [é¢å对象](#é¢å对象) * [ç±»ä¹æ¯ä¸ç§å¯¹è±¡](#ç±»ä¹æ¯ä¸ç§å¯¹è±¡) * [对象çå建](#对象çå建) * [屿§åæ¹æ³](#屿§åæ¹æ³) * [æé æ¹æ³](#æé æ¹æ³) * [æ¹æ³éè½½](#æ¹æ³éè½½) * [æ¹æ³çéå](#æ¹æ³çéå) * [åå§å](#åå§å) * [ç±»çåå§å](#ç±»çåå§å) * [æååå§å](#æååå§å) * [æé å¨åå§å](#æé å¨åå§å) * [åå§å顺åº](#åå§å顺åº) * [æ°ç»åå§å](#æ°ç»åå§å) * [对象ç鿝](#对象ç鿝) * [对象ä½ç¨å](#对象ä½ç¨å) * [è®¿é®æ§å¶æé](#è®¿é®æ§å¶æé) * [ç»§æ¿](#ç»§æ¿) * [夿](#夿) * [ç»å](#ç»å) * [代ç](#代ç) * [åä¸è½¬å](#åä¸è½¬å) * [static](#static) * [final](#final) * [æ¥å£åæ½è±¡ç±»](#æ¥å£åæ½è±¡ç±») * [æ¥å£](#æ¥å£) * [æ½è±¡ç±»](#æ½è±¡ç±») * [å¼å¸¸](#å¼å¸¸) * [è®¤è¯ Exception](#认è¯-exception) * [ä»ä¹æ¯ Throwable](#ä»ä¹æ¯-throwable) * [常è§ç Exception](#常è§ç-exception) * [ä¸ Exception æå ³ç Java å ³é®å](#ä¸-exception-æå ³ç-java-å ³é®å) * [throws å throw](#throws-å-throw) * [try ãfinally ãcatch](#try-finally-catch) * [ä»ä¹æ¯ Error](#ä»ä¹æ¯-error) * [å é¨ç±»](#å é¨ç±») * [å¦ä½å®ä¹å é¨ç±»](#å¦ä½å®ä¹å é¨ç±») * [龿¥å°å¤é¨ç±»](#龿¥å°å¤é¨ç±») * [å é¨ç±»ä¸åä¸è½¬å](#å é¨ç±»ä¸åä¸è½¬å) * [å®ä¹å¨æ¹æ³ä¸åä»»æä½ç¨åå é¨çç±»](#å®ä¹å¨æ¹æ³ä¸åä»»æä½ç¨åå é¨çç±») * [åµå¥ç±»](#åµå¥ç±») * [æ¥å£å é¨çç±»](#æ¥å£å é¨çç±») * [å é¨ç±»å®ç°å¤éç»§æ¿](#å é¨ç±»å®ç°å¤éç»§æ¿) * [å é¨ç±»çç»§æ¿](#å é¨ç±»çç»§æ¿) * [å é¨ç±»çè¦ç](#å é¨ç±»çè¦ç) * [å ³äºæºç ä¸å é¨ç±»ç表示](#å ³äºæºç ä¸å é¨ç±»ç表示) * [å é¨ç±»çä¼ç¹](#å é¨ç±»çä¼ç¹) * [éå](#éå) * [Iterable æ¥å£](#iterable-æ¥å£) * [顶屿¥å£](#顶屿¥å£) * [ArrayList](#arraylist) * [Vector](#vector) * [LinkedList ç±»](#linkedlist-ç±») * [Stack](#stack) * [HashSet](#hashset) * [TreeSet](#treeset) * [LinkedHashSet ç±»](#linkedhashset-ç±») * [PriorityQueue](#priorityqueue) * [HashMap](#hashmap) * [TreeMap ç±»](#treemap-ç±») * [LinkedHashMap ç±»](#linkedhashmap-ç±») * [Hashtable ç±»](#hashtable-ç±») * [IdentityHashMap ç±»](#identityhashmap-ç±») * [WeakHashMap ç±»](#weakhashmap-ç±») * [Collections ç±»](#collections-ç±») * [éåå®ç°ç±»ç¹å¾å¾](#éåå®ç°ç±»ç¹å¾å¾) * [æ³å](#æ³å) * [æ³åç使ç¨](#æ³åç使ç¨) * [ç¨æ³å表示类](#ç¨æ³å表示类) * [ç¨æ³å表示æ¥å£](#ç¨æ³å表示æ¥å£) * [æ³åæ¹æ³](#æ³åæ¹æ³) * [æ³åéé 符](#æ³åéé 符) * [æ³åçç±»åæ¦é¤](#æ³åçç±»åæ¦é¤) * [åå°](#åå°) * [Class ç±»](#class-ç±») * [Field ç±»](#field-ç±») * [Method ç±»](#method-ç±») * [ClassLoader ç±»](#classloader-ç±») * [æä¸¾](#æä¸¾) * [æä¸¾ç¹æ§](#æä¸¾ç¹æ§) * [æä¸¾åæ®éç±»ä¸æ ·](#æä¸¾åæ®éç±»ä¸æ ·) * [æä¸¾ç¥ç§ä¹å¤](#æä¸¾ç¥ç§ä¹å¤) * [æä¸¾ç±»](#æä¸¾ç±») * [I/O](#io) * [File ç±»](#file-ç±») * [åºç¡ IO ç±»åç¸å ³æ¹æ³](#åºç¡-io-ç±»åç¸å ³æ¹æ³) * [InputStream](#inputstream) * [OutputStream](#outputstream) * [Reader ç±»](#reader-ç±») * [Writer ç±»](#writer-ç±») * [InputStream åå ¶åç±»](#inputstream-åå ¶åç±») * [OutputStream åå ¶åç±»](#outputstream-åå ¶åç±») * [Reader åå ¶åç±»](#reader-åå ¶åç±») * [Writer åå ¶åç±»](#writer-åå ¶åç±») * [注解](#注解) * [注解ççå½å¨æ](#注解ççå½å¨æ) * [å ³äº null çå ç§å¤çæ¹å¼](#å ³äº-null-çå ç§å¤çæ¹å¼) * [大å°åææ](#大å°åææ) * [null æ¯ä»»ä½å¼ç¨ç±»åçåå§å¼](#null-æ¯ä»»ä½å¼ç¨ç±»åçåå§å¼) * [null åªæ¯ä¸ç§ç¹æ®çå¼](#null-åªæ¯ä¸ç§ç¹æ®çå¼) * [ä½¿ç¨ Null-Safe æ¹æ³](#使ç¨-null-safe-æ¹æ³) * [null 夿](#null-夿) ## Java æ¦è¿° ### ä»ä¹æ¯ Javaï¼ Java æ¯ Sun Microsystems äº1995 年馿¬¡åå¸çä¸ç§`ç¼ç¨è¯è¨`å计ç®å¹³å°ãç¼ç¨è¯è¨è¿æ¯è¾å¥½çè§£ï¼é£ä¹ä»ä¹æ¯ `计ç®å¹³å°` å¢ï¼ >计ç®å¹³å°æ¯å¨çµèä¸è¿è¡åºç¨ç¨åºï¼è½¯ä»¶ï¼çç¯å¢ï¼å æ¬`硬件ç¯å¢`å`软件ç¯å¢`ãä¸è¬ç³»ç»å¹³å°å æ¬ä¸å°çµèç硬件ä½ç³»ç»æãæä½ç³»ç»ãè¿è¡æ¶åºã Java æ¯å¿«éï¼å®å ¨åå¯é çã ä»ç¬è®°æ¬çµèå°æ°æ®ä¸å¿ï¼ä»æ¸¸ææºå°ç§å¦è¶ çº§è®¡ç®æºï¼ä»ææºå°äºèç½ï¼Java æ å¤ä¸å¨ï¼Java 主è¦å为ä¸ä¸ªçæ¬ï¼ - JavaSE(J2SE)(Java2 Platform Standard Editionï¼java平尿 åçï¼ JavaSE æ¯ JavaEE å JavaME çåºç¡ï¼JavaSE å°±æ¯åºäº JDK å JREï¼ç¶åè¿å å«äºä¸äºæ¯æ Java Web æå¡å¼åçç±» - JavaEE(J2EE)(Java 2 Platform,Enterprise Editionï¼javaå¹³å°ä¼ä¸ç) JavaEE ä¸å¼å§å« J2EEï¼åæ¥æ¹å为 JavaEEï¼å®æ¯ JavaSE çä¸ä¸ªæ©å±ï¼è¿æ¯æä»¬ä¼ä¸çº§å¼å使ç¨çä¸ä¸ªçæ¬ï¼å æ¬ä¸äº Java Web å·¥å ·å ã - JavaME(J2ME)(Java 2 Platform Micro Editionï¼javaå¹³å°å¾®åç)ã JavaME ä¸è¬ç¨äºç§»å¨è®¾å¤ååµå ¥å¼è®¾å¤ï¼æ¯å¦ææºãPDAãçµè§æºé¡¶çåæå°æºï¼ä¸è¿è¡çåºç¨ç¨åºæä¾ä¸ä¸ªå¥å£®ä¸çµæ´»çç¯å¢ã ### 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ï¼è¿ç¨æ¹æ³æ¿æ´»ï¼`æºå¶ä¹æ¯å¼ååå¸å¼åºç¨çéè¦ææ®µãè¿æ¯ç¹ç¹ä¹ã > ä¸ä¸ªå°ä¾å说æä¸ä¸é¢ç¸è¿ç¨åé¢å对象çåºå« > > ä¸ãé¢åè¿ç¨ > > ä¸ºäºæå¤§è±¡è£ è¿å°ç®±ï¼éè¦3个è¿ç¨ã > > æè·¯ï¼ > > 1ãæå°ç®±é¨æå¼ï¼å¾å°æå¼é¨çå°ç®±ï¼ã > > 2ãæå¤§è±¡è£ è¿å»ï¼æå¼é¨åï¼å¾å°éé¢è£ ç大象çå°ç®±ï¼ã > > 3ãæå°ç®±é¨å ³ä¸ï¼æå¼é¨ãè£ å¥½å¤§è±¡åï¼è·å¾å ³å¥½é¨çå°ç®±)ã > > æ ¹æ®ä¸é¢çæè·¯ï¼å¯ä»¥çå°ï¼æ¯ä¸ªè¿ç¨é½æä¸ä¸ªé¶æ®µæ§çç®æ ï¼ä¾æ¬¡å®æè¿äºè¿ç¨ï¼å°±è½æå¤§è±¡è£ è¿å°ç®±ã > > äºãé¢å对象 > > ä¸ºäºæå¤§è±¡è£ è¿å°ç®±ï¼éè¦åä¸ä¸ªå¨ä½ï¼æè å«è¡ä¸ºï¼ãæ¯ä¸ªå¨ä½æä¸ä¸ªæ§è¡è ï¼å®å°±æ¯å¯¹è±¡ã > > æè·¯ï¼ > > 1ãå°ç®±ï¼ä½ ç»ææé¨æå¼ã > > 2ãå°ç®±ï¼ä½ ç»ææå¤§è±¡è£ è¿å»ï¼æè 说ï¼å¤§è±¡ï¼ä½ ç»æé»å°å°ç®±éå»ï¼ã > > 3ãå°ç®±ï¼ä½ ç»ææé¨å ³ä¸ã > > 便¬¡å®æè¿äºå¨ä½ï¼ä½ å°±å¯ä»¥æå¤§è±¡è£ è¿å»ã ### 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 å¼åç¯å¢é ç½® è¿éç»å¤§å®¶æ¨èå 个 JDK å®è£ åé ç½®çåå®¢ï¼ [Windows çæ¬ JDK çä¸è½½åå®è£ ](https://www.cnblogs.com/renqiqiang/p/6822143.html) [mac çæ¬ JDK çä¸è½½åå®è£ ](https://www.jianshu.com/p/a85658902f26) ## 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 符å·è¡¨  * æä½è¿ç®ç¬¦ æä½è¿ç®ç¬¦ç¨æ¥æä½æ´æ°åºæ¬ç±»åä¸çæ¯ä¸ª`æ¯ç¹`ä½ï¼ä¹å°±æ¯äºè¿å¶ä½ãæä½æä½ç¬¦ä¼å¯¹ä¸¤ä¸ªåæ°ä¸å¯¹åºç使§è¡å¸å°ä»£æ°è¿ç®ï¼å¹¶æç»çæä¸ä¸ªç»æã  妿è¿è¡æ¯è¾çåæ¹æ¯æ°åçè¯ï¼é£ä¹è¿è¡æ¯è¾å°±ä¼å为æä½è¿ç®ã æä½ä¸ï¼æä½è¿è¡ä¸è¿ç®ï¼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 caseå¤åæ¯è¯å¥ ä¸ç§æ¯ **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 ä¸ç§é常éè¦çå¼åææ³ï¼ä½æ¯é¢åå¯¹è±¡å¹¶ä¸æ¯ Java æç¹æçææ³ï¼è¿é大家ä¸è¦ææ··äºã ä¸é¢æä»¬æ¥æ¢è®¨é¢åå¯¹è±¡çææ³ï¼é¢åå¯¹è±¡çææ³å·²ç»éæ¥å代äºè¿ç¨åçææ³ --- é¢åè¿ç¨ï¼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 int[] {1, 3, 2}); // ä¼ éæ°ç» ``` ### 对象ç鿝 è½ç¶ Java è¯è¨æ¯åºäº C++ çï¼ä½æ¯å®å C/C++ ä¸ä¸ªéè¦çç¹å¾å°±æ¯ä¸éè¦æå¨ç®¡ç对象ç鿝工ä½ãå¨èåçä¸ä¹¦ ãæ·±å ¥çè§£ Java èææºã䏿å°ä¸ä¸ªè§ç¹  å¨ Java ä¸ï¼æä»¬ä¸åéè¦æå¨ç®¡ç对象ç鿝ï¼å®æ¯ç± Java èææºï¼JVMï¼è¿è¡ç®¡çå鿝çãè½ç¶æä»¬ä¸éè¦æå¨ç®¡ç对象ï¼ä½æ¯ä½ éè¦ç¥é `对象ä½ç¨å` è¿ä¸ªæ¦å¿µã #### 对象ä½ç¨å è®¸å¤æ°è¯è¨é½æ`ä½ç¨å(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(); } } ``` å ³äºæ·±å ¥ç解代ççæç« ï¼å¯ä»¥åè [卿代çç«ç¶å¦æ¤ç®åï¼](https://mp.weixin.qq.com/s?__biz=MzkwMDE1MzkwNQ==&mid=2247495729&idx=1&sn=a8960d2bf5a3cb61ad1cbd4fe0f547bc&chksm=c04ae76ff73d6e79f0f786666dfc769fda050c497d9b5ce2a40e4218fa409c9c87640c9834af&token=807132442&lang=zh_CN#rd) [æ·±å ¥ç解代ç](https://mp.weixin.qq.com/s?__biz=MzkwMDE1MzkwNQ==&mid=2247495842&idx=1&sn=e04e448d3e193912bf4702125028451f&chksm=c04ae7fcf73d6eea6737ff788c8cd09ed7e9c208858439c5fcd7269f1792708507fedb7b6e1b&token=941500738&lang=zh_CN#rd) ### åä¸è½¬å åä¸è½¬å代表äºç¶ç±»ä¸åç±»ä¹é´çå ³ç³»ï¼å ¶å®ç¶ç±»ååç±»ä¹é´ä¸ä» ä» æåä¸è½¬åï¼è¿æåä¸è½¬åï¼å®ä»¬ç转ååçèå´ä¸ä¸æ · * `åä¸è½¬å`ï¼éè¿å类对象(å°èå´)转å为ç¶ç±»å¯¹è±¡(大èå´)ï¼è¿ç§è½¬æ¢æ¯èªå¨å®æçï¼ä¸ç¨å¼ºå¶ã * `åä¸è½¬å` : éè¿ç¶ç±»å¯¹è±¡(大èå´)å®ä¾åå类对象(å°èå´)ï¼è¿ç§è½¬æ¢ä¸æ¯èªå¨å®æçï¼éè¦å¼ºå¶æå®ã ### 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 代ç åä¸è¿è¡ã å ³äº static å ³é®åçæ·±å ¥çè§£ç¨æ³ï¼å¯ä»¥åèç¬è çè¿ç¯æç« [ä¸ä¸ª static è¿è½é¾å¾ä½æï¼](https://mp.weixin.qq.com/s?__biz=MzI0ODk2NDIyMQ==&mid=2247484455&idx=1&sn=582d5d2722dab28a36b6c7bc3f39d3fb&chksm=e999f135deee7823226d4da1e8367168a3d0ec6e66c9a589843233b7e801c416d2e535b383be&token=1464638247&lang=zh_CN#rd)强ç建议å¦å® Java åºç¡ä¹åé 读ã ### final final çæææ¯æåçãæç»çï¼å®å¯ä»¥ä¿®é¥°**ç±»ã屿§åæ¹æ³**ã * final 修饰类æ¶ï¼è¡¨æè¿ä¸ªç±»ä¸è½è¢«ç»§æ¿ãfinal ç±»ä¸çæååéå¯ä»¥æ ¹æ®éè¦è®¾ä¸º finalï¼ä½æ¯è¦æ³¨æ final ç±»ä¸çæææåæ¹æ³é½ä¼è¢«éå¼å°æå®ä¸º final æ¹æ³ã ```java class Parent {} final class Person extends Parent{} //å¯ä»¥ç»§æ¿Parentç±»class Child extends Person{} //ä¸è½ç»§æ¿Personç±» ``` * final ä¿®é¥°æ¹æ³æ¶ï¼è¡¨æè¿ä¸ªæ¹æ³ä¸è½è¢«ä»»ä½åç±»éåï¼å æ¤ï¼å¦æåªæå¨æ³æç¡®ç¦æ¢è¯¥æ¹æ³å¨åç±»ä¸è¢«è¦ççæ åµä¸æå°æ¹æ³è®¾ç½®ä¸º finalã ```java class Parent { // finalä¿®é¥°çæ¹æ³ï¼ä¸å¯ä»¥è¢«è¦çï¼ä½å¯ä»¥ç»§æ¿ä½¿ç¨ public final void method1(){} //è¿ä¸ªæ¹æ³ä¸å¯ä»¥éå public void method2(){} } class Child extends Parent { //å¯ä»¥éåmethod2æ¹æ³ public final void method2(){} } ``` * final 修饰åéåä¸ºä¸¤ç§æ åµï¼ä¸ç§æ¯ä¿®é¥°åºæ¬æ°æ®ç±»åï¼è¡¨ç¤ºæ°æ®ç±»åçå¼ä¸è½è¢«ä¿®æ¹ï¼ä¸ç§æ¯ä¿®é¥°å¼ç¨ç±»åï¼è¡¨ç¤ºå¯¹å ¶åå§åä¹å便ä¸è½åè®©å ¶æåå¦ä¸ä¸ªå¯¹è±¡ã ```java final int i = 20;i = 30; //èµå¼æ¥éï¼final修饰çåéåªè½èµå¼ä¸æ¬¡ ``` å¨ Java ä¸ï¼ä¸ final ãfinally å finalize å¹¶æä¸º**æåçä¸å å¼**ãå ³äºè¿ä¸ä¸ªå ³é®åç详ç»ç¨æ³ï¼ä½ å¯ä»¥åèé 读ä½è çè¿ç¯æç« [çå®è¿ç¯ finalãfinally å finalize åé¢è¯å®æ¯ç®å°±æ²¡é®é¢äº](https://mp.weixin.qq.com/s?__biz=MzkwMDE1MzkwNQ==&mid=2247495775&idx=1&sn=98e9f5ba4ea59616161e3c9c9c103456&source=41#wechat_redirect) ## æ¥å£åæ½è±¡ç±» ### æ¥å£ æ¥å£ç¸å½äºå°±æ¯å¯¹å¤çä¸ç§çº¦å®åæ åï¼è¿éæ¿æä½ç³»ç»ä¸¾ä¾åï¼ä¸ºä»ä¹ä¼ææä½ç³»ç»ï¼å°±ä¼ä¸ºäºå±è½è½¯ä»¶ç夿æ§å硬件çç®åæ§ä¹é´çå·®å¼ï¼ä¸ºè½¯ä»¶æä¾ç»ä¸çæ åã å¨ 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  UncheckedException  ### ä¸ 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 Parcel1 { public class Contents{ private int value = 0; public int getValue(){ return value; } } } ``` è¿æ¯ä¸ä¸ªå¾ç®åçå é¨ç±»å®ä¹æ¹å¼ï¼ä½ å¯ä»¥ç´æ¥æä¸ä¸ªç±»è³äºå¦ä¸ä¸ªç±»çå é¨ï¼è¿ç§å®ä¹ Contents ç±»çæ¹å¼è¢«ç§°ä¸ºå é¨ç±»ã é£ä¹ï¼å°±åä¸é¢ä»£ç æå±ç¤ºçï¼ç¨åºå该å¦ä½è®¿é® Contents ä¸çå 容å¢ï¼ ```java public class Parcel1 { public class Contents{ private int value = 0; public int getValue(){ return value; } } public Contents contents(){ return new Contents(); } public static void main(String[] args) { Parcel1 p1 = new Parcel1(); Parcel1.Contents pc1 = p1.contents(); System.out.println(pc1.getValue()); } } ``` å°±åä¸é¢ä»£ç çå°ç飿 ·ï¼ä½ å¯ä»¥åä¸ä¸ªæ¹æ³æ¥è®¿é® Contentsï¼ç¸å½äºæåäºä¸ä¸ªå¯¹ Contents çå¼ç¨ï¼å¯ä»¥ç¨**å¤é¨ç±».å é¨ç±»**è¿ç§å®ä¹æ¹å¼æ¥å建ä¸ä¸ªå¯¹äºå é¨ç±»çå¼ç¨ï¼å°±å Parcel1.Contents pc1 = p1.contents() æå±ç¤ºçï¼è pc1 ç¸å½äºææäºå¯¹äºå é¨ç±» Contents çè®¿é®æéã > ç°å¨ï¼æå°±æä¸ä¸ªçé®ï¼å¦æä¸é¢ä»£ç ä¸ç contents æ¹æ³åä¸ºéææ¹æ³ï¼pc1 è¿è½è®¿é®å°åï¼ ç¼è¯å°±è¿ä¸å»ï¼é£ä¹ä¸ºä»ä¹ä¼è®¿é®ä¸å°å¢ï¼è¯·çæ¥ä¸æ¥çåæã ### 龿¥å°å¤é¨ç±» çå°è¿éï¼ä½ è¿ä¸æç½ä¸ºä»ä¹è¦éç¨è¿ç§æ¹å¼æ¥ç¼å代ç ï¼å¥½ååªæ¯ä¸ºäºè£ B ï¼æè ä½ è§å¾éæ°å®ä¹ä¸ä¸ªç±»å¾éº»ç¦ï¼å¹²èç´æ¥å®ä¹ä¸ä¸ªå é¨ç±»å¾äºï¼å¥½åå°ç°å¨å¹¶æ²¡æçå°è¿ç§å®ä¹å é¨ç±»çæ¹å¼ä¸ºæä»¬å¸¦æ¥ç好å¤ã请çä¸é¢è¿ä¸ªä¾å ```java public class Parcel2 { private static int i = 11; public class Parcel2Inner { public Parcel2Inner(){ i++; } public int getValue(){ return i; } } public Parcel2Inner parcel2Inner(){ return new Parcel2Inner(); } public static void main(String[] args) { Parcel2 p2 = new Parcel2(); for(int i = 0;i < 5;i++){ p2.parcel2Inner(); } System.out.println("p2.i = " + p2.i); } } ``` è¾åºç»æï¼ 16 å½ä½ å建äºä¸ä¸ªå é¨ç±»å¯¹è±¡çæ¶åï¼æ¤å¯¹è±¡å°±ä¸å®çå¤å´å¯¹è±¡äº§çäºæç§èç³»ï¼å¦ä¸é¢ä»£ç æç¤ºï¼å é¨ç±»Parcel2Inner æ¯å¯ä»¥è®¿é®å° Parcel2 ä¸ç i çå¼ï¼ä¹å¯ä»¥å¯¹è¿ä¸ªå¼è¿è¡ä¿®æ¹ã > é£ä¹ï¼é®é¢æ¥äºï¼å¦ä½å建ä¸ä¸ªå é¨ç±»ç对象å¢ï¼ç¨åºåä¸è½æ¯æ¬¡é½åä¸ä¸ªæ¹æ³è¿åå¤é¨ç±»ç对象å§ï¼çä¸é¢ä»£ç ï¼ ```java public class Parcel3 { public class Contents { public Parcel3 dotThis(){ return Parcel3.this; } public String toString(){ return "Contents"; } } public Parcel3 contents(){ return new Contents().dotThis(); } public String toString(){ return "Parcel3"; } public static void main(String[] args) { Parcel3 pc3 = new Parcel3(); Contents c = pc3.new Contents(); Parcel3 parcel3 = pc3.contents(); System.out.println(pc3); System.out.println(c); System.out.println(parcel3); } } ``` è¾åº: Parcel3 Contents Parcel3 å¦ä¸é¢ä»£ç æç¤ºï¼Parcel3 å å®ä¹äºä¸ä¸ªå é¨ç±» Contentsï¼å é¨ç±»ä¸å®ä¹äºä¸ä¸ªæ¹æ³ dotThis()ï¼è¿ä¸ªæ¹æ³çè¿åå¼ä¸ºå¤é¨ç±»ç对象ï¼å¨å¤é¨ç±»ä¸æä¸ä¸ª contents() æ¹æ³ï¼è¿ä¸ªæ¹æ³è¿åçè¿æ¯å¤é¨ç±»çå¼ç¨ã ### å é¨ç±»ä¸åä¸è½¬å æ¬æå°ç°å¨æå±ç¤ºç齿¯æ¬ç±»ææå é¨ç±»çè®¿é®æéï¼é£ä¹ï¼ä¸æ¤ç±»æ å ³çç±»æ¯å¦ä½æææ¤ç±»å é¨ç±»çè®¿é®æéå¢ï¼èä¸å é¨ç±»ä¸åä¸è½¬åå°åºæä»ä¹å ³ç³»å¢ï¼ ```java public interface Animal { void eat(); } public class Parcel4 { private class Dog implements Animal { @Override public void eat() { System.out.println("å骨头"); } } public Animal getDog(){ return new Dog(); } public static void main(String[] args) { Parcel4 p4 = new Parcel4(); //Animal dog = p4.new Dog(); Animal dog = p4.getDog(); dog.eat(); } } ``` è¾åºï¼ å骨头 è¿ä¸ªè¾åºå¤§å®¶è¯å®é½ç¥éäºï¼Dog æ¯ç± private 修饰çï¼æè¯´éæ¬ç±»çä»»ä½ä¸ä¸ªç±»é½æ¯è®¿é®ä¸å°ï¼é£ä¹ä¸ºä»ä¹è½å¤è®¿é®å°å¢ï¼ ä»ç»æ³ä¸ä¸ä¾¿ç¥ï¼å 为 Parcel4 æ¯ public çï¼è Parcel4 æ¯å¯ä»¥è®¿é®èªå·±çå é¨ç±»çï¼é£ä¹ Animal ä¹å¯ä»¥è®¿é®å° Parcel4 çå é¨ç±»ä¹å°±æ¯ Dog ç±»ï¼å¹¶ä¸ Dog ç±»æ¯å®ç°äº Animal æ¥å£ï¼æä»¥ getDog() æ¹æ³è¿åç乿¯ Animal ç±»çåç±»ï¼ä»èè¾¾å°äºåä¸è½¬åçç®çï¼è®©ä»£ç æ´ç¾å¦ã ### å®ä¹å¨æ¹æ³ä¸åä»»æä½ç¨åå é¨çç±» ä¸é¢æå±ç¤ºçä¸äºå é¨ç±»çå®ä¹é½æ¯æ®éå é¨ç±»çå®ä¹ï¼å¦æææ³å¨ä¸ä¸ªæ¹æ³ä¸æè æä¸ªä½ç¨åå å®ä¹ä¸ä¸ªå é¨ç±»è¯¥å¦ä½ç¼åå¢ï¼ ä½ å¯è½ä¼èèè¿å ç§å®ä¹çæè·¯ï¼ 1. ææ³å®ä¹ä¸ä¸ªå é¨ç±»ï¼å®å®ç°äºæä¸ªæ¥å£ï¼æå®ä¹å é¨ç±»æ¯ä¸ºäºè¿åæ¥å£çå¼ç¨ 2. ææ³è§£å³æä¸ªé®é¢ï¼å¹¶ä¸è¿ä¸ªç±»åä¸å¸æå®æ¯å ¬å ±å¯ç¨çï¼é¡¾åæä¹å°±æ¯å°è£ èµ·æ¥ï¼ä¸è®©å«äººç¨ 3. å 为æ... 以䏿¯å ç§å®ä¹å é¨ç±»çæ¹å¼ï¼ - ä¸ä¸ªå¨æ¹æ³ä¸å®ä¹çç±»(å±é¨å é¨ç±») - ä¸ä¸ªå®ä¹å¨ä½ç¨åå çç±»ï¼è¿ä¸ªä½ç¨å卿¹æ³çå é¨(æåå é¨ç±») - ä¸ä¸ªå®ç°äºæ¥å£çå¿åç±»(å¿åå é¨ç±») - ä¸ä¸ªå¿åç±»ï¼å®æ©å±äºéé»è®¤æé å¨çç±» - ä¸ä¸ªå¿åç±»ï¼æ§è¡å段åå§åæä½ - ä¸ä¸ªå¿åç±»ï¼å®éè¿å®ä¾åå§åå®ç°æé - __å®ä¹å¨æ¹æ³å é¨çç±»å被称为å±é¨å é¨ç±»__ ```java public class Parcel5 { private Destination destination(String s){ class PDestination implements Destination{ String label; public PDestination(String whereTo){ label = whereTo; } @Override public String readLabel() { return label; } } return new PDestination(s); } public static void main(String[] args) { Parcel5 p5 = new Parcel5(); Destination destination = p5.destination("China"); System.out.println(destination.readLabel()); } } ``` è¾åº ï¼ China å¦ä¸é¢ä»£ç æç¤ºï¼ä½ å¯ä»¥å¨ç¼åä¸ä¸ªæ¹æ³çæ¶åï¼å¨æ¹æ³ä¸æå ¥ä¸ä¸ªç±»çå®ä¹ï¼èå é¨ç±»ä¸ç屿§æ¯å½ç±»ææçï¼æå¨åè¿æ®µä»£ç çæ¶åå¾å¥½å¥,å é¨ç±»çæ§è¡è¿ç¨æ¯ææ ·çï¼Debuggerèµ°äºä¸ä¸åç°å½æ§è¡å°p5.destination("China") çæ¶åï¼å 伿§è¡ return new PDestination(s)ï¼ç¶åæä¼èµ° PDestination çåå§åæä½ï¼è¿ä¸æä»¬å¯¹å ¶å¤é¨ç±»çåå§åæ¹å¼æ¯ä¸æ ·çï¼åªä¸è¿è¿ä¸ªæ¹æ³æä¾äºä¸ä¸ªè®¿é®å é¨ç±»çå ¥å£èå·²ã > å±é¨å é¨ç±»çå®ä¹ä¸è½æè®¿é®ä¿®é¥°ç¬¦ - ä¸ä¸ªå®ä¹å¨ä½ç¨åå çç±»ï¼è¿ä¸ªä½ç¨å卿¹æ³çå é¨ ```java public class Parcel6 { // 忤°åçæ¹æ³ private void eatCoconut(boolean flag){ // 妿å¯ä»¥å椰åçè¯ if(flag){ class Coconut { private String pipe; public Coconut(String pipe){ this.pipe = pipe; } // 忤°åæ±çæ¹æ³ String drinkCoconutJuice(){ System.out.println("忤°åæ±"); return pipe; } } // æä¾ä¸ä¸ªå¸ç®¡ï¼å¯ä»¥åæ¤°åæ± Coconut coconut = new Coconut("ç¨å¸ç®¡å"); coconut.drinkCoconutJuice(); } /** * 妿å¯ä»¥å椰åçè¯ï¼ä½ æå¯ä»¥ç¨å¸ç®¡åæ¤°åæ± * 妿ä¸è½æ¥å°åæ¤°åæ±çæä»¤çè¯ï¼é£ä¹ä½ å°±ä¸è½åæ¤°åæ± */ // Coconut coconut = new Coconut("ç¨å¸ç®¡å"); // coconut.drinkCoconutJuice(); } public static void main(String[] args) { Parcel6 p6 = new Parcel6(); p6.eatCoconut(true); } } ``` è¾åºï¼ 忤°åæ± å¦ä¸é¢ä»£ç æç¤ºï¼åªæç¨åºååè¯ç¨åºï¼ç°å¨ææ³åä¸ä¸ªæ¤°åï¼å½ç¨åºæ¥æ¶å°è¿æ¡å½ä»¤çæ¶åï¼å®åç好çï¼é©¬ä¸ä¸ºæ¨åå¤ä¸ä¸ªæ¤°åï¼å¹¶æä¾ä¸ä¸ªå¸ç®¡è®©æ¨å¯ä»¥åå°æ°é²çæ¤°åæ±ãç¨åºå妿䏿³å椰åçè¯ï¼é£ä¹ç¨åºå°±ä¸ä¼ä¸ºä½ å夿¤°åï¼æ´å«è¯´è®©ä½ 忤°åæ±äºã - ä¸ä¸ªå®ç°äºå¿åæ¥å£çç±» æä»¬é½ç¥éæ¥å£æ¯ä¸è½è¢«å®ä¾åçï¼ä¹å°±æ¯è¯´ä½ ä¸è½ return ä¸ä¸ªæ¥å£ç对象ï¼ä½ åªè½æ¯è¿åè¿ä¸ªæ¥å£åç±»ç对象ï¼ä½æ¯å¦æåä¸é¢è¿æ ·å®ä¹ï¼ä½ ä¼ä¸ä¼è¡¨ç¤ºæçå¢ï¼ ```java public interface Contents { int getValue(); } public class Parcel7 { private Contents contents(){ return new Contents() { private int value = 11; @Override public int getValue() { return value; } }; } public static void main(String[] args) { Parcel7 p7 = new Parcel7(); System.out.println(p7.contents().getValue()); } } ``` è¾åº : 11 为ä»ä¹è½å¤è¿åä¸ä¸ªæ¥å£çå®ä¹ï¼èä¸è¿æ {}ï¼è¿å°åºæ¯ä»ä¹é¬¼ï¼ è¿å ¶å®æ¯ä¸ç§å¿åå é¨ç±»çåæ³ï¼å ¶å®åä¸é¢æè®²çå é¨ç±»ååä¸è½¬åæ¯ç¸ä¼¼çãä¹å°±æ¯è¯´å¿åå é¨ç±»è¿åç new Contents() å ¶å®ä¹æ¯å±äº Contents çä¸ä¸ªå®ç°ç±»ï¼åªä¸è¿è¿ä¸ªå®ç°ç±»çåå被éèæäºï¼è½ç¨å¦ä¸ç代ç ç¤ºä¾æ¥è¿è¡è½¬æ¢ï¼ ```java public class Parcel7b { private class MyContents implements Contents { private int value = 11; @Override public int getValue() { return 11; } } public Contents contents(){ return new MyContents(); } public static void main(String[] args) { Parcel7b parcel7b = new Parcel7b(); System.out.println(parcel7b.contents().getValue()); } } ``` è¾åºçç»æä½ åºè¯¥ç¥éäºå§ï½ï¼ ä½ æ¯ä¸æ¯è§å¾è¿æ®µä»£ç å 10.3 ç« èæè¡¨ç¤ºç代ç å¾ä¸è´å¢ï¼ - ä¸ä¸ªå¿åç±»ï¼å®æ©å±äºéé»è®¤æé å¨çç±» å¦æä½ æ³è¿åä¸ä¸ªå¸¦æåæ°çæé å¨(éé»è®¤çæé å¨)ï¼è¯¥æä¹è¡¨ç¤ºå¢ï¼ ```java public class WithArgsConstructor { private int sum; public WithArgsConstructor(int sum){ this.sum = sum; } public int sumAll(){ return sum; } }public class Parcel8 { private WithArgsConstructor withArgsConstructor(int x){ // è¿åWithArgsConstructor另忰çæé å¨ï¼æ§è¡å段åå§å return new WithArgsConstructor(x){ // éåsumAllæ¹æ³ï¼å®ç°åç±»çæ§è¡é»è¾ @Override public int sumAll(){ return super.sumAll() * 2; } }; } public static void main(String[] args) { Parcel8 p8 = new Parcel8(); System.out.println(p8.withArgsConstructor(10).sumAll()); } } ``` ä»¥ä¸ WithArgsConstructor ä¸ç代ç å¾ç®åï¼å®ä¹ä¸ä¸ª sum åæ®µï¼æé å¨è¿è¡åå§åï¼sumAll æ¹æ³è¿å sum çå¼ï¼Parcel8 ä¸ç withArgsConstructor æ¹æ³ç´æ¥è¿å x çå¼ï¼ä½æ¯å¨è¿ä¸ªæ¶åï¼ä½ æ³å¨è¿åå¼ä¸åä¸äºç¹æ®çå¤çï¼æ¯å¦ä½ æ³å®ä¹ä¸ä¸ªç±»ï¼éå sumAll æ¹æ³ï¼æ¥å®ç°åç±»çä¸å¡é»è¾ã Java ç¼ç¨ææ³198页ä¸è¯´ 代ç ä¸çâ;â并䏿¯è¡¨ç¤ºå é¨ç±»ç»æï¼èæ¯è¡¨è¾¾å¼çç»æï¼åªä¸è¿è¿ä¸ªè¡¨è¾¾å¼æ£å·§å å«äºå¿åå é¨ç±»èå·²ã - ä¸ä¸ªå¿åç±»ï¼å®è½å¤æ§è¡å段åå§å ä¸é¢ä»£ç ç¡®å®å¯ä»¥è¿è¡åå§åæä½ï¼ä¸è¿æ¯éè¿æé 卿§è¡å段çåå§åï¼å¦ææ²¡æå¸¦åæ°çæé å¨ï¼è¿è½æ§è¡åå§åæä½åï¼ è¿æ ·ä¹æ¯å¯ä»¥çã ```java public class Parcel9 { private Destination destination(String dest){ return new Destination() { // åå§åèµå¼æä½ private String label = dest; @Override public String readLabel() { return label; } }; } public static void main(String[] args) { Parcel9 p9 = new Parcel9(); System.out.println(p9.destination("pen").readLabel()); } } ``` Java ç¼ç¨ææ³ p198 ä¸è¯´å¦æç»å段è¿è¡åå§åæä½ï¼é£ä¹å½¢åå¿ é¡»æ¯ final çï¼å¦æä¸æ¯ finalï¼ç¼è¯å¨ä¼æ¥éï¼è¿é¨åæåºæ¥è´¨çï¼å 为æä¸å®ä¹ä¸ºfinalï¼ç¼è¯å¨ä¹æ²¡ææ¥éãæèèè¿æ¯ä¸æ¯ private çé®é¢ï¼å½ææ private æ¹ä¸º publicï¼ä¹æ²¡æä»»ä½é®é¢ã æä¸æ¸ æ¥æ¯ä¸æçä½è ç¿»è¯æé®é¢ï¼è¿æ¯ç»è¿è¿ä¹å¤ Java çæ¬çå级æé¤äºè¿ä¸ªé®é¢ï¼ææ²¡æèè¯åçæ¯ææ ·åçï¼è¿éè¿å¸ææç¥éç大ç帮å¿è§£éä¸ä¸è¿ä¸ªé®é¢ã - ä¸ä¸ªå¿åç±»ï¼å®éè¿å®ä¾åå§åå®ç°æé ```java public abstract class Base { public Base(int i){ System.out.println("Base Constructor = " + i); } abstract void f();}public class AnonymousConstructor { private static Base getBase(int i){ return new Base(i){ { System.out.println("Base Initialization" + i); } @Override public void f(){ System.out.println("AnonymousConstructor.f()æ¹æ³è¢«è°ç¨äº"); } }; } public static void main(String[] args) { Base base = getBase(57); base.f(); } } ``` è¾åºï¼ Base Constructor = 57 Base Initialization 57 AnonymousConstructor.f()æ¹æ³è¢«è°ç¨äº è¿æ®µä»£ç å "ä¸ä¸ªå¿åç±»ï¼å®æ©å±äºéé»è®¤æé å¨çç±»" ä¸å±äºç¸åçèç´ï¼é½æ¯éè¿æé å¨å®ç°åå§åçè¿ç¨ã ### åµå¥ç±» ä¸é¢æä»¬ä»ç»äº 6 ç§å é¨ç±»å®ä¹çæ¹å¼ï¼ç°å¨æä»¬æ¥è§£å³ä¸ä¸åå¼å§æåºççé®ï¼ä¸ºä»ä¹ contents() æ¹æ³åæéæçï¼ä¼ç¼è¯åºéçåå ï¼ Javaç¼ç¨ææ³ p201 页讲å°ï¼å¦æä¸éè¦å é¨ç±»ä¸å ¶å¤å´ç±»ä¹å产çå ³ç³»çè¯ï¼å°±æå é¨ç±»å£°æä¸º staticãè¿é常称为åµå¥ç±»ï¼ä¹å°±æ¯è¯´åµå¥ç±»çå é¨ç±»ä¸å ¶å¤å´ç±»ä¹åä¸ä¼äº§çæç§èç³»ï¼ä¹å°±æ¯è¯´å é¨ç±»è½ç¶å®ä¹å¨å¤å´ç±»ä¸ï¼ä½æ¯ç¡®å®å¯ä»¥ç¬ç«åå¨çãåµå¥ç±»ä¹è¢«ç§°ä¸ºéæå é¨ç±»ã éæå é¨ç±»æå³çï¼ 1. è¦å建åµå¥ç±»ç对象ï¼å¹¶ä¸éè¦å ¶å¤å´ç±»ç对象 2. ä¸è½ä»åµå¥ç±»ç对象ä¸è®¿é®ééæçå¤å´ç±»å¯¹è±¡ çä¸é¢ä»£ç ```java public class Parcel10 { private int value = 11; static int bValue = 12; // éæå é¨ç±» private static class PContents implements Contents { // ç¼è¯æ¥éï¼éæå é¨ç±»PContents䏿²¡æå«valueçåæ®µ @Override public int getValue() { return value; } // ç¼è¯ä¸æ¥éï¼éæå é¨ç±»PContentså¯ä»¥è®¿é®éæå±æ§bValue public int f(){ return bValue; } } // æ®éå é¨ç±» private class PDestination implements Destination { @Override public String readLabel() { return "label"; } } // ç¼è¯ä¸æ¥éï¼å ä¸ºéææ¹æ³å¯ä»¥è®¿é®éæå é¨ç±» public static Contents contents(){ return new PContents(); } // ç¼è¯æ¥éï¼å 为ééææ¹æ³ä¸è½è®¿é®éæå é¨ç±» public Contents contents2(){ Parcel10 p10 = new Parcel10(); return p10.new PContents(); } // ç¼è¯ä¸æ¥éï¼éææ¹æ³å¯ä»¥è®¿é®ééæå é¨ç±» public static Destination destination(){ Parcel10 p10 = new Parcel10(); return p10.new PDestination(); } // ç¼è¯ä¸æ¥éï¼ééææ¹æ³å¯ä»¥è®¿é®ééæå é¨ç±» public Destination destination2(){ return new PDestination(); } } ``` ç±ä¸é¢ä»£ç å¯ä»¥è§£éï¼ç¼è¯åºéçåå æ¯**éææ¹æ³ä¸è½ç´æ¥è®¿é®ééæå é¨ç±»ï¼èéè¦éè¿å建å¤å´ç±»ç对象æ¥è®¿é®æ®éå é¨ç±»**ã ### æ¥å£å é¨çç±» çº³å°¼ï¼æ¥å£å é¨åªè½å®ä¹æ¹æ³ï¼é¾éæ¥å£å é¨è¿è½æ¾ä¸ä¸ªç±»åï¼å¯ä»¥ï¼ æ£å¸¸æ åµä¸ï¼ä¸è½å¨æ¥å£å 鍿¾ç½®ä»»ä½ä»£ç ï¼ä½æ¯åµå¥ç±»ä½ä¸ºæ¥å£çä¸é¨åï¼ä½ æ¾å¨æ¥å£ä¸çä»»ä½ç±»é»è®¤é½æ¯public å static çãå ä¸ºç±»æ¯ static çï¼åªæ¯å°åµå¥ç±»ç½®äºæ¥å£çå½å空é´å ï¼è¿å¹¶ä¸è¿åæ¥å£çè§åï¼ä½ çè³å¯ä»¥å¨å é¨ç±»å®ç°å¤é¨ç±»çæ¥å£ï¼ä¸è¿ä¸è¬æä»¬ä¸æå¡è¿ä¹åã ```java public interface InnerInterface { void f(); class InnerClass implements InnerInterface { @Override public void f() { System.out.println("å®ç°äºæ¥å£çæ¹æ³"); } public static void main(String[] args) { new InnerClass().f(); } } // ä¸è½å¨æ¥å£ä¸ä½¿ç¨mainæ¹æ³ï¼ä½ å¿ é¡»æå®å®ä¹å¨æ¥å£çå é¨ç±»ä¸// public static void main(String[] args) {}} ``` è¾åºï¼ å®ç°äºæ¥å£çæ¹æ³ ### å é¨ç±»å®ç°å¤éç»§æ¿ å¨ Java ä¸ï¼ç±»ä¸ç±»ä¹é´çå ³ç³»é常æ¯ä¸å¯¹ä¸çï¼ä¹å°±æ¯å项继æ¿ååï¼é£ä¹å¨æ¥å£ä¸ï¼ç±»ä¸æ¥å£ä¹é´çå ³ç³»æ¯ä¸å¯¹å¤çï¼ä¹å°±æ¯è¯´ä¸ä¸ªç±»å¯ä»¥å®ç°å¤ä¸ªæ¥å£ï¼èæ¥å£åå é¨ç±»ç»åå¯ä»¥å®ç°"å¤éç»§æ¿"ï¼å¹¶ä¸æ¯è¯´ç¨ extends å ³é®åæ¥å®ç°ï¼èæ¯æ¥å£åå é¨ç±»ç对å¤éç»§æ¿ç模æå®ç°ã åè chenssy çæç« http://www.cnblogs.com/chenssy/p/3389027.html å·²ç»åçå¾ä¸éäºã ```java public class Food { private class InnerFruit implements Fruit{ void meakFruit(){ System.out.println("ç§ä¸ä¸ªæ°´æ"); } } private class InnerMeat implements Meat{ void makeMeat(){ System.out.println("ç ®ä¸åè"); } } public Fruit fruit(){ return new InnerFruit(); } public Meat meat(){ return new InnerMeat(); } public static void main(String[] args) { Food food = new Food(); InnerFruit innerFruit = (InnerFruit)food.fruit(); innerFruit.meakFruit(); InnerMeat innerMeat = (InnerMeat) food.meat(); innerMeat.makeMeat(); } } ``` è¾åºï¼ ç§ä¸ä¸ªæ°´æ ç ®ä¸åè ### å é¨ç±»çç»§æ¿ å é¨ç±»ä¹é´ä¹å¯ä»¥å®ç°ç»§æ¿ï¼ä¸æ®éç±»ä¹é´çç»§æ¿ç¸ä¼¼ï¼ä¸è¿ä¸å®å ¨ä¸æ ·ã ```java public class BaseClass { class BaseInnerClass { public void f(){ System.out.println("BaseInnerClass.f()"); } } private void g(){ System.out.println("BaseClass.g()"); } }/** * å¯ä»¥çå°ï¼InheritInneråªæ¯ç»§æ¿èªå é¨ç±»BaseInnerClassï¼è䏿¯å¤å´ç±» * 使¯é»è®¤çæé æ¹å¼ä¼æ¥ç¼è¯éè¯¯ï¼ * å¿ é¡»ä½¿ç¨ç±»ä¼¼enclosingClassReference.super()æè½ç¼è¯éè¿ * ç¨æ¥æ¥è¯´æå é¨ç±»ä¸å¤é¨ç±»å¯¹è±¡å¼ç¨ä¹é´çå ³èã * */ public class InheritInner extends BaseClass.BaseInnerClass{ // ç¼è¯åºé// public InheritInner(){} public InheritInner(BaseClass bc){ bc.super(); } @Override public void f() { System.out.println("InheritInner.f()"); } /* * å ä¸@Override 伿¥éï¼å 为BaseInnerClass 䏿²¡æg()æ¹æ³ * è¿ä¹æ¯ä¸ºä»ä¹è¦åä¸å®è¦å ä¸Override注解çåå ï¼å¦åé»è®¤æ¯æ¬ç±» * 䏿æçæ¹æ³ï¼ä¼é æè¯¯è§£ï¼ç¨åºå以为g()æ¹æ³æ¯éåè¿åçã @Override public void g(){ System.out.println("InheritInner.g()"); } */ public static void main(String[] args) { BaseClass baseClass = new BaseClass(); InheritInner inheritInner = new InheritInner(baseClass); inheritInner.f(); } } ``` è¾åºï¼InheritInner.f() ### å é¨ç±»çè¦ç å ³äºå é¨ç±»çè¦çå æ¥ç䏿®µä»£ç ï¼ ```java public class Man { private ManWithKnowledge man; protected class ManWithKnowledge { public void haveKnowledge(){ System.out.println("å½ä»ç¤¾ä¼æ¯éè¦ç¥è¯ç"); } } // æä»¬æ³è®©å®è¾åºåç±»çhaveKnowledge()æ¹æ³ public Man(){ System.out.println("彿们æäºä¸ä¸ªå©åï¼æä»¬æ´å¸æä»å¯ä»¥å½ä¸ä¸ªç§å¦å®¶ï¼è䏿¯ç½çº¢"); new ManWithKnowledge().haveKnowledge(); } } // ç½çº¢ public class InternetCelebrity extends Man { protected class ManWithKnowledge { public void haveKnowledge(){ System.out.println("ç½çº¢æ¯å½ä»ç¤¾ä¼çä¸ç§ç æ"); } } public static void main(String[] args) { new InternetCelebrity(); } } ``` è¾åºï¼å½æä»¬æäºä¸ä¸ªå©åï¼æä»¬æ´å¸æä»å¯ä»¥å½ä¸ä¸ªç§å¦å®¶ï¼è䏿¯ç½çº¢ å½ä»ç¤¾ä¼æ¯éè¦ç¥è¯ç æä»¬é»è®¤å é¨ç±»æ¯å¯ä»¥è¦ççãæä»¥æä»¬æ³è®©ä»è¾åº InternetCelebrity.haveKnowledge() , æ¥å®ç°æä»¬ççæ³ï¼ä½æ¯å´è¾åºäº ManWithKnowledge.haveKnowledge() æ¹æ³ã è¿ä¸ªä¾å说æå½ç»§æ¿äºæä¸ªå¤å´ç±»çæ¶åï¼å é¨ç±»å¹¶æ²¡æåçç¹å«ç¥å¥çååï¼ä¸¤ä¸ªå é¨ç±»åèªç¬ç«ï¼é½å¨åèªçå½å空é´å ã ### å ³äºæºç ä¸å é¨ç±»ç表示 ç±äºæ¯ä¸ªç±»é½ä¼äº§çä¸ä¸ª.class æä»¶ï¼å å«äºå建该类å对象çå ¨é¨ä¿¡æ¯ã åæ ·çï¼å é¨ç±»ä¹ä¼çæä¸ä¸ª.class æä»¶ï¼è¡¨ç¤ºæ¹æ³ä¸º: OneClass$OneInnerClass ### å é¨ç±»çä¼ç¹ ä¸é¢æ»ç»ä¸ä¸å é¨ç±»çä¼ç¹ï¼ 1ãå°è£ é¨å代ç ï¼å½ä½ å建ä¸ä¸ªå é¨ç±»çæ¶åï¼è¯¥å é¨ç±»é»è®¤ææå¤é¨ç±»çå¼ç¨ï¼ 2ãå é¨ç±»å ·æä¸å®ççµæ´»æ§ï¼æ 论å¤å´ç±»æ¯å¦ç»§æ¿æä¸ªæ¥å£çå®ç°ï¼å¯¹äºå é¨ç±»é½æ²¡æå½±åï¼ 3ãå é¨ç±»è½å¤ææçè§£å³å¤éç»§æ¿çé®é¢ã ## éå éåå¨æä»¬çæ¥å¸¸å¼åä¸æä½¿ç¨ç次æ°ç®ç´å¤ªå¤äºï¼ä½ å·²ç»æå®ä»¬é½ç¨ççéäºï¼ä½æ¯ä½ä¸ºä¸ååæ ¼çç¨åºåï¼ä½ ä¸ä» è¦äºè§£å®çåºæ¬ç¨æ³ï¼ä½ è¿è¦äºè§£å®çæºç ï¼åå¨å³åçï¼ä½ è¿è¦äºè§£å®æ¯å¦ä½è®¾è®¡åå®ç°çï¼ä½ è¿è¦äºè§£å®çè¡çè¿ç¨ã è¿ç¯å客就æ¥è¯¦ç»ä»ç»ä¸ä¸ Collection è¿ä¸ªåºå¤§éåæ¡æ¶çå®¶æä½ç³»åæåï¼è®©ä½ äºè§£å®ç设计ä¸å®ç°ã **æ¯æ¶åç¥åºè¿å¼ ç¥å¾äº**  é¦å æ¥ä»ç»çå°±æ¯å表ç·ç·è¾å¿çæ¥å£- **Iterator** ### Iterable æ¥å£ å®ç°æ¤æ¥å£å 许对象æä¸º for-each 循ç¯çç®æ ï¼ä¹å°±æ¯å¢å¼º for 循ç¯ï¼å®æ¯ Java ä¸çä¸ç§`è¯æ³ç³`ã ```java List