1ã å°½éæå®ç±»çfinal修饰符 带æfinal修饰符çç±»æ¯ä¸å¯æ´¾ççã
å¨Javaæ ¸å¿APIä¸ï¼æ许å¤åºç¨finalçä¾åï¼ä¾å¦java.lang.Stringã为Stringç±»æå®finalé²æ¢äºäººä»¬è¦çlength()æ¹æ³ãå¦å¤ï¼å¦ææå®ä¸ä¸ªç±»ä¸ºfinalï¼å该类ææçæ¹æ³é½æ¯finalãJavaç¼è¯å¨ä¼å¯»æ¾æºä¼å
èï¼inlineï¼ææçfinalæ¹æ³ï¼è¿åå
·ä½çç¼è¯å¨å®ç°æå
³ï¼ãæ¤ä¸¾è½å¤ä½¿æ§è½å¹³åæé«50% ã
2ã å°½ééç¨å¯¹è±¡ã
ç¹å«æ¯String 对象ç使ç¨ä¸ï¼åºç°å符串è¿æ¥æ
åµæ¶åºç¨StringBuffer 代æ¿ãç±äºç³»ç»ä¸ä»
è¦è±æ¶é´çæ对象ï¼ä»¥åå¯è½è¿éè±æ¶é´å¯¹è¿äºå¯¹è±¡è¿è¡åå¾åæ¶åå¤çãå æ¤ï¼çæè¿å¤ç对象å°ä¼ç»ç¨åºçæ§è½å¸¦æ¥å¾å¤§çå½±åã
3ã å°½é使ç¨å±é¨åéï¼è°ç¨æ¹æ³æ¶ä¼ éçåæ°ä»¥åå¨è°ç¨ä¸å建ç临æ¶åéé½ä¿åå¨æ ï¼Stackï¼ä¸ï¼é度è¾å¿«ã
å
¶ä»åéï¼å¦éæåéãå®ä¾åéçï¼é½å¨å ï¼Heapï¼ä¸å建ï¼é度è¾æ
¢ãå¦å¤ï¼ä¾èµäºå
·ä½çç¼è¯å¨/JVMï¼å±é¨åéè¿å¯è½å¾å°è¿ä¸æ¥ä¼åã请åè§ãå°½å¯è½ä½¿ç¨å æ åéãã
4ã ä¸è¦éå¤åå§ååé
é»è®¤æ
åµä¸ï¼è°ç¨ç±»çæé å½æ°æ¶ï¼ Javaä¼æåéåå§åæç¡®å®çå¼ï¼ææç对象被设置ænullï¼æ´æ°åéï¼byteãshortãintãlongï¼è®¾ç½®æ0ï¼floatådoubleåé设置æ0.0ï¼é»è¾å¼è®¾ç½®æfalseãå½ä¸ä¸ªç±»ä»å¦ä¸ä¸ªç±»æ´¾çæ¶ï¼è¿ä¸ç¹å°¤å
¶åºè¯¥æ³¨æï¼å 为ç¨newå
³é®è¯å建ä¸ä¸ªå¯¹è±¡æ¶ï¼æé å½æ°é¾ä¸çæææé å½æ°é½ä¼è¢«èªå¨è°ç¨ã
5ã å¨JAVA + ORACLE çåºç¨ç³»ç»å¼åä¸ï¼javaä¸å
åµçSQLè¯å¥å°½é使ç¨å¤§åçå½¢å¼ï¼ä»¥åè½»ORACLE解æå¨ç解æè´æ
ã
6ã Java ç¼ç¨è¿ç¨ä¸ï¼è¿è¡æ°æ®åºè¿æ¥ãI/Oæµæä½æ¶å¡å¿
å°å¿ï¼å¨ä½¿ç¨å®æ¯åï¼å³ä½¿å
³é以éæ¾èµæºã
å 为对è¿äºå¤§å¯¹è±¡çæä½ä¼é æç³»ç»å¤§çå¼éï¼ç¨æä¸æ
ï¼ä¼å¯¼è´ä¸¥éçåæã
7ã ç±äºJVMçæå
¶èªèº«çGCæºå¶ï¼ä¸éè¦ç¨åºå¼åè
çè¿å¤èèï¼ä»ä¸å®ç¨åº¦ä¸åè½»äºå¼åè
è´æ
ï¼ä½åæ¶ä¹éæ¼äºéæ£ï¼è¿åçå建对象ä¼æ¶èç³»ç»ç大éå
åï¼ä¸¥éæ¶ä¼å¯¼è´å
åæ³é²ï¼å æ¤ï¼ä¿è¯è¿æ对象çåæ¶åæ¶å
·æéè¦æä¹ã
JVMåæ¶åå¾çæ¡ä»¶æ¯ï¼å¯¹è±¡ä¸å¨è¢«å¼ç¨ï¼ç¶èï¼JVMçGC并éååçæºæºï¼å³ä½¿å¯¹è±¡æ»¡è¶³äºåå¾åæ¶çæ¡ä»¶ä¹ä¸ä¸å®ä¼è¢«ç«å³åæ¶ãæ以ï¼å»ºè®®æ们å¨å¯¹è±¡ä½¿ç¨å®æ¯ï¼åºæå¨ç½®ænullã
8ã å¨ä½¿ç¨åæ¥æºå¶æ¶ï¼åºå°½é使ç¨æ¹æ³åæ¥ä»£æ¿ä»£ç ååæ¥ã
9ã å°½éåå°å¯¹åéçéå¤è®¡ç®
ä¾å¦ï¼for(int i = 0;i < list.size; i ++) {
â¦
}
åºæ¿æ¢ä¸ºï¼
for(int i = 0,int len = list.size();i < len; i ++){
â¦
}
10ãå°½ééç¨lazy loading ççç¥ï¼å³å¨éè¦çæ¶åæå¼å§å建ã
ä¾å¦ï¼ String str = âaaaâ;
if(i == 1) {
list.add(str);
}
åºæ¿æ¢ä¸ºï¼
if(i == 1) {
String str = âaaaâ;
list.add(str);
}
11ãæ
ç¨å¼å¸¸
å¼å¸¸å¯¹æ§è½ä¸å©ãæåºå¼å¸¸é¦å
è¦å建ä¸ä¸ªæ°ç对象ãThrowableæ¥å£çæé å½æ°è°ç¨å为fillInStackTrace()çæ¬å°ï¼Nativeï¼æ¹æ³ï¼fillInStackTrace()æ¹æ³æ£æ¥å æ ï¼æ¶éè°ç¨è·è¸ªä¿¡æ¯ãåªè¦æå¼å¸¸è¢«æåºï¼VMå°±å¿
é¡»è°æ´è°ç¨å æ ï¼å 为å¨å¤çè¿ç¨ä¸å建äºä¸ä¸ªæ°ç对象ã å¼å¸¸åªè½ç¨äºé误å¤çï¼ä¸åºè¯¥ç¨æ¥æ§å¶ç¨åºæµç¨ã
12ãä¸è¦å¨å¾ªç¯ä¸ä½¿ç¨ï¼
Try {
} catch() {
}
åºæå
¶æ¾ç½®å¨æå¤å±ã
13ãStringBuffer ç使ç¨ï¼
StringBuffer表示äºå¯åçãå¯åçå符串ã
æä¸ä¸ªæé æ¹æ³ :
StringBuffer (); //é»è®¤åé
16个å符ç空é´
StringBuffer (int size); //åé
size个å符ç空é´
StringBuffer (String str); //åé
16个å符+str.length()个å符空é´
ä½ å¯ä»¥éè¿StringBufferçæé å½æ°æ¥è®¾å®å®çåå§å容éï¼è¿æ ·å¯ä»¥ææ¾å°æåæ§è½ã
è¿éæå°çæé å½æ°æ¯StringBuffer(int length)ï¼lengthåæ°è¡¨ç¤ºå½åçStringBufferè½ä¿æçå符æ°éãä½ ä¹å¯ä»¥ä½¿ç¨ensureCapacity(int minimumcapacity)æ¹æ³å¨StringBuffer对象å建ä¹å设置å®ç容éãé¦å
æ们ççStringBufferç缺çè¡ä¸ºï¼ç¶ååæ¾åºä¸æ¡æ´å¥½çæåæ§è½çéå¾ã
StringBufferå¨å
é¨ç»´æ¤ä¸ä¸ªå符æ°ç»ï¼å½ä½ 使ç¨ç¼ºççæé å½æ°æ¥å建StringBuffer对象çæ¶åï¼å 为没æ设置åå§åå符é¿åº¦ï¼StringBufferç容é被åå§å为16个å符ï¼ä¹å°±æ¯è¯´ç¼ºç容éå°±æ¯16个å符ãå½StringBufferè¾¾å°æ大容éçæ¶åï¼å®ä¼å°èªèº«å®¹éå¢å å°å½åç2ååå 2ï¼ä¹å°±æ¯ï¼2*æ§å¼+2ï¼ãå¦æä½ ä½¿ç¨ç¼ºçå¼ï¼åå§åä¹åæ¥çå¾éé¢è¿½å å符ï¼å¨ä½ 追å å°ç¬¬16个å符çæ¶åå®ä¼å°å®¹éå¢å å°34ï¼2*16+2ï¼ï¼å½è¿½å å°34个å符çæ¶åå°±ä¼å°å®¹éå¢å å°70ï¼2*34+2ï¼ãæ 论ä½äºåªè¦StringBufferå°è¾¾å®çæ大容éå®å°±ä¸å¾ä¸å建ä¸ä¸ªæ°çå符æ°ç»ç¶åéæ°å°æ§å符åæ°å符é½æ·è´ä¸éââè¿ä¹å¤ªæè´µäºç¹ãæ以æ»æ¯ç»StringBuffer设置ä¸ä¸ªåççåå§å容éå¼æ¯éä¸äºçï¼è¿æ ·ä¼å¸¦æ¥ç«ç«¿è§å½±çæ§è½å¢çãStringBufferåå§åè¿ç¨çè°æ´çä½ç¨ç±æ¤å¯è§ä¸æãæ以ï¼ä½¿ç¨ä¸ä¸ªåéç容éå¼æ¥åå§åStringBufferæ°¸è¿é½æ¯ä¸ä¸ªæä½³ç建议ã
14ãåçç使ç¨Javaç±» java.util.Vectorã
ç®åå°è¯´ï¼ä¸ä¸ªVectorå°±æ¯ä¸ä¸ªjava.lang.Objectå®ä¾çæ°ç»ãVectorä¸æ°ç»ç¸ä¼¼ï¼å®çå
ç´ å¯ä»¥éè¿æ´æ°å½¢å¼çç´¢å¼è®¿é®ãä½æ¯ï¼Vectorç±»åç对象å¨å建ä¹åï¼å¯¹è±¡ç大å°è½å¤æ ¹æ®å
ç´ çå¢å æè
å é¤èæ©å±ã缩å°ã请èèä¸é¢è¿ä¸ªåVectorå å
¥å
ç´ çä¾åï¼
Object bj = new Object();
Vector v = new Vector(100000);
for(int I=0;
I<100000; I++) { v.add(0,obj); }
é¤éæç»å¯¹å
足ççç±è¦æ±æ¯æ¬¡é½ææ°å
ç´ æå
¥å°Vectorçåé¢ï¼å¦åä¸é¢ç代ç 对æ§è½ä¸å©ãå¨é»è®¤æé å½æ°ä¸ï¼Vectorçåå§åå¨è½åæ¯10个å
ç´ ï¼å¦ææ°å
ç´ å å
¥æ¶åå¨è½åä¸è¶³ï¼å以ååå¨è½åæ¯æ¬¡å åãVector类就对象StringBufferç±»ä¸æ ·ï¼æ¯æ¬¡æ©å±åå¨è½åæ¶ï¼ææç°æçå
ç´ é½è¦å¤å¶å°æ°çåå¨ç©ºé´ä¹ä¸ãä¸é¢ç代ç ç段è¦æ¯åé¢çä¾åå¿«å 个æ°é级ï¼
Object bj = new Object();
Vector v = new Vector(100000);
for(int I=0; I<100000; I++) { v.add(obj); }
åæ ·çè§åä¹éç¨äºVectorç±»çremove()æ¹æ³ãç±äºVectorä¸å个å
ç´ ä¹é´ä¸è½å«æâ空éâï¼å é¤é¤æåä¸ä¸ªå
ç´ ä¹å¤çä»»æå
¶ä»å
ç´ é½å¯¼è´è¢«å é¤å
ç´ ä¹åçå
ç´ åå移å¨ãä¹å°±æ¯è¯´ï¼ä»Vectorå é¤æåä¸ä¸ªå
ç´ è¦æ¯å é¤ç¬¬ä¸ä¸ªå
ç´ âå¼éâä½å¥½å åã
å设è¦ä»åé¢çVectorå é¤ææå
ç´ ï¼æ们å¯ä»¥ä½¿ç¨è¿ç§ä»£ç ï¼
for(int I=0; I<100000; I++)
{
v.remove(0);
}
ä½æ¯ï¼ä¸ä¸é¢ç代ç ç¸æ¯ï¼åé¢ç代ç è¦æ
¢å 个æ°é级ï¼
for(int I=0; I<100000; I++)
{
v.remove(v.size()-1);
}
ä»Vectorç±»åç对象vå é¤ææå
ç´ çæ好æ¹æ³æ¯ï¼
v.removeAllElements();
å设Vectorç±»åç对象vå
å«å符串âHelloâãèèä¸é¢ç代ç ï¼å®è¦ä»è¿ä¸ªVectorä¸å é¤âHelloâå符串ï¼
String s = "Hello";
int i = v.indexOf(s);
if(I != -1) v.remove(s);
è¿äºä»£ç çèµ·æ¥æ²¡ä»ä¹é误ï¼ä½å®åæ ·å¯¹æ§è½ä¸å©ãå¨è¿æ®µä»£ç ä¸ï¼indexOf()æ¹æ³å¯¹vè¿è¡é¡ºåºæ索寻æ¾å符串âHelloâï¼remove(s)æ¹æ³ä¹è¦è¿è¡åæ ·ç顺åºæç´¢ãæ¹è¿ä¹åççæ¬æ¯ï¼
String s = "Hello";
int i = v.indexOf(s);
if(I != -1) v.remove(i);
è¿ä¸ªçæ¬ä¸æ们ç´æ¥å¨remove()æ¹æ³ä¸ç»åºå¾
å é¤å
ç´ ç精确索å¼ä½ç½®ï¼ä»èé¿å
äºç¬¬äºæ¬¡æç´¢ãä¸ä¸ªæ´å¥½ççæ¬æ¯ï¼
String s = "Hello"; v.remove(s);
æåï¼æ们åæ¥çä¸ä¸ªæå
³Vectorç±»ç代ç ç段ï¼
for(int I=0; I++;I < v.length)
å¦ævå
å«100,000个å
ç´ ï¼è¿ä¸ªä»£ç ç段å°è°ç¨v.size()æ¹æ³100,000次ãè½ç¶sizeæ¹æ³æ¯ä¸ä¸ªç®åçæ¹æ³ï¼ä½å®ä»æ§éè¦ä¸æ¬¡æ¹æ³è°ç¨çå¼éï¼è³å°JVMéè¦ä¸ºå®é
置以åæ¸
é¤å æ ç¯å¢ãå¨è¿éï¼for循ç¯å
é¨ç代ç ä¸ä¼ä»¥ä»»ä½æ¹å¼ä¿®æ¹Vectorç±»å对象vç大å°ï¼å æ¤ä¸é¢ç代ç æ好æ¹åæä¸é¢è¿ç§å½¢å¼ï¼
int size = v.size(); for(int I=0; I++;I<size)
è½ç¶è¿æ¯ä¸ä¸ªç®åçæ¹å¨ï¼ä½å®ä»æ§èµ¢å¾äºæ§è½ãæ¯ç«ï¼æ¯ä¸ä¸ªCPUå¨æé½æ¯å®è´µçã
15ãå½å¤å¶å¤§éæ°æ®æ¶ï¼ä½¿ç¨System.arraycopy()å½ä»¤ã
int[] src={1,3,5,6,7,8};
int[] dest = new int[6];
System.arraycopy(src, 0, dest, 0, 6);
src:æºæ°ç»; srcPos:æºæ°ç»è¦å¤å¶çèµ·å§ä½ç½®;
dest:ç®çæ°ç»; destPos:ç®çæ°ç»æ¾ç½®çèµ·å§ä½ç½®;
length:å¤å¶çé¿åº¦.
注æï¼src and desté½å¿
é¡»æ¯åç±»åæè
å¯ä»¥è¿è¡è½¬æ¢ç±»åçæ°ç»ï¼
16ã代ç éæï¼å¢å¼ºä»£ç çå¯è¯»æ§ã
public class ShopCart {
private List carts ;
â¦
public void add (Object item) {
if(carts == null) {
carts = new ArrayList();
}
crts.add(item);
}
public void remove(Object item) {
if(carts. contains(item)) {
carts.remove(item);
}
}
public List getCarts() {
//è¿ååªè¯»å表
return Collections.unmodifiableList(carts);
}
//ä¸æ¨èè¿ç§æ¹å¼
//this.getCarts().add(item);
}
17ãä¸ç¨newå
³é®è¯å建类çå®ä¾
ç¨newå
³é®è¯å建类çå®ä¾æ¶ï¼æé å½æ°é¾ä¸çæææé å½æ°é½ä¼è¢«èªå¨è°ç¨ãä½å¦æä¸ä¸ªå¯¹è±¡å®ç°äºCloneableæ¥å£ï¼æ们å¯ä»¥è°ç¨å®çclone()æ¹æ³ãclone()æ¹æ³ä¸ä¼è°ç¨ä»»ä½ç±»æé å½æ°ã
å¨ä½¿ç¨è®¾è®¡æ¨¡å¼ï¼Design Patternï¼çåºåï¼å¦æç¨Factory模å¼å建对象ï¼åæ¹ç¨clone()æ¹æ³å建æ°ç对象å®ä¾é常ç®åãä¾å¦ï¼ä¸é¢æ¯Factory模å¼çä¸ä¸ªå
¸åå®ç°ï¼
public static Credit getNewCredit() {
return new Credit();
}
æ¹è¿åç代ç 使ç¨clone()æ¹æ³ï¼å¦ä¸æ示ï¼
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
ä¸é¢çæ路对äºæ°ç»å¤çåæ ·å¾æç¨ã
18ãä¹æ³åé¤æ³
èèä¸é¢ç代ç ï¼
for (val = 0; val < 100000; val +=5) {
alterX = val * 8; myResult = val * 2;
}
ç¨ç§»ä½æä½æ¿ä»£ä¹æ³æä½å¯ä»¥æ大å°æé«æ§è½ãä¸é¢æ¯ä¿®æ¹åç代ç ï¼
for (val = 0; val < 100000; val += 5) {
alterX = val << 3; myResult = val << 1;
}
ä¿®æ¹åç代ç ä¸ååä¹ä»¥8çæä½ï¼èæ¯æ¹ç¨çä»·ç左移3ä½æä½ï¼æ¯å·¦ç§»1ä½ç¸å½äºä¹ä»¥2ãç¸åºå°ï¼å³ç§»1ä½æä½ç¸å½äºé¤ä»¥2ãå¼å¾ä¸æçæ¯ï¼è½ç¶ç§»ä½æä½é度快ï¼ä½å¯è½ä½¿ä»£ç æ¯è¾é¾äºç解ï¼æ以æ好å ä¸ä¸äºæ³¨éã
19ãå¨JSP页é¢ä¸å
³éæ ç¨çä¼è¯ã
ä¸ä¸ªå¸¸è§ç误解æ¯ä»¥ä¸ºsessionå¨æ客æ·ç«¯è®¿é®æ¶å°±è¢«å建ï¼ç¶èäºå®æ¯ç´å°æserver端ç¨åºè°ç¨HttpServletRequest.getSession(true)è¿æ ·çè¯å¥æ¶æ被å建ï¼æ³¨æå¦æJSP没ææ¾ç¤ºçä½¿ç¨ <> å
³ésessionï¼åJSPæ件å¨ç¼è¯æServletæ¶å°ä¼èªå¨å ä¸è¿æ ·ä¸æ¡è¯å¥HttpSession session = HttpServletRequest.getSession(true);è¿ä¹æ¯JSPä¸éå«çsession对象çæ¥åãç±äºsessionä¼æ¶èå
åèµæºï¼å æ¤ï¼å¦æä¸æç®ä½¿ç¨sessionï¼åºè¯¥å¨ææçJSPä¸å
³éå®ã
对äºé£äºæ éè·è¸ªä¼è¯ç¶æç页é¢ï¼å
³éèªå¨å建çä¼è¯å¯ä»¥èçä¸äºèµæºã使ç¨å¦ä¸pageæ令ï¼<%@ page session="false"%>
20ãJDBCä¸I/O
å¦æåºç¨ç¨åºéè¦è®¿é®ä¸ä¸ªè§æ¨¡å¾å¤§çæ°æ®éï¼ååºå½èè使ç¨åæåæ¹å¼ãé»è®¤æ
åµä¸ï¼JDBCæ¯æ¬¡æå32è¡æ°æ®ã举ä¾æ¥è¯´ï¼å设æ们è¦éåä¸ä¸ª5000è¡çè®°å½éï¼JDBCå¿
é¡»è°ç¨æ°æ®åº157次æè½æåå°å
¨é¨æ°æ®ãå¦ææå大å°æ¹æ512ï¼åè°ç¨æ°æ®åºç次æ°å°åå°å°10次ã
21ãServletä¸å
å使ç¨
许å¤å¼åè
éæå°æ大éä¿¡æ¯ä¿åå°ç¨æ·ä¼è¯ä¹ä¸ãä¸äºæ¶åï¼ä¿åå¨ä¼è¯ä¸ç对象没æåæ¶å°è¢«åå¾åæ¶æºå¶åæ¶ãä»æ§è½ä¸çï¼å
¸åççç¶æ¯ç¨æ·æå°ç³»ç»å¨ææ§å°åæ
¢ï¼å´åä¸è½æåå å½äºä»»ä½ä¸ä¸ªå
·ä½çç»ä»¶ãå¦æçè§JVMçå 空é´ï¼å®ç表ç°æ¯å
åå ç¨ä¸æ£å¸¸å°å¤§èµ·å¤§è½ã
解å³è¿ç±»å
åé®é¢ä¸»è¦æäºç§åæ³ã第ä¸ç§åæ³æ¯ï¼å¨ææä½ç¨èå´ä¸ºä¼è¯çBeanä¸å®ç°HttpSessionBindingListeneræ¥å£ãè¿æ ·ï¼åªè¦å®ç°valueUnbound()æ¹æ³ï¼å°±å¯ä»¥æ¾å¼å°éæ¾Bean使ç¨çèµæºã
å¦å¤ä¸ç§åæ³å°±æ¯å°½å¿«å°æä¼è¯ä½åºã大å¤æ°åºç¨æå¡å¨é½æ设置ä¼è¯ä½åºé´éæ¶é´çé项ãå¦å¤ï¼ä¹å¯ä»¥ç¨ç¼ç¨çæ¹å¼è°ç¨ä¼è¯çsetMaxInactiveInterval()æ¹æ³ï¼è¯¥æ¹æ³ç¨æ¥è®¾å®å¨ä½åºä¼è¯ä¹åï¼Servlet容å¨å
许ç客æ·è¯·æ±çæ大é´éæ¶é´ï¼ä»¥ç§è®¡ã
22ã使ç¨ç¼å²æ è®°
ä¸äºåºç¨æå¡å¨å å
¥äºé¢åJSPçç¼å²æ è®°åè½ãä¾å¦ï¼BEAçWebLogic Serverä»6.0çæ¬å¼å§æ¯æè¿ä¸ªåè½ï¼Open Symphonyå·¥ç¨ä¹åæ ·æ¯æè¿ä¸ªåè½ãJSPç¼å²æ è®°æ¢è½å¤ç¼å²é¡µé¢çæï¼ä¹è½å¤ç¼å²æ´ä¸ªé¡µé¢ãå½JSP页é¢æ§è¡æ¶ï¼å¦æç®æ çæå·²ç»å¨ç¼å²ä¹ä¸ï¼åçæ该çæç代ç å°±ä¸ç¨åæ§è¡ã页é¢çº§ç¼å²æè·å¯¹æå®URLç请æ±ï¼å¹¶ç¼å²æ´ä¸ªç»æ页é¢ã对äºè´ç©ç¯®ãç®å½ä»¥åé¨æ·ç½ç«ç主页æ¥è¯´ï¼è¿ä¸ªåè½æå
¶æç¨ã对äºè¿ç±»åºç¨ï¼é¡µé¢çº§ç¼å²è½å¤ä¿å页é¢æ§è¡çç»æï¼ä¾å继请æ±ä½¿ç¨ã
23ãéæ©åéçå¼ç¨æºå¶
å¨å
¸åçJSPåºç¨ç³»ç»ä¸ï¼é¡µå¤´ã页èé¨åå¾å¾è¢«æ½ååºæ¥ï¼ç¶åæ ¹æ®éè¦å¼å
¥é¡µå¤´ã页èãå½åï¼å¨JSP页é¢ä¸å¼å
¥å¤é¨èµæºçæ¹æ³ä¸»è¦æ两ç§ï¼includeæ令ï¼ä»¥åincludeå¨ä½ã
includeæ令ï¼ä¾å¦<%@ include file="copyright.html" %>ã该æ令å¨ç¼è¯æ¶å¼å
¥æå®çèµæºãå¨ç¼è¯ä¹åï¼å¸¦æincludeæ令ç页é¢åæå®çèµæºè¢«å并æä¸ä¸ªæ件ã被å¼ç¨çå¤é¨èµæºå¨ç¼è¯æ¶å°±ç¡®å®ï¼æ¯è¿è¡æ¶æç¡®å®èµæºæ´é«æã
includeå¨ä½ï¼ä¾å¦<jsp:include page="copyright.jsp" />ã该å¨ä½å¼å
¥æå®é¡µé¢æ§è¡åçæçç»æãç±äºå®å¨è¿è¡æ¶å®æï¼å æ¤å¯¹è¾åºç»æçæ§å¶æ´å çµæ´»ãä½æ¶ï¼åªæå½è¢«å¼ç¨çå
容é¢ç¹å°æ¹åæ¶ï¼æè
å¨å¯¹ä¸»é¡µé¢ç请æ±æ²¡æåºç°ä¹åï¼è¢«å¼ç¨ç页é¢æ æ³ç¡®å®æ¶ï¼ä½¿ç¨includeå¨ä½æåç®ã
24ãåæ¶æ¸
é¤ä¸åéè¦çä¼è¯
为äºæ¸
é¤ä¸åæ´»å¨çä¼è¯ï¼è®¸å¤åºç¨æå¡å¨é½æé»è®¤çä¼è¯è¶
æ¶æ¶é´ï¼ä¸è¬ä¸º30åéãå½åºç¨æå¡å¨éè¦ä¿åæ´å¤ä¼è¯æ¶ï¼å¦æå
å容éä¸è¶³ï¼æä½ç³»ç»ä¼æé¨åå
åæ°æ®è½¬ç§»å°ç£çï¼åºç¨æå¡å¨ä¹å¯è½æ ¹æ®âæè¿æé¢ç¹ä½¿ç¨âï¼Most Recently Usedï¼ç®æ³æé¨åä¸æ´»è·çä¼è¯è½¬å¨å°ç£çï¼çè³å¯è½æåºâå
åä¸è¶³âå¼å¸¸ãå¨å¤§è§æ¨¡ç³»ç»ä¸ï¼ä¸²è¡åä¼è¯ç代价æ¯å¾æè´µçãå½ä¼è¯ä¸åéè¦æ¶ï¼åºå½åæ¶è°ç¨HttpSession.invalidate()æ¹æ³æ¸
é¤ä¼è¯ãHttpSession.invalidate()æ¹æ³é常å¯ä»¥å¨åºç¨çéåºé¡µé¢è°ç¨ã
25ãä¸è¦å°æ°ç»å£°æ为ï¼public static final ã
26ãHashMapçéåæç讨论
ç»å¸¸éå°å¯¹HashMapä¸çkeyåvalueå¼å¯¹çéåæä½ï¼æå¦ä¸ä¸¤ç§æ¹æ³ï¼
Map<String, String[]> paraMap = new HashMap<String, String[]>();
//第ä¸ä¸ªå¾ªç¯
Set<String> appFieldDefIds = paraMap.keySet();
for (String appFieldDefId : appFieldDefIds) {
String[] values = paraMap.get(appFieldDefId);
......
}
//第äºä¸ªå¾ªç¯
for(Entry<String, String[]> entry : paraMap.entrySet()){
String appFieldDefId = entry.getKey();
String[] values = entry.getValue();
.......
}
第ä¸ç§å®ç°ææ¾çæçä¸å¦ç¬¬äºç§å®ç°ã
åæå¦ä¸ Set<String> appFieldDefIds = paraMap.keySet(); æ¯å
ä»HashMapä¸åå¾keySet
代ç å¦ä¸ï¼
public Set<K> keySet() {
Set<K> ks = keySet;
return (ks != null ? ks : (keySet = new KeySet()));
}
private class KeySet extends AbstractSet<K> {
public Iterator<K> iterator() {
return newKeyIterator();
}
public int size() {
return size;
}
public boolean contains(Object o) {
return containsKey(o);
}
public boolean remove(Object o) {
return HashMap.this.removeEntryForKey(o) != null;
}
public void clear() {
HashMap.this.clear();
}
}
å
¶å®å°±æ¯è¿åä¸ä¸ªç§æç±»KeySet, å®æ¯ä»AbstractSet继æ¿èæ¥ï¼å®ç°äºSetæ¥å£ã
åæ¥ççfor/in循ç¯çè¯æ³
for(declaration : expression)
statement
å¨æ§è¡é¶æ®µè¢«ç¿»è¯æå¦ä¸åå¼
for(Iterator<E> #i = (expression).iterator(); #i.hashNext();){
declaration = #i.next();
statement
}
å æ¤å¨ç¬¬ä¸ä¸ªforè¯å¥for (String appFieldDefId : appFieldDefIds) ä¸è°ç¨äºHashMap.keySet().iterator()
èè¿ä¸ªæ¹æ³è°ç¨äºnewKeyIterator()
Iterator<K> newKeyIterator() {
return new KeyIterator();
}
private class KeyIterator extends HashIterator<K> {
public K next() {
return nextEntry().getKey();
}
}
æ以å¨forä¸è¿æ¯è°ç¨äº
å¨ç¬¬äºä¸ªå¾ªç¯for(Entry<String, String[]> entry : paraMap.entrySet())ä¸ä½¿ç¨çIteratoræ¯å¦ä¸çä¸ä¸ªå
é¨
ç±»
private class EntryIterator extends HashIterator<Map.Entry<K,V>> {
public Map.Entry<K,V> next() {
return nextEntry();
}
}
æ¤æ¶ç¬¬ä¸ä¸ªå¾ªç¯å¾å°keyï¼ç¬¬äºä¸ªå¾ªç¯å¾å°HashMapçEntryæçå°±æ¯ä»å¾ªç¯éé¢ä½ç°åºæ¥ç第äºä¸ªå¾ªç¯æ¤è´å¯ä»¥ç´æ¥åkeyåvalueå¼è第ä¸ä¸ªå¾ªç¯è¿æ¯å¾åå©ç¨HashMapçget(Object key)æ¥åvalueå¼ç°å¨ççHashMapçget(Object key)æ¹æ³
public V get(Object key) {
Object k = maskNull(key);
int hash = hash(k);
int i = indexFor(hash, table.length); //Entry[] table
Entry<K,V> e = table;
while (true) {
if (e == null)
return null;
if (e.hash == hash && eq(k, e.key))
return e.value;
e = e.next;
}
}
å
¶å®å°±æ¯å次å©ç¨Hashå¼ååºç¸åºçEntryåæ¯è¾å¾å°ç»æï¼æ以使ç¨ç¬¬ä¸ä¸å¾ªç¯ç¸å½äºä¸¤æ¬¡è¿å
¥HashMapçEntry
ä¸è第äºä¸ªå¾ªç¯åå¾Entryçå¼ä¹åç´æ¥åkeyåvalueï¼æçæ¯ç¬¬ä¸ä¸ªå¾ªç¯é«ãå
¶å®æç
§Mapçæ¦å¿µæ¥çä¹åºè¯¥æ¯ç¨ç¬¬äºä¸ªå¾ªç¯å¥½ä¸ç¹ï¼å®æ¬æ¥å°±æ¯keyåvalueçå¼å¯¹ï¼å°keyåvalueåå¼æä½å¨è¿éä¸æ¯ä¸ªå¥½éæ©ã
27ãarray(æ°ç») å ArryListç使ç¨
arrayï¼[]ï¼ï¼æé«æï¼ä½æ¯å
¶å®¹éåºå®ä¸æ æ³å¨ææ¹åï¼
ArrayListï¼å®¹éå¯å¨æå¢é¿ï¼ä½çºç²æçï¼
åºäºæçåç±»åæ£éªï¼åºå°½å¯è½ä½¿ç¨arrayï¼æ æ³ç¡®å®æ°ç»å¤§å°æ¶æ使ç¨ArrayListï¼
ArrayListæ¯Arrayçå¤æçæ¬
ArrayListå
é¨å°è£
äºä¸ä¸ªObjectç±»åçæ°ç»ï¼ä»ä¸è¬çæä¹æ¥è¯´ï¼å®åæ°ç»æ²¡ææ¬è´¨çå·®å«ï¼çè³äºArrayListç许å¤æ¹æ³ï¼å¦IndexãIndexOfãContainsãSortçé½æ¯å¨å
é¨æ°ç»çåºç¡ä¸ç´æ¥è°ç¨Arrayç对åºæ¹æ³ã
ArrayListåå
¥å¯¹è±¡æ¶ï¼æå¼ç±»åä¿¡æ¯ï¼ææ对象å±è½ä¸ºObjectï¼ç¼è¯æ¶ä¸æ£æ¥ç±»åï¼ä½æ¯è¿è¡æ¶ä¼æ¥éã
注ï¼jdk5ä¸å å
¥äºå¯¹æ³åçæ¯æï¼å·²ç»å¯ä»¥å¨ä½¿ç¨ArrayListæ¶è¿è¡ç±»åæ£æ¥ã
ä»è¿ä¸ç¹ä¸çæ¥ï¼ArrayListä¸æ°ç»çåºå«ä¸»è¦å°±æ¯ç±äºå¨æå¢å®¹çæçé®é¢äº
28ãå°½é使ç¨HashMap åArrayList ,é¤éå¿
è¦ï¼å¦åä¸æ¨è使ç¨HashTableåVector ï¼åè
ç±äºä½¿ç¨åæ¥æºå¶ï¼è导è´äºæ§è½çå¼éã
29ãStringBuffer åStringBuilderçåºå«ï¼
java.lang.StringBuffer线ç¨å®å
¨çå¯åå符åºåãä¸ä¸ªç±»ä¼¼äº String çå符串ç¼å²åºï¼ä½ä¸è½ä¿®æ¹ã
StringBuilderãä¸è¯¥ç±»ç¸æ¯ï¼é常åºè¯¥ä¼å
ä½¿ç¨ java.lang.StringBuilderç±»ï¼å 为å®æ¯æææç¸åçæä½ï¼ä½ç±äºå®ä¸æ§è¡åæ¥ï¼æ以é度æ´å¿«ã为äºè·å¾æ´å¥½çæ§è½ï¼å¨æé StirngBuffer æ StirngBuilder æ¶åºå°½å¯è½æå®å®ç容éãå½ç¶ï¼å¦æä½ æä½çå符串é¿åº¦ä¸è¶
è¿ 16 个å符就ä¸ç¨äºã ç¸åæ
åµä¸ä½¿ç¨ StirngBuilder ç¸æ¯ä½¿ç¨ StringBuffer ä»
è½è·å¾ 10%-15% å·¦å³çæ§è½æåï¼ä½å´è¦åå¤çº¿ç¨ä¸å®å
¨çé£é©ãèå¨ç°å®ç模ååç¼ç¨ä¸ï¼è´è´£æä¸æ¨¡åçç¨åºåä¸ä¸å®è½æ¸
æ°å°å¤æ该模åæ¯å¦ä¼æ¾å
¥å¤çº¿ç¨çç¯å¢ä¸è¿è¡ï¼å æ¤ï¼é¤éä½ è½ç¡®å®ä½ çç³»ç»çç¶é¢æ¯å¨ StringBuffer ä¸ï¼å¹¶ä¸ç¡®å®ä½ ç模åä¸ä¼è¿è¡å¨å¤çº¿ç¨æ¨¡å¼ä¸ï¼å¦åè¿æ¯ç¨ StringBuffer å§ã
30ãå°½éé¿å
使ç¨split
é¤éæ¯å¿
é¡»çï¼å¦ååºè¯¥é¿å
使ç¨splitï¼splitç±äºæ¯ææ£å表达å¼ï¼æ以æçæ¯è¾ä½ï¼å¦ææ¯é¢ç¹çå åï¼å ç¾ä¸çè°ç¨å°ä¼è费大éèµæºï¼å¦æç¡®å®éè¦é¢ç¹çè°ç¨splitï¼å¯ä»¥èè使ç¨apacheç StringUtils.split(string,char)ï¼é¢ç¹splitçå¯ä»¥ç¼åç»æã
å
¶ä»è¡¥å
:
1ãåæ¶æ¸
é¤ä¸å使ç¨ç对象ï¼è®¾ä¸ºnull
2ãå°½å¯è½ä½¿ç¨final,staticçå
³é®å
3ãå°½å¯è½ä½¿ç¨buffered对象
å¦ä½ä¼å代ç 使JAVAæºæ件åç¼è¯åCLASSæ件æ´å°
1 å°½é使ç¨ç»§æ¿ï¼ç»§æ¿çæ¹æ³è¶å¤ï¼ä½ è¦åç代ç éä¹å°±è¶å°
2 æå¼JAVAç¼è¯å¨çä¼åéé¡¹ï¼ javac -O è¿ä¸ªé项å°å é¤æCLASSæ件ä¸çè¡å·ï¼å¹¶è½æ
ä¸äºprivate, static,finalçå°æ®µæ¹æ³ç³æ为inlineæ¹æ³è°ç¨
3 æå
¬ç¨ç代ç æååºæ¥
4 ä¸è¦åå§åå¾å¤§çæ°ç»ï¼å°½ç®¡åå§åä¸ä¸ªæ°ç»å¨JAVA代ç ä¸åªæ¯ä¸è¡ç代ç éï¼ä½
ç¼è¯åç代ç æ¯ä¸è¡ä»£ç æå
¥ä¸ä¸ªæ°ç»çå
ç´ ï¼æ以å¦æä½ æ大éçæ°æ®éè¦åå¨æ°ç»
ä¸çè¯ï¼å¯ä»¥å
æè¿äºæ°æ®æ¾å¨Stringä¸ï¼ç¶åå¨è¿è¡ææå符串解æå°æ°ç»ä¸
5 æ¥æç±»åç对象ä¼å ç¨å¾å¤§ç空é´ï¼å¦æä½ è¦åå¨å¤§éçæ¥æ对象ï¼å¯ä»¥èèæå®åå¨ä¸º
longåï¼ç¶åå¨ä½¿ç¨çæ¶å转æ¢ä¸ºDateç±»å
6 ç±»åï¼æ¹æ³åååéåå°½é使ç¨ç®ççååï¼å¯ä»¥èè使ç¨Hashjava, Jobe, Obfuscate and Jshrinkçå·¥å
·èªå¨å®æè¿ä¸ªå·¥ä½
7 å°static finalç±»åçåéå®ä¹å°Interfaceä¸å»
8 ç®æ¯è¿ç® è½ç¨å·¦ç§»/å³ç§»çè¿ç®å°±ä¸è¦ç¨*å/è¿ç®ï¼ç¸åçè¿ç®ä¸è¦è¿ç®å¤æ¬¡
2. ä¸è¦ä¸¤æ¬¡åå§ååé
Javaéè¿è°ç¨ç¬ç¹çç±»æé å¨é»è®¤å°åå§ååé为ä¸ä¸ªå·²ç¥çå¼ãææç对象被设置ænullï¼integers (byte, short, int, long)被设置æ0ï¼floatådouble设置æ0.0ï¼Booleanåé设置æfalseãè¿å¯¹é£äºæ©å±èªå
¶å®ç±»ç类尤å
¶éè¦ï¼è¿è·ä½¿ç¨ä¸ä¸ªæ°çå
³é®è¯å建ä¸ä¸ªå¯¹è±¡æ¶ææä¸è¿ä¸²çæé å¨è¢«èªå¨è°ç¨ä¸æ ·ã
3. å¨ä»»ä½å¯è½çå°æ¹è®©ç±»ä¸ºFinal
æ 记为finalçç±»ä¸è½è¢«æ©å±ãå¨ãæ ¸å¿Java APIãä¸æ大éè¿ä¸ªææ¯çä¾åï¼è¯¸å¦java.lang.Stringãå°Stringç±»æ 记为finalé»æ¢äºå¼åè
å建ä»ä»¬èªå·±å®ç°çé¿åº¦æ¹æ³ã
æ´æ·±å
¥ç¹è¯´ï¼å¦æç±»æ¯finalçï¼ææç±»çæ¹æ³ä¹æ¯finalçãJavaç¼è¯å¨å¯è½ä¼å
èææçæ¹æ³ï¼è¿ä¾èµäºç¼è¯å¨çå®ç°ï¼ãå¨æçæµè¯éï¼æå·²ç»çå°æ§è½å¹³åå¢å äº50%ã
9. å¼å¸¸å¨éè¦æåºçå°æ¹æåºï¼try catchè½æ´åå°±æ´å
try {
some.method1(); // Difficult for javac
} catch( method1Exception e ) { // and the JVM runtime
// Handle exception 1 // to optimize this
} // code
try {
some.method2();
} catch( method2Exception e ) {
// Handle exception 2
}
try {
some.method3();
} catch( method3Exception e ) {
// Handle exception 3
}
å·²ä¸ä»£ç æ´å®¹æ被ç¼è¯å¨ä¼å
try {
some.method1(); // Easier to optimize
some.method2();
some.method3();
} catch( method1Exception e ) {
// Handle exception 1
} catch( method2Exception e ) {
// Handle exception 2
} catch( method3Exception e ) {
// Handle exception 3
}
10. For循ç¯çä¼å
Replaceâ¦
for( int i = 0; i < collection.size(); i++ ) {
...
}
withâ¦
for( int i = 0, n = collection.size(); i < n; i++ ) {
...
}
5ã å¨JAVA + ORACLE çåºç¨ç³»ç»å¼åä¸ï¼javaä¸å
åµçSQLè¯å¥å°½é使ç¨å¤§åçå½¢å¼ï¼ä»¥åè½»ORACLE解æå¨ç解æè´æ
ã
10ãå°½ééç¨lazy loading ççç¥ï¼å³å¨éè¦çæ¶åæå¼å§å建ã
ä¾å¦ï¼ String str = âaaaâ;
if(i == 1) {
list.add(str);
}
åºæ¿æ¢ä¸ºï¼
if(i == 1) {
String str = âaaaâ;
list.add(str);
}
12ãä¸è¦å¨å¾ªç¯ä¸ä½¿ç¨ï¼
Try {
} catch() {
}
åºæå
¶æ¾ç½®å¨æå¤å±
温馨提示:答案为网友推荐,仅供参考