# JAVAåºæ¬
## String æ¯æåºæ¬çæ°æ®ç±»ååï¼
䏿¯ãJavaä¸çåºæ¬æ°æ®ç±»ååªæ8个ï¼byteãshortãintãlongãfloatãdoubleãcharãbooleanï¼é¤äºåºæ¬ç±»åï¼primitive typeï¼åæä¸¾ç±»åï¼enumeration typeï¼ï¼å©ä¸ç齿¯å¼ç¨ç±»åï¼reference typeï¼ã
## float f=3.4;æ¯å¦æ£ç¡®ï¼
䏿£ç¡®ã3.4æ¯å精度æ°ï¼å°å精度åï¼doubleï¼èµå¼ç»æµ®ç¹åï¼floatï¼å±äºä¸è½¬åï¼down-castingï¼ä¹ç§°ä¸ºçªåï¼ä¼é æç²¾åº¦æå¤±ï¼å æ¤éè¦å¼ºå¶ç±»å转æ¢float f =(float)3.4; æè
åæfloat f =3.4F;ã
## short s1 = 1; s1 = s1 + 1;æéå?short s1 = 1; s1 += 1;æéåï¼
对äºshort s1 = 1; s1 = s1 + 1;ç±äº1æ¯intç±»åï¼å æ¤s1+1è¿ç®ç»æä¹æ¯int åï¼éè¦å¼ºå¶è½¬æ¢ç±»åæè½èµå¼ç»shortåãèshort s1 = 1; s1 += 1;å¯ä»¥æ£ç¡®ç¼è¯ï¼å 为s1+= 1;ç¸å½äºs1 = (short)(s1 + 1);å
¶ä¸æéå«ç强å¶ç±»å转æ¢ã
## intåIntegeræä»ä¹åºå«ï¼
Javaæ¯ä¸ä¸ªè¿ä¹çº¯æ´çé¢å对象ç¼ç¨è¯è¨ï¼ä½æ¯ä¸ºäºç¼ç¨çæ¹ä¾¿è¿æ¯å¼å
¥äºåºæ¬æ°æ®ç±»åï¼ä½æ¯ä¸ºäºè½å¤å°è¿äºåºæ¬æ°æ®ç±»åå½æå¯¹è±¡æä½ï¼Java为æ¯ä¸ä¸ªåºæ¬æ°æ®ç±»åé½å¼å
¥äºå¯¹åºçå
è£
ç±»åï¼wrapper classï¼ï¼intçå
è£
类就æ¯Integerï¼ä»Java 5å¼å§å¼å
¥äºèªå¨è£
ç®±/æç®±æºå¶ï¼ä½¿å¾äºè
å¯ä»¥ç¸äºè½¬æ¢ã
Java 为æ¯ä¸ªåå§ç±»åæä¾äºå
è£
ç±»åï¼
- åå§ç±»å: booleanï¼charï¼byteï¼shortï¼intï¼longï¼floatï¼double
- å
è£
ç±»åï¼Booleanï¼Characterï¼Byteï¼Shortï¼Integerï¼Longï¼Floatï¼Double
## &å&&çåºå«ï¼
&è¿ç®ç¬¦æä¸¤ç§ç¨æ³ï¼(1)æä½ä¸ï¼(2)é»è¾ä¸ã&&è¿ç®ç¬¦æ¯çè·¯ä¸è¿ç®ãé»è¾ä¸è·çè·¯ä¸ç差嫿¯é常巨大çï¼è½ç¶äºè
é½è¦æ±è¿ç®ç¬¦å·¦å³ä¸¤ç«¯çå¸å°å¼é½æ¯trueæ´ä¸ªè¡¨è¾¾å¼ç弿æ¯trueã&&ä¹æä»¥ç§°ä¸ºçè·¯è¿ç®æ¯å 为ï¼å¦æ&&左边ç表达å¼ç弿¯falseï¼å³è¾¹ç表达å¼ä¼è¢«ç´æ¥çè·¯æï¼ä¸ä¼è¿è¡è¿ç®ãå¾å¤æ¶åæä»¬å¯è½é½éè¦ç¨&&è䏿¯&ï¼ä¾å¦å¨éªè¯ç¨æ·ç»å½æ¶å¤å®ç¨æ·å䏿¯nullèä¸ä¸æ¯ç©ºå符串ï¼åºå½å为ï¼username != null &&!username.equals(ââ)ï¼äºè
ç顺åºä¸è½äº¤æ¢ï¼æ´ä¸è½ç¨&è¿ç®ç¬¦ï¼å 为第ä¸ä¸ªæ¡ä»¶å¦æä¸æç«ï¼æ ¹æ¬ä¸è½è¿è¡å符串çequalsæ¯è¾ï¼å¦åä¼äº§çNullPointerExceptionå¼å¸¸ã注æï¼é»è¾æè¿ç®ç¬¦ï¼|ï¼åçè·¯æè¿ç®ç¬¦ï¼||ï¼çå·®å«ä¹æ¯å¦æ¤ã
## Math.round(11.5) çäºå¤å°ï¼Math.round(-11.5)çäºå¤å°ï¼
Math.round(11.5)çè¿å弿¯12ï¼Math.round(-11.5)çè¿å弿¯-11ãåèäºå
¥çåçæ¯å¨åæ°ä¸å 0.5ç¶åè¿è¡ä¸åæ´ã
## switch æ¯å¦è½ä½ç¨å¨byte ä¸ï¼æ¯å¦è½ä½ç¨å¨long,float ä¸ï¼æ¯å¦è½ä½ç¨å¨Stringä¸ï¼
å¨Java 5以åï¼switch(expr)ä¸ï¼expråªè½æ¯byteãshortãcharãintãä»Java 5å¼å§ï¼Javaä¸å¼å
¥äºæä¸¾ç±»åï¼exprä¹å¯ä»¥æ¯enumç±»åï¼ä»Java 7å¼å§ï¼exprè¿å¯ä»¥æ¯å符串ï¼Stringï¼ï¼ä½æ¯é¿æ´åï¼longï¼,æµ®ç¹æ°ï¼floatï¼å¨ç®åææççæ¬ä¸é½æ¯ä¸å¯ä»¥çã
## 两个对象å¼ç¸å(x.equals(y) == true)ï¼ä½å´å¯æä¸åçhash codeï¼è¿å¥è¯å¯¹ä¸å¯¹ï¼
ä¸å¯¹ï¼å¦æä¸¤ä¸ªå¯¹è±¡xåy满足x.equals(y) == trueï¼å®ä»¬çåå¸ç ï¼hash codeï¼åºå½ç¸åã
Java对äºeqaulsæ¹æ³åhashCodeæ¹æ³æ¯è¿æ ·è§å®çï¼
(1)å¦æä¸¤ä¸ªå¯¹è±¡ç¸åï¼equalsæ¹æ³è¿åtrueï¼ï¼é£ä¹å®ä»¬çhashCodeå¼ä¸å®è¦ç¸åï¼
(2)å¦æä¸¤ä¸ªå¯¹è±¡çhashCodeç¸åï¼å®ä»¬å¹¶ä¸ä¸å®ç¸åãå½ç¶ï¼ä½ æªå¿
è¦æç
§è¦æ±å»åï¼ä½æ¯å¦æä½ è¿èäºä¸è¿°ååå°±ä¼åç°å¨ä½¿ç¨å®¹å¨æ¶ï¼ç¸åç对象å¯ä»¥åºç°å¨Setéåä¸ï¼åæ¶å¢å æ°å
ç´ çæçä¼å¤§å¤§ä¸éï¼å¯¹äºä½¿ç¨åå¸åå¨çç³»ç»ï¼å¦æåå¸ç é¢ç¹çå²çªå°ä¼é æååæ§è½æ¥å§ä¸éï¼ã
è¡¥å
ï¼å
³äºequalsåhashCodeæ¹æ³ï¼å¾å¤Javaç¨åºé½ç¥éï¼ä½å¾å¤äººä¹å°±æ¯ä»
ä»
ç¥éèå·²ï¼å¨Joshua Blochç大ä½ãEffective Javaãï¼å¾å¤è½¯ä»¶å
¬å¸ï¼ãEffective JavaãããJavaç¼ç¨ææ³ã以åãéæï¼æ¹åæ¢æä»£ç è´¨éãæ¯Javaç¨åºåå¿
ç书ç±ï¼å¦æä½ è¿æ²¡çè¿ï¼é£å°±èµ¶ç´§å»äºé©¬é买䏿¬å§ï¼ä¸æ¯è¿æ ·ä»ç»equalsæ¹æ³çï¼é¦å
equalsæ¹æ³å¿
须满足èªåæ§ï¼x.equals(x)å¿
é¡»è¿åtrueï¼ã对称æ§ï¼x.equals(y)è¿åtrueæ¶ï¼y.equals(x)ä¹å¿
é¡»è¿åtrueï¼ãä¼ éæ§ï¼x.equals(y)åy.equals(z)é½è¿åtrueæ¶ï¼x.equals(z)ä¹å¿
é¡»è¿åtrueï¼åä¸è´æ§ï¼å½xåyå¼ç¨çå¯¹è±¡ä¿¡æ¯æ²¡æè¢«ä¿®æ¹æ¶ï¼å¤æ¬¡è°ç¨x.equals(y)åºè¯¥å¾å°åæ ·çè¿åå¼ï¼ï¼èä¸å¯¹äºä»»ä½énullå¼çå¼ç¨xï¼x.equals(null)å¿
é¡»è¿åfalseã
å®ç°é«è´¨éçequalsæ¹æ³çè¯çªå
æ¬ï¼
1. 使ç¨==æä½ç¬¦æ£æ¥âåæ°æ¯å¦ä¸ºè¿ä¸ªå¯¹è±¡çå¼ç¨âï¼
2. 使ç¨instanceofæä½ç¬¦æ£æ¥âåæ°æ¯å¦ä¸ºæ£ç¡®çç±»åâï¼
3. 对äºç±»ä¸çå
³é®å±æ§ï¼æ£æ¥åæ°ä¼ å
¥å¯¹è±¡ç屿§æ¯å¦ä¸ä¹ç¸å¹é
ï¼
4. ç¼åå®equalsæ¹æ³åï¼é®èªå·±å®æ¯å¦æ»¡è¶³å¯¹ç§°æ§ãä¼ éæ§ãä¸è´æ§ï¼
5. éåequalsæ¶æ»æ¯è¦éåhashCodeï¼
6. ä¸è¦å°equalsæ¹æ³åæ°ä¸çObjectå¯¹è±¡æ¿æ¢ä¸ºå
¶ä»çç±»åï¼å¨éåæ¶ä¸è¦å¿æ@Override注解ã
## å½ä¸ä¸ªå¯¹è±¡è¢«å½ä½åæ°ä¼ éå°ä¸ä¸ªæ¹æ³åï¼æ¤æ¹æ³å¯æ¹åè¿ä¸ªå¯¹è±¡ç屿§ï¼å¹¶å¯è¿ååååçç»æï¼é£ä¹è¿éå°åºæ¯å¼ä¼ éè¿æ¯å¼ç¨ä¼ éï¼
æ¯å¼ä¼ éãJavaè¯è¨çæ¹æ³è°ç¨åªæ¯æåæ°çå¼ä¼ éãå½ä¸ä¸ªå¯¹è±¡å®ä¾ä½ä¸ºä¸ä¸ªåæ°è¢«ä¼ éå°æ¹æ³ä¸æ¶ï¼åæ°çå¼å°±æ¯å¯¹è¯¥å¯¹è±¡çå¼ç¨ã对象ç屿§å¯ä»¥å¨è¢«è°ç¨è¿ç¨ä¸è¢«æ¹åï¼ä½å¯¹å¯¹è±¡å¼ç¨çæ¹åæ¯ä¸ä¼å½±åå°è°ç¨è
çãC++åC#ä¸å¯ä»¥éè¿ä¼ å¼ç¨æä¼ è¾åºåæ°æ¥æ¹åä¼ å
¥çåæ°çå¼ã
## StringåStringBuilderãStringBufferçåºå«ï¼
Java平尿ä¾äºä¸¤ç§ç±»åçå符串ï¼StringåStringBuffer/StringBuilderï¼å®ä»¬å¯ä»¥å¨ååæä½å符串ãå
¶ä¸Stringæ¯åªè¯»å符串ï¼ä¹å°±æå³çStringå¼ç¨çå符串å
容æ¯ä¸è½è¢«æ¹åçãèStringBuffer/StringBuilder类表示çå符串对象å¯ä»¥ç´æ¥è¿è¡ä¿®æ¹ãStringBuilderæ¯Java 5ä¸å¼å
¥çï¼å®åStringBufferçæ¹æ³å®å
¨ç¸åï¼åºå«å¨äºå®æ¯å¨å线ç¨ç¯å¢ä¸ä½¿ç¨çï¼å 为å®çæææ¹é¢é½æ²¡æè¢«synchronized修饰ï¼å æ¤å®çæç乿¯StringBufferè¦é«ã
## æ½è±¡çï¼abstractï¼æ¹æ³æ¯å¦å¯åæ¶æ¯éæçï¼staticï¼,æ¯å¦å¯åæ¶æ¯æ¬å°æ¹æ³ï¼nativeï¼ï¼æ¯å¦å¯åæ¶è¢«synchronized修饰ï¼
é½ä¸è½ãæ½è±¡æ¹æ³éè¦åç±»éåï¼èéæçæ¹æ³æ¯æ æ³è¢«éåçï¼å æ¤äºè
æ¯çç¾çãæ¬å°æ¹æ³æ¯ç±æ¬å°ä»£ç ï¼å¦C代ç ï¼å®ç°çæ¹æ³ï¼èæ½è±¡æ¹æ³æ¯æ²¡æå®ç°çï¼ä¹æ¯çç¾çãsynchronizedåæ¹æ³çå®ç°ç»èæå
³ï¼æ½è±¡æ¹æ³ä¸æ¶åå®ç°ç»èï¼å æ¤ä¹æ¯ç¸äºçç¾çã
## éè¿°éæåéåå®ä¾åéçåºå«ã
éæåéæ¯è¢«static修饰符修饰çåéï¼ä¹ç§°ä¸ºç±»åéï¼å®å±äºç±»ï¼ä¸å±äºç±»çä»»ä½ä¸ä¸ªå¯¹è±¡ï¼ä¸ä¸ªç±»ä¸ç®¡å建å¤å°ä¸ªå¯¹è±¡ï¼éæåéå¨å
å䏿ä¸ä»
æä¸ä¸ªæ·è´ï¼å®ä¾åéå¿
é¡»ä¾åäºæä¸å®ä¾ï¼éè¦å
å建对象ç¶åéè¿å¯¹è±¡æè½è®¿é®å°å®ãéæåéå¯ä»¥å®ç°è®©å¤ä¸ªå¯¹è±¡å
±äº«å
åã
è¡¥å
ï¼å¨Javaå¼åä¸ï¼ä¸ä¸æç±»åå·¥å
·ç±»ä¸é叏伿大éçéææåã
## Object䏿åªäºå
Œ
±æ¹æ³ï¼
- equals()
- clone()
- getClass()
- notify(),notifyAll(),wait()
- toString()
## æ¯å¦å¯ä»¥ä»ä¸ä¸ªéæï¼staticï¼æ¹æ³å
é¨ååºå¯¹ééæï¼non-staticï¼æ¹æ³çè°ç¨ï¼
ä¸å¯ä»¥ï¼éææ¹æ³åªè½è®¿é®éææåï¼å 为ééææ¹æ³çè°ç¨è¦å
å建对象ï¼å¨è°ç¨éææ¹æ³æ¶å¯è½å¯¹è±¡å¹¶æ²¡æè¢«åå§åã
## æ·±æ·è´åæµ
æ·è´çåºå«æ¯ä»ä¹ï¼
æµ
æ·è´ï¼è¢«å¤å¶å¯¹è±¡çææåéé½å«æä¸åæ¥ç对象ç¸åçå¼ï¼èææç对å
¶ä»å¯¹è±¡çå¼ç¨ä»ç¶æå忥çå¯¹è±¡ãæ¢è¨ä¹ï¼æµ
æ·è´ä»
ä»
å¤å¶æèèç对象ï¼èä¸å¤å¶å®æå¼ç¨ç对象ã
æ·±æ·è´ï¼è¢«å¤å¶å¯¹è±¡çææåéé½å«æä¸åæ¥ç对象ç¸åçå¼ï¼èé£äºå¼ç¨å
¶ä»å¯¹è±¡çåéå°æå被å¤å¶è¿çæ°å¯¹è±¡ï¼èä¸åæ¯åæçé£äºè¢«å¼ç¨çå¯¹è±¡ãæ¢è¨ä¹ï¼æ·±æ·è´æè¦å¤å¶ç对象æå¼ç¨ç对象é½å¤å¶äºä¸éã
## å¦ä½å®ç°å¯¹è±¡å
éï¼
æä¸¤ç§æ¹å¼ï¼
1. å®ç°Cloneableæ¥å£å¹¶éåObjectç±»ä¸çclone()æ¹æ³ï¼
2. å®ç°Serializableæ¥å£ï¼éè¿å¯¹è±¡çåºåååååºååå®ç°å
éï¼å¯ä»¥å®ç°çæ£ç深度å
éã
代ç å¦ä¸ï¼
```java
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class MyUtil {
private MyUtil() {
throw new AssertionError();
}
public static T clone(T obj) throws Exception {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bout);
oos.writeObject(obj);
ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bin);
return (T) ois.readObject();
// 说æï¼è°ç¨ByteArrayInputStreamæByteArrayOutputStream对象çcloseæ¹æ³æ²¡æä»»ä½æä¹
// è¿ä¸¤ä¸ªåºäºå
åçæµåªè¦åå¾åæ¶å¨æ¸
ç对象就è½å¤éæ¾èµæºï¼è¿ä¸ç¹ä¸åäºå¯¹å¤é¨èµæºï¼å¦æä»¶æµï¼çéæ¾
}
}
```
ä¸é¢æ¯æµè¯ä»£ç ï¼
```java
import java.io.Serializable;
/**
* 人类
* @author éªæ
*
*/
class Person implements Serializable {
private static final long serialVersionUID = -9102017020286042305L;
private String name; // å§å
private int age; // å¹´é¾
private Car car; // 座驾
public Person(String name, int age, Car car) {
this.name = name;
this.age = age;
this.car = car;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
}
}
```
```java
/**
* å°æ±½è½¦ç±»
* @author éªæ
*
*/
class Car implements Serializable {
private static final long serialVersionUID = -5713945027627603702L;
private String brand; // åç
private int maxSpeed; // æé«æ¶é
public Car(String brand, int maxSpeed) {
this.brand = brand;
this.maxSpeed = maxSpeed;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getMaxSpeed() {
return maxSpeed;
}
public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", maxSpeed=" + maxSpeed + "]";
}
}
```
```java
class CloneTest {
public static void main(String[] args) {
try {
Person p1 = new Person("Hao LUO", 33, new Car("Benz", 300));
Person p2 = MyUtil.clone(p1); // 深度å
é
p2.getCar().setBrand("BYD");
// ä¿®æ¹å
éçPerson对象p2å
³èçæ±½è½¦å¯¹è±¡çåç屿§
// 忥çPerson对象p1å
³èçæ±½è½¦ä¸ä¼åå°ä»»ä½å½±å
// å 为å¨å
éPerson对象æ¶å
¶å
³èçæ±½è½¦å¯¹è±¡ä¹è¢«å
éäº
System.out.println(p1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
注æï¼åºäºåºåååååºååå®ç°çå
éä¸ä»
ä»
æ¯æ·±åº¦å
éï¼æ´éè¦çæ¯éè¿æ³åéå®ï¼å¯ä»¥æ£æ¥åºè¦å
éç对象æ¯å¦æ¯æåºååï¼è¿é¡¹æ£æ¥æ¯ç¼è¯å¨å®æçï¼ä¸æ¯å¨è¿è¡æ¶æåºå¼å¸¸ï¼è¿ç§æ¯æ¹æ¡ææ¾ä¼äºä½¿ç¨Objectç±»çcloneæ¹æ³å
é对象ã让é®é¢å¨ç¼è¯çæ¶åæ´é²åºæ¥æ»æ¯ä¼äºæé®é¢çå°è¿è¡æ¶ã
## String s = new String(âxyzâ);å建äºå 个å符串对象ï¼
两个对象ï¼ä¸ä¸ªæ¯éæåºçâxyzâï¼ä¸ä¸ªæ¯ç¨newå建å¨å ä¸ç对象ã
## javaä¸==åeqauls()çåºå«,equals()å`hashcodeçåºå«
==æ¯è¿ç®ç¬¦,ç¨äºæ¯è¾ä¸¤ä¸ªå鿝å¦ç¸ç,èequalsæ¯Objectç±»çæ¹æ³,ç¨äºæ¯è¾ä¸¤ä¸ªå¯¹è±¡æ¯å¦ç¸ç.é»è®¤Objectç±»çequalsæ¹æ³æ¯æ¯è¾ä¸¤ä¸ªå¯¹è±¡çå°å,æ¤æ¶å==çç»æä¸æ ·.æ¢å¥è¯è¯´:åºæ¬ç±»åæ¯è¾ç¨==,æ¯è¾çæ¯ä»ä»¬çå¼.é»è®¤ä¸,对象ç¨==æ¯è¾æ¶,æ¯è¾çæ¯å
åå°å,妿éè¦æ¯è¾å¯¹è±¡å
容,éè¦éåequalæ¹æ³
## a==bä¸a.equals(b)æä»ä¹åºå«
妿a åb 齿¯å¯¹è±¡ï¼å a==b æ¯æ¯è¾ä¸¤ä¸ªå¯¹è±¡çå¼ç¨ï¼åªæå½ a å b æåçæ¯å ä¸çåä¸ä¸ªå¯¹è±¡æä¼è¿å trueï¼è a.equals(b) æ¯è¿è¡é»è¾æ¯è¾ï¼æä»¥é常éè¦éåè¯¥æ¹æ³æ¥æä¾é»è¾ä¸è´æ§çæ¯è¾ãä¾å¦ï¼String ç±»éå equals() æ¹æ³ï¼æä»¥å¯ä»¥ç¨äºä¸¤ä¸ªä¸å对象ï¼ä½æ¯å
å«ç忝ç¸åçæ¯è¾ã
## æ¥å£æ¯å¦å¯ç»§æ¿ï¼extendsï¼æ¥å£ï¼æ½è±¡ç±»æ¯å¦å¯å®ç°ï¼implementsï¼æ¥å£ï¼æ½è±¡ç±»æ¯å¦å¯ç»§æ¿å
·ä½ç±»ï¼concrete classï¼ï¼
æ¥å£å¯ä»¥ç»§æ¿æ¥å£ï¼è䏿¯æå¤éç»§æ¿ãæ½è±¡ç±»å¯ä»¥å®ç°(implements)æ¥å£ï¼æ½è±¡ç±»å¯ç»§æ¿å
·ä½ç±»ä¹å¯ä»¥ç»§æ¿æ½è±¡ç±»ã
## Java ä¸çfinalå
³é®åæåªäºç¨æ³ï¼
(1)修饰类ï¼è¡¨ç¤ºè¯¥ç±»ä¸è½è¢«ç»§æ¿ï¼
(2)ä¿®é¥°æ¹æ³ï¼è¡¨ç¤ºæ¹æ³ä¸è½è¢«éåï¼
(3)修饰åéï¼è¡¨ç¤ºåéåªè½ä¸æ¬¡èµå¼ä»¥åå¼ä¸è½è¢«ä¿®æ¹ï¼å¸¸éï¼ã
## throwåthrowsçåºå«
throwç¨äºä¸»å¨æåºjava.lang.Throwable ç±»çä¸ä¸ªå®ä¾åå¯¹è±¡ï¼æææ¯è¯´ä½ å¯ä»¥éè¿å
³é®å throw æåºä¸ä¸ª Error æè
ä¸ä¸ªExceptionï¼å¦ï¼throw new IllegalArgumentException(âsize must be multiple of 2â³)ã
throws çä½ç¨æ¯ä½ä¸ºæ¹æ³å£°æåç¾åçä¸é¨åï¼æ¹æ³è¢«æåºç¸åºçå¼å¸¸ä»¥ä¾¿è°ç¨è
è½å¤çãJava ä¸ï¼ä»»ä½æªå¤çç忣æ¥å¼å¸¸å¼ºå¶å¨ throws åå¥ä¸å£°æã
## ErroråExceptionæä»ä¹åºå«ï¼
Error表示系ç»çº§çé误åç¨åºä¸å¿
å¤ççå¼å¸¸ï¼æ¯æ¢å¤ä¸æ¯ä¸å¯è½ä½å¾å°é¾çæ
åµä¸çä¸ç§ä¸¥éé®é¢ï¼æ¯å¦å
åæº¢åºï¼ä¸å¯è½ææç¨åºè½å¤çè¿æ ·çæ
åµï¼
Exception表示éè¦æææè
éè¦ç¨åºè¿è¡å¤ççå¼å¸¸ï¼æ¯ä¸ç§è®¾è®¡æå®ç°é®é¢ï¼ä¹å°±æ¯è¯´ï¼å®è¡¨ç¤ºå¦æç¨åºè¿è¡æ£å¸¸ï¼ä»ä¸ä¼åççæ
åµã
## Javaè¯è¨å¦ä½è¿è¡å¼å¸¸å¤çï¼å
³é®åï¼throwsãthrowãtryãcatchãfinallyåå«å¦ä½ä½¿ç¨ï¼
Javaéè¿é¢åå¯¹è±¡çæ¹æ³è¿è¡å¼å¸¸å¤çï¼æåç§ä¸åçå¼å¸¸è¿è¡åç±»ï¼å¹¶æä¾äºè¯å¥½çæ¥å£ãå¨Javaä¸ï¼æ¯ä¸ªå¼å¸¸é½æ¯ä¸ä¸ªå¯¹è±¡ï¼å®æ¯Throwableç±»æå
¶åç±»çå®ä¾ãå½ä¸ä¸ªæ¹æ³åºç°å¼å¸¸å便æåºä¸ä¸ªå¼å¸¸å¯¹è±¡ï¼è¯¥å¯¹è±¡ä¸å
嫿å¼å¸¸ä¿¡æ¯ï¼è°ç¨è¿ä¸ªå¯¹è±¡çæ¹æ³å¯ä»¥æè·å°è¿ä¸ªå¼å¸¸å¹¶å¯ä»¥å¯¹å
¶è¿è¡å¤çã
Javaçå¼å¸¸å¤çæ¯éè¿5个å
³é®è¯æ¥å®ç°çï¼tryãcatchãthrowãthrowsåfinallyã
ä¸è¬æ
åµä¸æ¯ç¨tryæ¥æ§è¡ä¸æ®µç¨åºï¼å¦æç³»ç»ä¼æåºï¼throwï¼ä¸ä¸ªå¼å¸¸å¯¹è±¡ï¼å¯ä»¥éè¿å®çç±»åæ¥æè·ï¼catchï¼å®ï¼æéè¿æ»æ¯æ§è¡ä»£ç åï¼finallyï¼æ¥å¤çï¼
tryç¨æ¥æå®ä¸åé¢é²ææå¼å¸¸çç¨åºï¼
catchåå¥ç´§è·å¨tryååé¢ï¼ç¨æ¥æå®ä½ æ³è¦æè·çå¼å¸¸çç±»åï¼
throwè¯å¥ç¨æ¥æç¡®å°æåºä¸ä¸ªå¼å¸¸ï¼
throwsç¨æ¥å£°æä¸ä¸ªæ¹æ³å¯è½æåºçåç§å¼å¸¸ï¼å½ç¶å£°æå¼å¸¸æ¶å
许æ ç
å»åï¼ï¼
finally为确ä¿ä¸æ®µä»£ç ä¸ç®¡åçä»ä¹å¼å¸¸ç¶åµé½è¦è¢«æ§è¡ï¼
tryè¯å¥å¯ä»¥åµå¥ï¼æ¯å½éå°ä¸ä¸ªtryè¯å¥ï¼å¼å¸¸çç»æå°±ä¼è¢«æ¾å
¥å¼å¸¸æ ä¸ï¼ç´å°ææçtryè¯å¥é½å®æã妿ä¸ä¸çº§çtryè¯å¥æ²¡æå¯¹æç§å¼å¸¸è¿è¡å¤çï¼å¼å¸¸æ 就伿§è¡åºæ æä½ï¼ç´å°éå°æå¤çè¿ç§å¼å¸¸çtryè¯å¥æè
æç»å°å¼å¸¸æç»JVMã
## è¿è¡æ¶å¼å¸¸ä¸åæ£å¼å¸¸æä½å¼åï¼
å¼å¸¸è¡¨ç¤ºç¨åºè¿è¡è¿ç¨ä¸å¯è½åºç°çéæ£å¸¸ç¶æï¼è¿è¡æ¶å¼å¸¸è¡¨ç¤ºèææºçé常æä½ä¸å¯è½éå°çå¼å¸¸ï¼æ¯ä¸ç§å¸¸è§è¿è¡é误ï¼åªè¦ç¨åºè®¾è®¡å¾æ²¡æé®é¢é常就ä¸ä¼åçã忣å¼å¸¸è·ç¨åºè¿è¡çä¸ä¸æç¯å¢æå
³ï¼å³ä½¿ç¨åºè®¾è®¡æ 误ï¼ä»ç¶å¯è½å 使ç¨çé®é¢èå¼åãJavaç¼è¯å¨è¦æ±æ¹æ³å¿
须声ææåºå¯è½åçç忣å¼å¸¸ï¼ä½æ¯å¹¶ä¸è¦æ±å¿
须声ææåºæªè¢«æè·çè¿è¡æ¶å¼å¸¸ã
å¼å¸¸åç»§æ¿ä¸æ ·ï¼æ¯é¢å对象ç¨åºè®¾è®¡ä¸ç»å¸¸è¢«æ»¥ç¨çä¸è¥¿ï¼å¨Effective Javaä¸å¯¹å¼å¸¸ç使ç¨ç»åºäºä»¥ä¸æå¯¼ååï¼
- ä¸è¦å°å¼å¸¸å¤çç¨äºæ£å¸¸çæ§å¶æµï¼è®¾è®¡è¯å¥½çAPIä¸åºè¯¥å¼ºè¿«å®çè°ç¨è
ä¸ºäºæ£å¸¸çæ§å¶æµè使ç¨å¼å¸¸ï¼
- 对å¯ä»¥æ¢å¤çæ
åµä½¿ç¨åæ£å¼å¸¸ï¼å¯¹ç¼ç¨é误使ç¨è¿è¡æ¶å¼å¸¸
- é¿å
ä¸å¿
è¦ç使ç¨åæ£å¼å¸¸ï¼å¯ä»¥éè¿ä¸äºç¶ææ£æµææ®µæ¥é¿å
å¼å¸¸çåçï¼
- ä¼å
ä½¿ç¨æ åçå¼å¸¸
- æ¯ä¸ªæ¹æ³æåºçå¼å¸¸é½è¦æææ¡£
- ä¿æå¼å¸¸çååæ§
- ä¸è¦å¨catchä¸å¿½ç¥ææè·å°çå¼å¸¸
## ååºä¸äºä½ 常è§çè¿è¡æ¶å¼å¸¸ï¼
- ArithmeticExceptionï¼ç®æ¯å¼å¸¸ï¼
- ClassCastException ï¼ç±»è½¬æ¢å¼å¸¸ï¼
- IllegalArgumentException ï¼éæ³åæ°å¼å¸¸ï¼
- IndexOutOfBoundsException ï¼ä¸æ è¶çå¼å¸¸ï¼
- NullPointerException ï¼ç©ºæéå¼å¸¸ï¼
- SecurityException ï¼å®å
¨å¼å¸¸ï¼
## éè¿°finalãfinallyãfinalizeçåºå«
- finalï¼ä¿®é¥°ç¬¦ï¼å
³é®åï¼æä¸ç§ç¨æ³ï¼å¦æä¸ä¸ªç±»è¢«å£°æä¸ºfinalï¼æå³çå®ä¸è½åæ´¾çåºæ°çåç±»ï¼å³ä¸è½è¢«ç»§æ¿ï¼å æ¤å®åabstractæ¯åä¹è¯ãå°åé声æä¸ºfinalï¼å¯ä»¥ä¿è¯å®ä»¬å¨ä½¿ç¨ä¸ä¸è¢«æ¹åï¼è¢«å£°æä¸ºfinalçåéå¿
é¡»å¨å£°ææ¶ç»å®åå¼ï¼èå¨ä»¥åçå¼ç¨ä¸åªè½è¯»åä¸å¯ä¿®æ¹ã被声æä¸ºfinalçæ¹æ³ä¹åæ ·åªè½ä½¿ç¨ï¼ä¸è½å¨åç±»ä¸è¢«éåã
- finallyï¼é常æ¾å¨tryâ¦catchâ¦çåé¢æé æ»æ¯æ§è¡ä»£ç åï¼è¿å°±æå³çç¨åºæ 论æ£å¸¸æ§è¡è¿æ¯åçå¼å¸¸ï¼è¿éç代ç åªè¦JVMä¸å
³éé½è½æ§è¡ï¼å¯ä»¥å°éæ¾å¤é¨èµæºç代ç åå¨finallyåä¸ã
- finalizeï¼Objectç±»ä¸å®ä¹çæ¹æ³ï¼Javaä¸å
许使ç¨finalize()æ¹æ³å¨å徿¶éå¨å°å¯¹è±¡ä»å
å䏿¸
é¤åºå»ä¹ååå¿
è¦çæ¸
çå·¥ä½ãè¿ä¸ªæ¹æ³æ¯ç±å徿¶éå¨å¨éæ¯å¯¹è±¡æ¶è°ç¨çï¼éè¿éåfinalize()æ¹æ³å¯ä»¥æ´çç³»ç»èµæºæè
æ§è¡å
¶ä»æ¸
çå·¥ä½ã
## javaå½ä¸çåç§å¼ç¨
强å¼ç¨,软å¼ç¨,å¼±å¼ç¨,èå¼ç¨.ä¸åçå¼ç¨ç±»å主è¦ä½ç°å¨GCä¸:
强å¼ç¨ï¼å¦æä¸ä¸ªå¯¹è±¡å
·æå¼ºå¼ç¨ï¼å®å°±ä¸ä¼è¢«åå¾åæ¶å¨åæ¶ãå³ä½¿å½åå
å空é´ä¸è¶³ï¼JVMä¹ä¸ä¼åæ¶å®ï¼èæ¯æåº OutOfMemoryError é误ï¼ä½¿ç¨åºå¼å¸¸ç»æ¢ã妿æ³ä¸æå¼ºå¼ç¨åæä¸ªå¯¹è±¡ä¹é´çå
³èï¼å¯ä»¥æ¾å¼å°å°å¼ç¨èµå¼ä¸ºnullï¼è¿æ ·ä¸æ¥çè¯ï¼JVMå¨åéçæ¶é´å°±ä¼åæ¶è¯¥å¯¹è±¡
软å¼ç¨ï¼å¨ä½¿ç¨è½¯å¼ç¨æ¶ï¼å¦æå
åç空é´è¶³å¤ï¼è½¯å¼ç¨å°±è½ç»§ç»è¢«ä½¿ç¨ï¼èä¸ä¼è¢«åå¾åæ¶å¨åæ¶ï¼åªæå¨å
åä¸è¶³æ¶ï¼è½¯å¼ç¨æä¼è¢«åå¾åæ¶å¨åæ¶ã
å¼±å¼ç¨ï¼å
·æå¼±å¼ç¨çå¯¹è±¡æ¥æççå½å¨ææ´çæãå ä¸ºå½ JVM è¿è¡åå¾åæ¶ï¼ä¸æ¦åç°å¼±å¼ç¨å¯¹è±¡ï¼æ 论å½åå
åç©ºé´æ¯å¦å
è¶³ï¼é½ä¼å°å¼±å¼ç¨åæ¶ãä¸è¿ç±äºåå¾åæ¶å¨æ¯ä¸ä¸ªä¼å
级è¾ä½ç线ç¨ï¼æä»¥å¹¶ä¸ä¸å®è½è¿
éåç°å¼±å¼ç¨å¯¹è±¡
èå¼ç¨ï¼é¡¾åæä¹ï¼å°±æ¯å½¢åè设ï¼å¦æä¸ä¸ªå¯¹è±¡ä»
ææèå¼ç¨ï¼é£ä¹å®ç¸å½äºæ²¡æå¼ç¨ï¼å¨ä»»ä½æ¶åé½å¯è½è¢«åå¾åæ¶å¨åæ¶ã
æ´å¤äºè§£åè§æ·±å
¥å¯¹è±¡å¼ç¨ï¼ `http://blog.csdn.net/dd864140130/article/details/49885811`
## 为ä»ä¹è¦æä¸åçå¼ç¨ç±»å
ä¸åCè¯è¨,æä»¬å¯ä»¥æ§å¶å
åçç³è¯·åéæ¾,å¨Java䏿æ¶åæä»¬éè¦éå½çæ§å¶å¯¹è±¡è¢«åæ¶çæ¶æº,å æ¤å°±è¯çäºä¸åçå¼ç¨ç±»å,å¯ä»¥è¯´ä¸åçå¼ç¨ç±»åå®åæ¯å¯¹GCåæ¶æ¶æºä¸å¯æ§ç妥å.æä»¥ä¸å 个使ç¨åºæ¯å¯ä»¥å
åç说æ:
å©ç¨è½¯å¼ç¨åå¼±å¼ç¨è§£å³OOMé®é¢ï¼ç¨ä¸ä¸ªHashMapæ¥ä¿åå¾ççè·¯å¾åç¸åºå¾ç对象å
³èç软å¼ç¨ä¹é´çæ å°å
³ç³»ï¼å¨å
åä¸è¶³æ¶ï¼JVMä¼èªå¨åæ¶è¿äºç¼åå¾ç对象æå ç¨ç空é´ï¼ä»èææå°é¿å
äºOOMçé®é¢.
éè¿è½¯å¼ç¨å®ç°Java对象çé«éç¼å:æ¯å¦æä»¬å建äºä¸Personçç±»ï¼å¦ææ¯æ¬¡éè¦æ¥è¯¢ä¸ä¸ªäººçä¿¡æ¯,åªææ¯å ç§ä¸ä¹åååæ¥è¯¢è¿çï¼é½è¦éæ°æå»ºä¸ä¸ªå®ä¾ï¼è¿å°å¼èµ·å¤§éPersonå¯¹è±¡çæ¶è,å¹¶ä¸ç±äºè¿äºå¯¹è±¡ççå½å¨æç¸å¯¹è¾ç,ä¼å¼èµ·å¤æ¬¡GC影忧è½ãæ¤æ¶,éè¿è½¯å¼ç¨å HashMap çç»åå¯ä»¥æå»ºé«éç¼å,æä¾æ§è½.
## å
é¨ç±»çä½ç¨
å
é¨ç±»å¯ä»¥æå¤ä¸ªå®ä¾,æ¯ä¸ªå®ä¾é½æèªå·±çç¶æä¿¡æ¯,å¹¶ä¸ä¸å
¶ä»å¤å´å¯¹è±¡çä¿¡æ¯ç¸äºç¬ç«.å¨å个å¤å´ç±»å½ä¸,å¯ä»¥è®©å¤ä¸ªå
é¨ç±»ä»¥ä¸åçæ¹å¼å®ç°å䏿¥å£,æè
ç»§æ¿åä¸ä¸ªç±».å建å
é¨ç±»å¯¹è±¡çæ¶å»ä¸ä¾èµäºå¤é¨ç±»å¯¹è±¡çå建.å
é¨ç±»å¹¶æ²¡æä»¤äººçæçâis-aâå
³ç³»,å®å°±åæ¯ä¸ä¸ªç¬ç«çå®ä½.
å
é¨ç±»æä¾äºæ´å¥½çå°è£
,é¤äºè¯¥å¤å´ç±»,å
¶ä»ç±»é½ä¸è½è®¿é®
## SimpleDateFormatæ¯çº¿ç¨å®å
¨çåï¼
é常ä¸å¹¸ï¼DateFormat çææå®ç°ï¼å
æ¬ SimpleDateFormat é½ä¸æ¯çº¿ç¨å®å
¨çï¼å æ¤ä½ ä¸åºè¯¥å¨å¤çº¿ç¨åºä¸ä½¿ç¨ï¼é¤éæ¯å¨å¯¹å¤çº¿ç¨å®å
¨çç¯å¢ä¸ä½¿ç¨ï¼å¦ å° SimpleDateFormat éå¶å¨ ThreadLocal ä¸ãå¦æä½ ä¸è¿ä¹åï¼å¨è§£ææè
æ ¼å¼åæ¥æçæ¶åï¼å¯è½ä¼è·åå°ä¸ä¸ªä¸æ£ç¡®çç»æãå æ¤ï¼ä»æ¥æãæ¶é´å¤ççææå®è·µæ¥è¯´ï¼æå¼ºåæ¨è joda-time åºã
## å¦ä½æ ¼å¼åæ¥æï¼
Java ä¸ï¼å¯ä»¥ä½¿ç¨ SimpleDateFormat ç±»æè
joda-time åºæ¥æ ¼å¼æ¥æãDateFormat ç±»å
è®¸ä½ ä½¿ç¨å¤ç§æµè¡çæ ¼å¼æ¥æ ¼å¼åæ¥æãåè§çæ¡ä¸ç示ä¾ä»£ç ï¼ä»£ç 䏿¼ç¤ºäºå°æ¥ææ ¼å¼åæä¸åçæ ¼å¼ï¼å¦ dd-MM-yyyy æ ddMMyyyyã
## 说åºå æ¡ Java 䏿¹æ³éè½½çæä½³å®è·µï¼
ä¸é¢æå æ¡å¯ä»¥éµå¾ªçæ¹æ³éè½½çæä½³å®è·µæ¥é¿å
é æèªå¨è£
ç®±çæ··ä¹±ã
- ä¸è¦éè½½è¿æ ·çæ¹æ³ï¼ä¸ä¸ªæ¹æ³æ¥æ¶ int åæ°ï¼èå¦ä¸ªæ¹æ³æ¥æ¶ Integer åæ°ã
- ä¸è¦éè½½åæ°æ°éä¸è´ï¼èåªæ¯åæ°é¡ºåºä¸åçæ¹æ³ã
- 妿éè½½çæ¹æ³åæ°ä¸ªæ°å¤äº 5 个ï¼éç¨å¯ååæ°ã
## 说说åå°çç¨éåå®ç°
åå°æºå¶æ¯Javaè¯è¨ä¸ä¸ä¸ªé常éè¦çç¹æ§ï¼å®å
许ç¨åºå¨è¿è¡æ¶è¿è¡èªææ£æ¥ï¼åæ¶ä¹å
许对å
¶å
鍿åè¿è¡æä½ã
åå°æºå¶æä¾çåè½ä¸»è¦æï¼å¾å°ä¸ä¸ªå¯¹è±¡æå±çç±»ï¼è·åä¸ä¸ªç±»çæææååéåæ¹æ³ï¼å¨è¿è¡æ¶å建对象ï¼å¨è¿è¡æ¶è°ç¨å¯¹è±¡çæ¹æ³ï¼
## 说说èªå®ä¹æ³¨è§£çåºæ¯åå®ç°
ç»éãæéæ¦æªãæ¥å¿å¤çï¼ä»¥ååç§ Java æ¡æ¶ï¼å¦ Springï¼Hibernateï¼JUnit æå°æ³¨è§£å°±ä¸è½ä¸è¯´åå°ï¼Java èªå®ä¹æ³¨è§£æ¯éè¿è¿è¡æ¶é åå°è·å注解ã
å®é
å¼åä¸ï¼ä¾å¦æä»¬è¦è·åæä¸ªæ¹æ³çè°ç¨æ¥å¿ï¼å¯ä»¥éè¿ AOPï¼å¨æä»£çæºå¶ï¼ç»æ¹æ³æ·»å åé¢ï¼éè¿åå°æ¥è·åæ¹æ³å
å«ç注解ï¼å¦æå
嫿¥å¿æ³¨è§£ï¼å°±è¿è¡æ¥å¿è®°å½ã
åå°çå®ç°å¨ Java åºç¨å±é¢ä¸è®²ï¼æ¯éè¿å¯¹ Class 对象çæä½å®ç°çï¼Class 对象为æä»¬æä¾äºä¸ç³»åæ¹æ³å¯¹ç±»è¿è¡æä½ãå¨ JVM è¿ä¸ªè§åº¦æ¥è¯´ï¼Class æä»¶æ¯ä¸ç»ä»¥ 8 ä½åè为åºç¡åä½çäºè¿å¶æµï¼åä¸ªæ°æ®é¡¹ç®æä¸¥æ ¼ç顺åºç´§åçæåå¨ Class æä»¶ä¸ï¼éé¢å
å«äºç±»ãæ¹æ³ãåæ®µççç¸å
³æ°æ®ã
éè¿å¯¹ Class æ°æ®æµçå¤çæä»¬å³å¯å¾å°åæ®µãæ¹æ³çæ°æ®ã
## ä»ä¹è¦éåhashcode()åequals()以åä»ä»¬ä¹é´çåºå«ä¸å
³ç³»ï¼
å¯ä»¥åèï¼
- [为ä»ä¹è¦éåhashCode()æ¹æ³åequals()æ¹æ³ä»¥åå¦ä½è¿è¡éå](https://blog.csdn.net/xlgen157387/article/details/63683882)
- [Java hashCode() å equals()çè¥å¹²é®é¢è§£ç](https://www.cnblogs.com/skywang12345/p/3324958.html)
- [Javaä¸equals()ä¸hashCode()æ¹æ³è¯¦è§£](http://bijian1013.iteye.com/blog/1972404)