日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA整理的笔记

發(fā)布時(shí)間:2024/3/24 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA整理的笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java:使用Eclipse開發(fā)java程序

集成開發(fā)環(huán)境(IDE)是一類軟件將程序開發(fā)環(huán)境和程序調(diào)試環(huán)境集合在一起,提高開發(fā)效率
1.創(chuàng)建java項(xiàng)目
2.創(chuàng)建程序包(一般為域名的反向如hell.com則為com.hello)
3.編寫Java源程序
4.運(yùn)行Java程序
第一步我們創(chuàng)建一個(gè)Java項(xiàng)目,第二步我們?cè)贘ava項(xiàng)目的SRC下創(chuàng)建了一個(gè)包,第三步我們?cè)诎锩鎰?chuàng)建一個(gè)類并且編寫JAVA程序最后運(yùn)行這個(gè)程序。
main():main()方法程序的入口比如拿鑰匙開門一樣不能從窗戶進(jìn)去,這里的main()方法就是程序的入口.

Java中的關(guān)鍵字:
abstract boolean break byte case catch char class continue default do double else
extends false final finaly float for if implements import instanceof int interface long
native new null package private protected public return short static super switch synchronized
this throw throws transient true try void volatile while(區(qū)分大小寫如void是關(guān)鍵字但是Void就不是)

java標(biāo)識(shí)符:
標(biāo)識(shí)符就是用于給java程序中變量、類、方法等命名的符號(hào)。
使用標(biāo)識(shí)符時(shí),需要遵守幾條規(guī)則:
1.標(biāo)識(shí)符可以由字母、數(shù)字、下劃線、美元符($)組成,但不能包含@、%、空格等其他字符,不能以數(shù)字開頭。譬如:123name就是不合法的
2.標(biāo)識(shí)符不能是java關(guān)鍵字和保留字(java預(yù)留的關(guān)鍵字,以后的升級(jí)版本中可能作為關(guān)鍵字),但可以包含關(guān)鍵字和保留字。如:不可能使用void作為標(biāo)識(shí)符,但是MYvoid是可以的
3.標(biāo)識(shí)符時(shí)嚴(yán)格區(qū)分大小寫的.所以呢,一定要區(qū)分imooc和IMooc是兩個(gè)不同的標(biāo)識(shí)符。
4.標(biāo)識(shí)符的命名最好能反映出其作用,做到見名知意.

變量:
Java中通過變量類型、變量名、變量值這三個(gè)元素來描述變量

如何命名java變量
給變量取名字需要遵守一定規(guī)則

首字母 其余部分1.字母 任意多的:變量名=2.下劃線'_' + 1.數(shù)字3.'$'符號(hào) 2.字母3.下劃線'_'4.'$'符號(hào)

正確示范:
String myname=“tom”;
String _love=“imooc”;
String $hobby2=“l(fā)ol”;
錯(cuò)誤示范:
String 3hobby=“wow”;(不能以數(shù)字開頭)
String %sex=“男”;(不能以下劃線和美元符之外的其他特殊字符開頭)
String private=“www.imooc.com”;(不能使用java關(guān)鍵字)

java編程習(xí)慣:
1.變量名由多個(gè)單詞組成時(shí),第一個(gè)單詞的首字母小寫,其后首字母大寫,俗稱駝峰式命名法,如myAge
2.變量命名時(shí),盡量簡短且能清楚地表達(dá)變量的作用,做到見名知意。如:定義變量名stuName保存"學(xué)生姓名"信息
PS:java變量名的長度沒有限制,但是java語言是區(qū)分大小寫的,所以price和Price是兩個(gè)完全不同的變量

Java中的數(shù)據(jù)類型
java語言是一種強(qiáng)類型語言。java中存儲(chǔ)的數(shù)據(jù)都是有類型的,而且必須在編譯時(shí)就確定其類型。
java中有兩類數(shù)據(jù)類型;
1.整數(shù)類型(byte、short、int、long)
1.數(shù)值型2.浮點(diǎn)類型(float、double)
基本數(shù)據(jù)類型 2.字符型(char)
3.布爾型(boolean)

數(shù)據(jù)類型
1.類(class)
2.接口(interface)
引用數(shù)據(jù)類型 3.數(shù)組

在java中基本數(shù)據(jù)類型變量存的是數(shù)據(jù)本身,而引用數(shù)據(jù)類型變量存的是保存數(shù)據(jù)的空間地址
通俗而言基本數(shù)據(jù)類型存儲(chǔ)的是放在抽屜里的東西而引用數(shù)據(jù)類型則是存儲(chǔ)打開這個(gè)抽屜的鑰匙 抽屜鑰匙一一對(duì)應(yīng)

常用的基本數(shù)據(jù)類型有:
int 整型 4byte 用于存儲(chǔ)整數(shù),如年齡,個(gè)數(shù) int age=21;
double 雙精度浮點(diǎn)型 8byte 用于存儲(chǔ)小數(shù),如商品價(jià)格、成績平均分 double price=15.5;
float 單精度浮點(diǎn)型 4byte 用于存儲(chǔ)小數(shù)如身高 float height=175.2f;
char 字符型 2byte 用于存儲(chǔ)單個(gè)字符,如性別’男’、‘女’ char sex=‘男’;
boolean 布爾型 1byte 表示“真”或“假”,取值只能為 true或flase boolean flag=true;

String 是一種常見的引用數(shù)據(jù)類型,用來表示字符串。在程序開發(fā)中,很多操作都要使用字符串來完成,例如系統(tǒng)中的用戶名、密碼、電子郵箱等。

java中變量的使用規(guī)則
1.java中的變量需要先聲明后使用
2.變量使用時(shí),可以聲明變量的同時(shí)進(jìn)行初始化,也可以先聲明后賦值。
3.變量中每次只能賦一個(gè)值,但是可以修改多次。
4.main方法中定義的變量必須先賦值,然后才能輸出。

java中的自動(dòng)類型轉(zhuǎn)換
不同的基本數(shù)據(jù)類型之間是需要進(jìn)行相互轉(zhuǎn)換的
如:?int score1=82;
double score2=score1;
System.out.println(score2);
代碼中將int類型score1賦值給score2并且轉(zhuǎn)換為double類型。
1.目標(biāo)類型與源類型兼容,如double 型兼容int型,但是char型不能兼容int型
2.目標(biāo)型大于源類型,如double類型長度為8字節(jié),int類型為4字節(jié),因此double類型的變量里直接可以存放int類型的數(shù)據(jù),但是反過來就不可以了。

java中的強(qiáng)制類型轉(zhuǎn)換
java強(qiáng)制類型轉(zhuǎn)換語法
double avg1=78.5;
int vag2=(int)avg1;
System.out.println(avg1);
System.out.println(avg2);
此時(shí)就強(qiáng)制把double類型轉(zhuǎn)換成int類型。PS(強(qiáng)制類型容易造成數(shù)據(jù)丟失所以需要謹(jǐn)慎使用,

java常量的應(yīng)用
所謂常量可以理解為是一種特殊的變量在程序運(yùn)行過程中不允許被改變。
語法:final 常量名 =值;
java中注釋的使用
java中有三種注釋類型:單行,多行,文檔三種注釋
/** /文檔注釋
/ */多行注釋
// 單行注釋

@author 標(biāo)明開發(fā)該類模塊的作者 @version 標(biāo)明該類模塊的版本 @see 參考轉(zhuǎn)向,也就是相關(guān)主題 @param 對(duì)方法中某參數(shù)的說明 @return 對(duì)方法返回值的說明

@exception 對(duì)方法可能拋出的異常進(jìn)行說明

什么是運(yùn)算符
運(yùn)算符是一種“功能”符號(hào),用以通知java進(jìn)行相關(guān)的運(yùn)算。如我們需要將變量age的值設(shè)置為20,這時(shí)則需要一個(gè)“=”號(hào)來將其連接告訴程序需要進(jìn)行的輔助操作。
java語言中常用的運(yùn)算符可以分為如下幾種;
1.算術(shù)運(yùn)算符
2.賦值運(yùn)算符
3.比較運(yùn)算符
4.邏輯運(yùn)算符
5.條件運(yùn)算符

java中的算術(shù)運(yùn)算符
算術(shù)運(yùn)算符主要用于基本的算術(shù)運(yùn)算,如加法、減法、乘法、除法、等。
java中常用的算術(shù)運(yùn)算符:

  • 加法 5+12=17
  • 減法 25-10=15
  • 乘法 3*8=24

/ 除法 24/6=4
% 求余 24%7=3
++ 自增1 int i=5;i++
– 自減1 int i=5;i–
3 其中++和–既可以出現(xiàn)在操作數(shù)的左邊,也可以出現(xiàn)在右邊,但結(jié)果是不同的

java中的賦值運(yùn)算符

= 賦值 c=a+b將把a(bǔ)+b得到的值賦給c
+= 加等于 c+=a等價(jià)于c=c+a
-= 減等于 c-=a等價(jià)于c=c-a
= 乘等于 c=a等價(jià)于c=a*c
/= 除等于 c/=a等價(jià)于c=c/a
%= 模等于 c%=a等價(jià)于c=c%a

java中的比較運(yùn)算符
比較運(yùn)算符用于判斷兩個(gè)數(shù)據(jù)的大小,例如:大于、等于、不等于。比較的結(jié)果是一個(gè)布爾值(true或false)。

< >= <= == !=

1.>、<、>=、<=只支持左右兩邊操作數(shù)是數(shù)值類型
2.==、!=兩邊的操作數(shù)既可以是數(shù)值類型也可以是引用類型
java中的邏輯運(yùn)算符
&& 與 a&&b 如果a與b都為true,則返回true;
|| 或 a!!b 如果a與b任一個(gè)為true,則返回true
! 非 !a 如果a為false,則返回true,即取反
^ 異或 a^b 如果a與b有僅有一個(gè)為true,則返回true

java中的條件運(yùn)算符
條件運(yùn)算符(?:)也稱為“三元運(yùn)算符”。
語法形式:布爾表達(dá)式?表達(dá)式1:表達(dá)式2;
運(yùn)算過程:如果布爾表達(dá)式的值為true,則返回表達(dá)式1的值,否則返回表達(dá)式2的值
例如:
String str=(8>5)?“8大于5”:“8不大于5”;
System.out.println(str);
因?yàn)楸磉_(dá)式的值8>5所以返回的值為8大于5;

java中運(yùn)算符的優(yōu)先級(jí) 所謂優(yōu)先級(jí),就是在表達(dá)式的運(yùn)算過程中的先后順序。java中常用的運(yùn)算優(yōu)先級(jí)如下所示:

1 ()
2 !+(正) -(負(fù))++ ——
3 */%
4 +(加)-(減)
5 < <= > >=
6 == !=
7 ^
8 &&
9 ||
10 ?:
11 = += -= *= /= %=
級(jí)別為1的優(yōu)先級(jí)最高,11的優(yōu)先級(jí)最低。

java條件語句之if
if(條件){
條件成立時(shí)執(zhí)行的代碼
}

java條件語句之if…else
語法
if(條件的布爾表達(dá)行){
代碼塊1
}else{
代碼塊2
}
執(zhí)行過程:當(dāng)if中的條件滿足時(shí)則執(zhí)行代碼塊1,否則執(zhí)行代碼塊2;和if相比 if…else不管條件是否滿足都會(huì)執(zhí)行一條語句;

java條件語句之多重if
語法:
if(條件1){
代碼塊1
}else if(條件2){
代碼塊2
}else{
代碼塊3
}
執(zhí)行過程:先判斷條件1如果滿足則執(zhí)行代碼1,否則繼續(xù)判斷條件2,如果條件2滿足則輸出代碼塊2,否則輸出代碼塊3,與前兩者相比較這個(gè)會(huì)多判斷一次。

java條件語句之嵌套if
嵌套if語句,只有當(dāng)外層if的條件成立時(shí),才會(huì)判斷內(nèi)層if的條件。
if(條件1){
if(條件2){
代碼塊1
}else{
代碼塊2
}
}else{
代碼塊3
}

equals()用于判斷字符串的內(nèi)容是否相同,相同則返回true,反之則返回false;

java條件語句之switch
語法:
switch(表達(dá)式){
case 值1:
執(zhí)行代碼塊1
break;
case 值2:
執(zhí)行代碼塊2
break;
case 值n:
執(zhí)行代碼塊n
break;
default:
默認(rèn)執(zhí)行的代碼
}
執(zhí)行過程:當(dāng)switch后表達(dá)式的值和case語句后的值相同時(shí),從該位置開始向下執(zhí)行,直到遇到break語句或者switch語句塊結(jié)束;如果沒有匹配的case語句則執(zhí)行default塊的代碼。
PS:
1.switch后面的小括號(hào)中表達(dá)式的值必須是整型或字符型
2.case后面的值可以是常量數(shù)值,如1.2.;也可以是一個(gè)常量表達(dá)式,如2+2;但是不能是變量或帶有變量的表達(dá)式,如a*2
3.case匹配后,執(zhí)行匹配快里的程序代碼,如果沒有遇到break會(huì)執(zhí)行下一個(gè)的case塊的內(nèi)容,直到遇到break語句或者switch語句塊結(jié)束。

java循環(huán)語句之while
java中常用的3中循環(huán):while、do…while、for
while循環(huán):
語法:
while(判斷條件){
循環(huán)操作
}
執(zhí)行過程:
<1>:判斷while后面的條件是否成立(true/false)
<2>:當(dāng)條件成立時(shí),執(zhí)行循環(huán)內(nèi)的操作代碼,然后重復(fù)執(zhí)行<1>,<2>,直到循環(huán)條件不成立為止
特點(diǎn):先判斷,后執(zhí)行
do…while
do…while循環(huán)與while循環(huán)語法有些類似,但是執(zhí)行過程差別比較大。
語法:
do{
循環(huán)操作
}while(判斷條件);
執(zhí)行過程:
<1>:先執(zhí)行一遍程序,然后判斷條件是否成立
<2>:如果條件成立,繼續(xù)執(zhí)行<1>,<2>直到循環(huán)條件不成立為止
特點(diǎn):先執(zhí)行,后判斷
由此可見,do…while語句保證循環(huán)至少被執(zhí)行一次!

for循環(huán)
Java中的三種循環(huán)可以相互替換
語法:
for(循環(huán)變量初始化;循環(huán)條件;循環(huán)變量變化){
循環(huán)操作
}
執(zhí)行過程:
<1>、執(zhí)行循環(huán)變量初始化部分,設(shè)置循環(huán)的初始狀態(tài),此部分在整個(gè)循環(huán)中只執(zhí)行一次
<2>、進(jìn)行循環(huán)條件的判斷,如果條件為true,則執(zhí)行循環(huán)體內(nèi)代碼,如果為false,則直接退出循環(huán)
<3>、執(zhí)行循環(huán)變量變換部分,改變循環(huán)變量的值,以便進(jìn)行下一次條件判斷
<4>、依次重新執(zhí)行<2>、<3>、<4>,直到退出循環(huán)
特點(diǎn):相比while和do…while語句結(jié)構(gòu)更加簡潔易讀
PS:1.for關(guān)鍵字后面括號(hào)中的三個(gè)表達(dá)式必須用’;‘隔開,三個(gè)表達(dá)式可以省略但是’;‘不能省略。
省略’循環(huán)變化量初始化’,可以在for語句之前由賦值語句進(jìn)行變量初始化。
省略’循環(huán)條件’,即可能會(huì)造成程序一直執(zhí)行下去,也就是’死循環(huán)’現(xiàn)象
省略循環(huán)變量的變化部分,可以在循環(huán)體中進(jìn)行循環(huán)變換的部分。
2.for循環(huán)變量初始化和循環(huán)變量變化部分,可以是使用’,'同時(shí)初始化或改變多個(gè)循環(huán)變量的值。如
for(int i=1,j=5;i<=5;i++,j–){
System.out.println(i+"+"+j+"="+(i+j));
}
java循環(huán)跳轉(zhuǎn)語句之break

java循環(huán)語句之continue continue的作用是跳過循環(huán)體中剩余的語句執(zhí)行下一次循環(huán)。java循環(huán)語句之多重循環(huán) 循環(huán)體中包含循環(huán)語句的結(jié)構(gòu)稱為多重循環(huán)。三種循環(huán)語句可以自身嵌套,也可以相互嵌套,最常見的就是二重循環(huán),在二重循環(huán)中,外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)要執(zhí)行一圈。例子1: package com.vb;**** import java.util.Scanner;public class LX27 { public static void main(String[] args) { ***** Scanner input=new Scanner(System.in);//創(chuàng)建Scanner對(duì)象System.out.print("請(qǐng)輸入考試成績信息:"); ***** int score=input.nextInt();//獲取用戶輸入的成績并保存在變量中int count=0;System.out.println("加分前成績:"+score);for(;score<60;score++) {count++; }System.out.println("加分后成績:"+score);System.out.println("加分次數(shù):"+count); }

}

這個(gè)例子展示了Scanner類的導(dǎo)入例子2 實(shí)現(xiàn)了三個(gè)班級(jí)的各4個(gè)學(xué)生的成績,并且求出了他們的平均分package com.vb;import java.util.Scanner;public class LX28 { public static void main(String[] args) {Scanner input=new Scanner(System.in);//創(chuàng)建Scanner對(duì)象int classNum=3;//班級(jí)數(shù)量int stuNum=4;//學(xué)生數(shù)量double sum=0;//成績總和double avg=0;//成績平均分for(int i=1;i<=classNum;i++) {//外層循環(huán)控制班級(jí)的數(shù)量System.out.println("請(qǐng)輸入第"+i+"個(gè)班級(jí)的成績");for(int j=1;j<=stuNum;j++) {//內(nèi)層循環(huán)控制學(xué)生的數(shù)量System.out.print("第"+j+"個(gè)學(xué)生成績?yōu)?#34;);int score=input.nextInt();sum=sum+score;//成績累加總和}avg=sum/stuNum;//計(jì)算平均分System.out.println("第"+i+"個(gè)班級(jí)學(xué)生的平均分為:"+avg);sum=0;//成績清0}}

}
java之?dāng)?shù)組
數(shù)組可以理解為是一個(gè)巨大的“盒子”,里面可以按順序存放多個(gè)類型相同的數(shù)據(jù),比如可以定義int型的數(shù)組scores存儲(chǔ)45名學(xué)生的成績
int[] scores={76,83,92,87};
數(shù)組里面每個(gè)值都有一個(gè)索引,索引從0開始;
例如可以通過scores[0]獲取數(shù)組中的第一個(gè)元素,scores[2]就可以獲取第三個(gè)元素。
如何使用java中的數(shù)組
java中操作數(shù)組只需要4步;
1.聲明數(shù)組
語法:數(shù)據(jù)類型[] 數(shù)組名;
或者 數(shù)據(jù)類型 數(shù)組名[];
其中,數(shù)組名可以是任意合法的變量名,如:
int[] scores;
double height[];
String[] names;
2.分配空間
簡單來說就是指定數(shù)組中最多可存儲(chǔ)多少個(gè)元素
語法:數(shù)組名=new 數(shù)據(jù)類型[數(shù)組長度];(其中數(shù)組長度就是數(shù)組中能存放元素的個(gè)數(shù))如:
scores=new int[5];
height=new double[5];
names=new String[5];
上面聲明數(shù)組和分配空間可以合并如:
int[] scores=new int[5];
3.賦值
語法:
scores[0]=89;
scores[1]=79;
4.處理數(shù)組中數(shù)據(jù)
java中還提供了另外一種直接創(chuàng)建數(shù)組的方式,它將聲明數(shù)組,分配空間和賦值合并完成,如
int[] scores={78,91,84,68};他等價(jià)于:
int[] scores=new int[此括號(hào)中不能指定長度不然報(bào)錯(cuò)]{78,91,84,68};

使用循環(huán)來操作java中的數(shù)組 如:

int[] scores={78,91,84,68};
for(int i=1;i<scores.length;i++){
System.ou.println(“數(shù)組中的第”+(i+1)“個(gè)元素的值是:”+scores[i])
}
其中,數(shù)組名.length 用于獲取數(shù)組的長度
PS:
1.數(shù)組下標(biāo)從0開始。因此 scores[3],代表數(shù)組中第4個(gè)元素,而非第三個(gè)元素
2.數(shù)組下標(biāo)是0到數(shù)組長度-1,如果越界訪問,就會(huì)報(bào)錯(cuò)。
循環(huán)遍歷數(shù)組
package com.vb;
public class LX31 {
public static void main(String[] args) {
String[] hobbys= {“sports”,“game”,“movie” };
System.out.println(“循環(huán)輸出數(shù)組中元素的值:”);
for(int i=0;i<hobbys.length;i++) {
System.out.println(hobbys[i]);
}
}

}
例子: package com.vb;

public class LX32 { public static void main(String[] args) {int[] nums=new int[]{61,23,4,74,13,148,20};//定義一個(gè)整型數(shù)組int max=nums[0];//假定最大值為數(shù)組中的第一個(gè)數(shù)int min=nums[0];//假定最小值為數(shù)組中的第一個(gè)數(shù)double sum=0;//累加值double avg=0;//平均值for(int i=0;i<nums.length;i++) {if(nums[i]>max){max=nums[i];}//如果當(dāng)前值大于max,則替換max值if(nums[i]<min){min=nums[i];}sum=sum+nums[i];avg=sum/nums.length; }System.out.println("數(shù)組中的最大值為:"+max);System.out.println("數(shù)組中的最小值為:"+min);System.out.println("數(shù)組中的平均值為:"+avg);}}使用Arrays類操作java中的數(shù)組Arrays類是java中提供的一個(gè)工具類,在java.util包中。該類中包含了一些方法用來直接操作數(shù)組,比如可以直接實(shí)現(xiàn)數(shù)組的排序、搜索等。1.排序語法:Arrays.sort(數(shù)組名);可以使用sort()方法實(shí)現(xiàn)對(duì)數(shù)組的排序,只要將數(shù)組名放在sort()方法的括號(hào)中,就可以完成對(duì)該數(shù)組的排序(按升序排序)2.將數(shù)組轉(zhuǎn)換為字符串語法:Arrays.toString(數(shù)組名);可以使用toString()方法將一個(gè)數(shù)組轉(zhuǎn)換成字符串,該方法按順序把多個(gè)數(shù)組元素連接在一起,多個(gè)元素之間使用逗號(hào)和空格隔開使用foreach操作數(shù)組語法:for(元素類型 元素變量:遍歷數(shù)組){執(zhí)行的代碼 }java中的二維數(shù)組1.聲明數(shù)組并分配空間數(shù)據(jù)類型[][] 數(shù)組名=new 數(shù)據(jù)類型[行的個(gè)數(shù)][列的個(gè)數(shù)];或者 數(shù)據(jù)類型[][] 數(shù)組名;數(shù)組名=new 數(shù)據(jù)類型[行的個(gè)數(shù)][列的個(gè)數(shù)];如:定義一個(gè)兩行三列的二維數(shù)組int[][] num=new int[2][3];2.賦值二維數(shù)組的賦值,和一維數(shù)組類似,可以通過下標(biāo)來逐個(gè)賦值,注意索引從0開始數(shù)組名[行的索引][列的索引]=值;也可以在聲明數(shù)組的同時(shí)為其賦值數(shù)據(jù)類型[][] 數(shù)組名={{值1,值2...},{值11,值22...}};如://給第1行第1列的元素賦值num[0][0]=12;3.處理數(shù)組如何定義java中的方法所謂方法,就是用來解決一類問題的代碼的有序組合,是一個(gè)功能模塊。一般情況下,定義一個(gè)方法的語法是:訪問休止符 返回值類型 方法名(參數(shù)列表){方法體}其中1.訪問休止符:方法允許被訪問的權(quán)限范圍,可以是pubulic、protected、private 甚至可以省略,其中public表示該方法可以被其他任何代碼調(diào)用。2.返回值類型:方法返回值的類型,如果方法不返回任何值,則返回值類型指定為void;如果方法具有返回值,則需要返回指定返回值類型,并且在方法中使用return語句返回返回值3.方法名:定義的方法的名字,必須使用合格的標(biāo)識(shí)符4.參數(shù)列表:傳遞給方法的參數(shù)列表,參數(shù)可以有多個(gè),多個(gè)參數(shù)間用逗號(hào)隔開,每個(gè)參數(shù)由參數(shù)類型和參數(shù)名組成,以空格隔開根據(jù)方法是否帶參、是否帶返回值,可以將方法分四類:*無參無返回值方法*無參帶返回值方法*帶參無返回值方法*帶參帶返回值方法Java中無參無返回值方法的使用如果方法不包含參數(shù),且沒有返回值,我們稱之為無參無返回值方法。方法的使用分兩步:第一步,定義方法如:public void show(){System.out.println(“welcome to imooc.”); }其中void是返回值類型 show方法名System.out.println(“welcome to imooc.”)方法體PS:1.方法體放在一對(duì)大括號(hào)中,實(shí)現(xiàn)特定的操作2.方法名主要在調(diào)用這個(gè)方法時(shí)使用,需要注意命名的規(guī)范,一般采用第一個(gè)單詞首字母小寫,其他單詞首字母大寫的形式第二步,調(diào)用方法當(dāng)需要調(diào)用方法執(zhí)行某個(gè)操作時(shí),可以先創(chuàng)建類的對(duì)象,然后通過對(duì)象名.方法名()來實(shí)現(xiàn);java中無參帶返回值方法的使用如果方法不包含參數(shù),但是有返回值,我們稱為無參帶返回值的方法。如果返回值類型為int 則需要return來返回結(jié)果PS:如果返回值為void,則方法中不能使用return返回值!public void showInfo(){return “java”;//這個(gè)時(shí)候會(huì)報(bào)錯(cuò)}2.方法返回值最多只能有一個(gè),不能返回多個(gè)public int getInfo(){int score1=94;int score2=87;return score1,score2;//返回值只能返回一個(gè)值;}3.方法返回值的類型必須兼容,例如,如果返回值類型為int,則不能返回String型的值public int getInfo(){String name="imooc";return name;//name為String類型但是返回值類型為int所以會(huì)報(bào)錯(cuò)}例:package com.vb;public class LX40 { public static void main(String[] args) {LX40 hello=new LX40();int maxScore=hello.getMaxAge();System.out.println(maxScore);}public int getMaxAge() {int[] ages= {18,23,21,19,25,29,17};int maxScore=ages[0];for(int i=0;i<ages.length;i++) {if(ages[i]>maxScore) {maxScore=ages[i];}}return maxScore;}}java中帶參無返回值方法的使用例:public void show(String name){System.out.println(“歡迎您,”+name+“!”);HelloWorld hello=new HelloWorld();hello.show(“愛慕課”);}上面的代碼定義了一個(gè)show方法,帶有一個(gè)參數(shù)name,實(shí)現(xiàn)輸出歡迎消息。調(diào)用帶參方法與調(diào)用無參方法的語法類似,但是調(diào)用時(shí)必須傳入實(shí)際的參數(shù)值對(duì)象名.方法名(實(shí)參1,實(shí)參2,....,實(shí)參n)很多時(shí)候我們把定義方法時(shí)的參數(shù)稱為形參,目的是用來定義方法需要傳入的參數(shù)的個(gè)數(shù)和類型;把調(diào)用方法時(shí)的參數(shù)稱為實(shí)參,是傳遞給方法真正被處理的值。上例中String name 就是形參“愛慕課”就是實(shí)參 一定不可以被忽視的問題:1.調(diào)用帶參方法時(shí),必須保證實(shí)參的數(shù)量、類型、順序與形參一一對(duì)應(yīng)2.調(diào)用方法時(shí),實(shí)參不需要指定數(shù)據(jù)類型3.方法的參數(shù)可以是基本數(shù)據(jù)類型,如int、double等,也可以是引用數(shù)據(jù)類型,如String、數(shù)組等’4.當(dāng)方法參數(shù)有多個(gè)時(shí),多個(gè)參數(shù)間以逗號(hào)隔開java中帶參帶返回值方法的使用java中方法的重載什么是方法的重載:如果同一個(gè)類中包含了兩個(gè)或兩個(gè)以上方法名相同、方法參數(shù)的個(gè)數(shù)、順序或類型不同的方法,則稱為方法的重載,也可以稱該方法被重載了。如何區(qū)分調(diào)用的是哪個(gè)重載方法呢當(dāng)調(diào)用被重載的方法時(shí),java會(huì)根據(jù)參數(shù)的個(gè)數(shù)和類型來判斷應(yīng)該調(diào)用哪個(gè)重載方法,參數(shù)完全匹配的方法將被執(zhí)行。判斷方法重載的依據(jù):1.必須是在同一類中2.方法名相同3.方法參數(shù)的個(gè)數(shù)、順序或類型不同4.與方法的修飾符或返回值沒有關(guān)系

重點(diǎn)復(fù)習(xí):package com.vb;
import java.util.Arrays;
public class LX44 {
public static void main(String[] args) {
LX44 hello=new LX44();
int[] nums=hello.getArray(8);
System.out.println(Arrays.toString(nums));
}
public int[] getArray(int length) {
int[] nums=new int[length];
for(int i=0;i<nums.length;i++) {
nums[i]=(int)(Math.random()*100);
}
return nums;

}

}

定義類:
1.類的重要性:所有java程序都以類calss為組織單元
2.什么是類:
類是模子,確定對(duì)象將會(huì)擁有的特征(屬性)和行為(方法){屬性:這個(gè)類這個(gè)東西所具有的東西比如手機(jī)所具有CPU 為多少 屏幕多大;方法是指這個(gè)東西能做什么比如手機(jī)可以打電話,發(fā)短信}
類的特點(diǎn)
類是對(duì)象的類型
具有相同屬性和方法的一組對(duì)象的集合·
3.類的組成:屬性和方法。
4.定義一個(gè)類的步驟:
a.定義類名 public class 類名(){}
java對(duì)象
使用對(duì)象的步驟:
1.創(chuàng)建對(duì)象:
類名 對(duì)象名=new 類名();
LX1 phone=new LX1();
2.使用對(duì)象:
引用對(duì)象的屬性:對(duì)象名.屬性
phone.screen=5;//給scree屬性賦值5
引用對(duì)象的方法:對(duì)象名.方法名()
phone.sendMessage();//調(diào)用sendMessage()方法

成員變量和局部變量區(qū)別1.作用域不同局部變量的作用域僅限于定義它的方法成員變量的作用域在整個(gè)類內(nèi)部都是可見的2.初始值不同java會(huì)給成員變量一個(gè)初始值java不會(huì)給局部變量賦予初始值3.在同一個(gè)方法中,不允許有同名局部變量;在不同的方法中,可以有同名局部變量;4.兩類變量同名時(shí),局部變量具有更高的優(yōu)先級(jí); 構(gòu)造方法1.使用new+構(gòu)造方法 創(chuàng)建一個(gè)新的對(duì)象//意思是:比如創(chuàng)建了一個(gè)構(gòu)造方法 public print(){} 當(dāng)創(chuàng)建此構(gòu)造方法的對(duì)象時(shí)則時(shí) print i=new print();這時(shí)的print不是類名print而是構(gòu)造方法print();2.構(gòu)造方法是定義在java類中的一個(gè)初始化對(duì)象的方法,構(gòu)造方法與類名相同且沒有返回值 構(gòu)造方法的語句格式?jīng)]有返回值public 構(gòu)造方法名(){ //沒有返回值類型 方法名與類名相同 可以指定參數(shù)//初始化代碼 } 帶參構(gòu)造方法的使用 5.當(dāng)沒有指定構(gòu)造方法時(shí),系統(tǒng)會(huì)自動(dòng)添加無參的構(gòu)造方法6.當(dāng)有指定構(gòu)造方法時(shí),無論是有參、無參的構(gòu)造方法,都不會(huì)自動(dòng)添加無參的構(gòu)造方法7.構(gòu)造方法的重載:方法名相同,但是參數(shù)不同的多個(gè)方法調(diào)用時(shí)會(huì)自動(dòng)根據(jù)不同的參數(shù)選擇相應(yīng)的方法java中的static使用之靜態(tài)變量java中被static修飾的成員稱為靜態(tài)成員或類成員。它屬于整個(gè)類所有,而不是某個(gè)對(duì)象所有,即被類的所有對(duì)象所共享。靜態(tài)成員可以使用類名直接訪問,也可以使用對(duì)象名進(jìn)行訪問。當(dāng)然,鑒于他作用的特殊性更推薦用類名訪問。PS:靜態(tài)成員屬于整個(gè)類,當(dāng)系統(tǒng)第一次使用該類時(shí),就會(huì)為其分配內(nèi)存空間直到該類被卸載才會(huì)進(jìn)行資源回收java中的static使用之靜態(tài)方法與靜態(tài)變量一樣,我們可以使用static修飾方法,稱為靜態(tài)方法或類方法。其實(shí)之前我們一直寫的main方法就是靜態(tài)方法。PS:靜態(tài)方法中可以直接調(diào)用同類中的靜態(tài)成員,但不鞥直接調(diào)用非靜態(tài)成員。面向?qū)ο蟮娜筇匦?封裝、繼承、多態(tài)封裝1.概念:將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是通過該類提供的方法來實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問2.好處:a.只能通過規(guī)定的方法訪問數(shù)據(jù) b.隱藏類的實(shí)例細(xì)節(jié),方便修改和實(shí)現(xiàn)3.封裝的實(shí)現(xiàn)步驟1.修改屬性的可見性設(shè)為private 2.創(chuàng)建getter/setter方法用于屬性的讀寫3.在getter/setter方法中加入屬性語句對(duì)屬性值得合法性進(jìn)行判斷java中的包:1.包的作用:管理java文件解決同名文件沖突2.定義包:package包名注:必須放在java源程序的第一行包名間可以使用“.”隔開eg:com.imooc.MyClass4.包的使用(1)可以通過import關(guān)鍵字,在某個(gè)文件使用其他文件的類。import com.imooc.music.MyClass(2)java中,包的命名規(guī)范是全小寫字母拼寫java中的訪問修飾符訪問修飾符--可以修飾屬性和方法的訪問范圍訪問修飾符 本類 同包 子類 其他private √默認(rèn) √ √protected √ √ √public √ √ √ √java中的this關(guān)鍵字1.this關(guān)鍵字代表當(dāng)前對(duì)象this.屬性 操作當(dāng)前的對(duì)象this.方法 調(diào)用當(dāng)前對(duì)象的方法2.封裝對(duì)象的屬性的時(shí)候,經(jīng)常會(huì)使用this關(guān)鍵字什么是java中的內(nèi)部類內(nèi)部類就是定義在另外一個(gè)類里面的類。與之對(duì)應(yīng),包含內(nèi)部類的類被稱為外部類。內(nèi)部類的功能是什么? 1.內(nèi)部類提供了更好的封裝,可以把內(nèi)部類隱藏在外部類之內(nèi),不允許同一個(gè)包中的其他類訪問該類2.內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù),包括私有的數(shù)據(jù)3.內(nèi)部類所實(shí)現(xiàn)的功能使用外部類同樣可以實(shí)現(xiàn),只是有時(shí)使用內(nèi)部類更方便內(nèi)部類有幾種呢1.成員內(nèi)部類2.靜態(tài)內(nèi)部類3.方法內(nèi)部類4.匿名內(nèi)部類java中的成員內(nèi)部類內(nèi)部類中最常見的就是成員內(nèi)部表,也稱為普通內(nèi)部類。PS:外部類不能直接使用內(nèi)部類的成員和方法package com.vb2;public class Outer {//外部類Outer private int a=99;//外部類的私有屬性 public class Inner{//內(nèi)部類Innerint b=2;//內(nèi)部類的成員屬性public void test() {System.out.println("訪問外部類中的a:"+a);System.out.println("訪問內(nèi)部類中的b:"+b);} } public static void main(String[] args) {//測(cè)試成員內(nèi)部類Outer o=new Outer();//創(chuàng)建外部類對(duì)象,對(duì)象名為oInner i=o.new Inner();//使用外部類對(duì)象創(chuàng)建內(nèi)部類對(duì)象,對(duì)象名為ii.test();}}從上面的代碼中我們可以看到,成員內(nèi)部類的使用方法:1.Inner類定義在Outer類的內(nèi)部,相當(dāng)于Outer類的一個(gè)成員變量的位置,Inner類可以使用任意訪問控制符,如public、protected、private等2.Inner類中定義的test()方法可以直接訪問Outer類中的數(shù)據(jù),而不受訪問控制符的影響,如直接訪問Outer類中的私有屬性a3.定義了成員內(nèi)部類后,必須使用外部類對(duì)象來創(chuàng)建內(nèi)部類對(duì)象,而不能直接去new一個(gè)內(nèi)部類對(duì)象,即:內(nèi)部類 對(duì)象名=外部類對(duì)象名.new 內(nèi)部類();PS1.外部類是不能直接使用內(nèi)部類的成員和方法的2.如果外部類和內(nèi)部類具有相同的成員變量或方法,內(nèi)部類默認(rèn)訪問自己的成員變量或方法,如果要訪問外部類的成員變量,可以使用this 關(guān)鍵字。如package com.vb2;public class imooc {//外部類imooc int b=1;//外部類的成員屬性b public class inner{//內(nèi)部類innerint b=2;//內(nèi)部類的成員屬性bpublic void test() {//內(nèi)部類的test方法System.out.println("訪問外部類中的b:"+imooc.this.b);System.out.println("訪問內(nèi)部類中的b:"+b);}}public static void main(String[] args) {imooc o=new imooc();inner i=o.new inner();i.test();}

}

java中的靜態(tài)內(nèi)部類靜態(tài)內(nèi)部類是static修飾的內(nèi)部類,這種內(nèi)部類的特點(diǎn)是:1.靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員,但可以通過new 外部類().成員的方式訪問2.如果外部類的靜態(tài)成員與內(nèi)部類的成員相同,可以通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員;如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱不相同,則可以通過“成員名”直接調(diào)用外部類的靜態(tài)成員3.創(chuàng)建靜態(tài)內(nèi)部類的對(duì)象,不需要為外部類的對(duì)象,可以直接創(chuàng)建 內(nèi)部類 對(duì)象名=new 內(nèi)部類();java中的方法內(nèi)部類方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中,方法內(nèi)部類只在該方法的內(nèi)部可見,即只在該方法內(nèi)可以使用。PS:由于方法內(nèi)部類不能在外部類的方法以外的地方使用,因此方法內(nèi)部類不能使用訪問修飾符和static修飾符。 java中的繼承繼承是類與類的一種關(guān)系,是一種“is a”的關(guān)系PS:java中的繼承類是單向的繼承的好處:子類擁有父類的所有屬性和方法實(shí)現(xiàn)代碼復(fù)用3.語法規(guī)則:class 子類 extends 父類例:class Dog extends Animal{....}方法的重寫1.什么是方法的重寫:如果子類對(duì)繼承父類的方法不滿意,是可以重寫父類繼承的方法的,當(dāng)調(diào)用方法時(shí)會(huì)優(yōu)先調(diào)用子類的方法。2.語法規(guī)則:a.返回值類型b.方法名c.參數(shù)類型及個(gè)數(shù)都要與父類繼承的方法相同,才叫方法的重寫。 繼承的初始化順序1.初始化父類再初始化子類2.先執(zhí)行初始化對(duì)象中屬性,在執(zhí)行構(gòu)造方法中的初始化 final關(guān)鍵字使用final關(guān)鍵字做標(biāo)識(shí)有“最終的”含義final可以修飾類、方法、屬性和變量final修飾類,則該類不允許被繼承final修飾方法,則該方法不允許被覆蓋(重寫)final修飾屬性則該類的屬性不會(huì)進(jìn)行隱式的初始化(類的初始化屬性必須有值)或在構(gòu)造方法中賦值(但只能選其一)final修飾變量,則該變量的值只能賦一次值,即變?yōu)槌A縮uper關(guān)鍵字:在對(duì)象的內(nèi)部使用,可以代表父類對(duì)象1.訪問父類的屬性super.age2.訪問父類的方法super.eat()super的應(yīng)用子類的構(gòu)造的過程當(dāng)中必須調(diào)用其父類的構(gòu)造方法。如果子類的構(gòu)造方法中沒有顯示調(diào)用父類的構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類無參的構(gòu)造方法如果顯示的調(diào)用構(gòu)造方法,必須在子類的構(gòu)造方法的第一行。如果子類構(gòu)造方法中既沒有顯示調(diào)用父類的構(gòu)造方法,而父類中有沒有無參的構(gòu)造方法則編譯會(huì)報(bào)錯(cuò)。Object類Object類是所有類的父類,如果一個(gè)類沒有使用extends關(guān)鍵字明確標(biāo)識(shí)繼承另外一個(gè)類,那么這個(gè)類默認(rèn)繼承Object類。Object類中的方法,適合所有子類。1.toString()方法在Object類里面定義toString()方法的時(shí)候返回對(duì)象的哈希code碼(對(duì)象地址字符串)可以通過重寫toString()方法表示對(duì)象的屬性2.equals()方法比較的是對(duì)象的引用是否指向同一塊內(nèi)存地址。DOG dog=new DOG();一般情況下比較兩個(gè)對(duì)象時(shí)比較他的值是否一致,所以要進(jìn)行重寫多態(tài)對(duì)象的多種形態(tài)1.引用多態(tài)父類的引用指向本類的對(duì)象父類的引用指向子類的對(duì)象2.方法多態(tài)創(chuàng)建本類對(duì)象時(shí),調(diào)用的方法為本類方法創(chuàng)建子類對(duì)象時(shí),調(diào)用的方法為子類重寫的方法或者繼承的方法引用類型轉(zhuǎn)換1.向上類型轉(zhuǎn)換(隱式/自動(dòng)類型轉(zhuǎn)換),最小類型到大類型的轉(zhuǎn)換2.向下類型轉(zhuǎn)換(強(qiáng)制類型轉(zhuǎn)換),是大類型到小類型3.instanceof運(yùn)算符,來解決引用對(duì)象的類型,避免類型轉(zhuǎn)換的安全性問題抽象類1.語法定義抽象類前使用abstract關(guān)鍵字修飾,則該類為抽象類。2.應(yīng)用場(chǎng)景:a.在某些情況下,某個(gè)父類只是知道其子類應(yīng)該包含怎樣的方法,但是無法準(zhǔn)確知道這些子類如何實(shí)現(xiàn)這些方法。b.從多個(gè)具有相同特征的類中抽象出一個(gè)抽象類,以這個(gè)抽象類作為子類的模板,從而避免了子類設(shè)計(jì)的隨意性。3.作用:不關(guān)注子類的實(shí)現(xiàn)但是限制子類必須具有某些特征4.使用規(guī)則:a.abstract定義抽象類b.abstract定義抽象方法,只有聲明,不需要實(shí)現(xiàn)c.包含抽象方法的類是抽象類d.抽象類中可以包含普通的方法,也可以沒有抽象方法接口概念類是一種具體實(shí)現(xiàn)體,而接口定義了某一批類所需要遵守的規(guī)范,接口不關(guān)心這些類的內(nèi)部數(shù)據(jù),也不關(guān)心這些類里方法的實(shí)現(xiàn)細(xì)節(jié),它只規(guī)定這些類里必須提供某些方法。2.接口定義和類定義不同,定義接口不再使用class關(guān)鍵字,而是使用interface關(guān)鍵字。接口定義的基本語法:[修飾符] interface 接口名 [extends 父接口1,父接口2...]{零個(gè)到多個(gè)常量定義...零個(gè)到多個(gè)抽象方法的定義...}接口就是用來被繼承、被實(shí)現(xiàn)的、修飾符一般建議用publicPS:不能使用private和protected修飾接口3.接口定義常量:接口中的屬性是常量,即使定義時(shí)不添加public static final 修飾符,系統(tǒng)也會(huì)自動(dòng)加上。方法:接口中的方法只能是抽象方法,總是使用,即使定義時(shí)不添加public abstract修飾符,系統(tǒng)也會(huì)自動(dòng)加上。4.使用接口一個(gè)類可以實(shí)現(xiàn)一個(gè)或多個(gè)接口,實(shí)現(xiàn)接口使用implements關(guān)鍵字。java中一個(gè)類只能繼承一個(gè)父類,是不夠靈活的,通過實(shí)現(xiàn)多個(gè)接口可以做補(bǔ)充。繼承父類實(shí)現(xiàn)接口的語法為:[修飾符]class 類名 extends 父類 implements 接口1,接口2...{類體部分//如果繼承了抽象類,需要實(shí)現(xiàn)繼承的抽象方法;要實(shí)現(xiàn)接口中的抽象方法。} 如果要繼承父類,繼承父類必須在實(shí)現(xiàn)接口之前 使用接口:接口在使用過程當(dāng)中,還經(jīng)常與匿名內(nèi)部類配合使用匿名內(nèi)部類就是沒有名字的內(nèi)部類,多用于關(guān)注實(shí)現(xiàn)而不關(guān)注實(shí)現(xiàn)類的名稱語法格式:Interface i=new Interface(){public void method(){System.out.println("匿名內(nèi)部類實(shí)現(xiàn)接口的方式")

}
};

UML 1.UML概念Unied Modeling Language(UML)又統(tǒng)稱一建模語言或標(biāo)準(zhǔn)建模語言是一個(gè)支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言為軟件開發(fā)的所有階段提供模型化和可視圖支持 2.UML圖示UML2.2中一共定義了12種視圖 3.常用UML圖 用例圖(The Use Case Diagram)用例圖能夠以可視化的方式,表達(dá)系統(tǒng)如何滿足所收集的業(yè)務(wù)規(guī)則,以及特定的用戶需求等信息UML 3.常用UML圖序列圖(The Sequence Diagram)序列圖用于按照交互發(fā)生的一系列順序,顯示獨(dú)享之間的這些交互。類圖(The Class Diagram)UML類圖、業(yè)務(wù)邏輯和所有支持結(jié)構(gòu)一同被用于定義全部的代碼結(jié)構(gòu)。 4.UML建模工具Visio.Rational Rose\ PowerDesign三種建模工具應(yīng)用最廣綜合練習(xí)

一.項(xiàng)目背景介紹
根據(jù)所學(xué)知識(shí),編寫一個(gè)控制臺(tái)版的“答答租車系統(tǒng)”
功能:
1.展示所有可租車輛
2.選擇車型、租車量
3.展示租車清單,包含:總金額、總載貨量及其車型、總載人量及車型
二.項(xiàng)目分析
1.數(shù)據(jù)模型分析
2.業(yè)務(wù)模型分析
3.顯示和流程分析
數(shù)據(jù)模型分析
1.通過對(duì)現(xiàn)實(shí)世界的事與物主要特征的分析、抽象,為信息系統(tǒng)的實(shí)施提供數(shù)據(jù)存取的數(shù)據(jù)結(jié)構(gòu)以及相應(yīng)的約束。
2.數(shù)據(jù)結(jié)構(gòu)的組成:操作(方法)、屬性
業(yè)務(wù)模型分析
1.在設(shè)計(jì)應(yīng)用程序之前,應(yīng)該明確該應(yīng)用程序必須執(zhí)行那些任務(wù)。分析業(yè)務(wù)需求是應(yīng)用程序開發(fā)中最重要的步驟之一。
確定業(yè)務(wù)需求的目的在于創(chuàng)建一個(gè)能同時(shí)滿足零售商和消費(fèi)者需要的解決方案。
2.答答租車系統(tǒng)中,只需要考慮消費(fèi)者需求就可以了。
顯示和流程分析
1.顯示:用戶可以看到的信息提示界面。
2.流程:顯示信息的執(zhí)行過程、步驟。
3.答答租車系統(tǒng)中,要以命令行的方式顯示提示信息和輸出結(jié)果信息,要考慮其樣式,用戶輸入的數(shù)據(jù)不同,信息該如何提示、如何處理并顯示出結(jié)果,這部分知道囊括了顯示與流程的內(nèi)容。
例:請(qǐng)選擇車輛->請(qǐng)輸入序號(hào)->輸出總金額…

this.x(成員變量)=x(局部變量)private static//修飾為靜態(tài)私有屬性,修飾后次屬性只能被此類中的方法中使用(方法可以是靜態(tài)方法也可以是非靜態(tài)方法)異常簡介異常處理的作用java異常體系結(jié)構(gòu)簡介 →Error(如果Error出現(xiàn)則表明程序崩潰了) Throwbale →空指針異常(NullPointerException)處理異常 →Exception→非檢查異常(RuntimeException)→數(shù)組下標(biāo)越界異常(ArrayIndexOutOf)try-catch以及try-catch-finally →類型轉(zhuǎn)換異常(ClassCastException)拋出異常 →算術(shù)異常(ArithmetiException)自定義異常異常鏈 →檢查異常→文件異常(IOException)→SQL異常(SQLException)try-catch語法 try{ //一些會(huì)拋出異常的方法}catch (Exception e){//處理該異常的代碼塊}catch (Exception2 e){//處理Exception2的代碼塊}...(n個(gè)catch塊)...{ }java中的異常拋出throwthrows--聲明將要拋出幾何類型的異常(聲明)public void 方法名(參數(shù)列表)throws 異常列表{//調(diào)用會(huì)拋出異常的方法或者:throw new Exception();}自定義異常java中的異常鏈實(shí)際應(yīng)用中的經(jīng)驗(yàn)與總結(jié)1.處理運(yùn)行異常時(shí),采用邏輯去合理規(guī)避同時(shí)輔助try-catch處理2.在多重catch塊后面,可以加一個(gè)catch(Exception)來處理可能會(huì)被遺漏的異常3.對(duì)于不確定的代碼,可以加上Try-catch,處理潛在的異常4.盡量去處理異常,切忌只是簡單的調(diào)用printStackTrace()去打印輸出5.具體如何處理異常,要根據(jù)不同的業(yè)務(wù)需求和異常類型去決定6.盡量添加finally語句塊去釋放占用的資源String類的常用方法:方法int length() 返回當(dāng)前字符串的長度int indexOf(int ch) 查找ch字符在該字符串中第一次出現(xiàn)的位置int indexOf(String str) 查找str子字符串在該字符串中第一次出現(xiàn)的位置int lastIndexOf(int ch) 查找ch字符在該字符串中最后一次出現(xiàn)的位置int lastIndexOf(String str) 查找str子字符串在該字符串中最后一次出現(xiàn)的位置String substring(int beginIndex) 獲取從beginIndex位置開始到結(jié)束的子字符串String substring(int beginIndex,int endIndex) 獲取從beginIndex位置開始到endIndex位置的子字符串String trim() 返回去除了前后空格的字符串boolean equals(Object obj) 將該字符串與指定對(duì)象比較,返回true或falseString toLowerCase() 將字符串轉(zhuǎn)換為小寫String toUpperCase() 將字符串轉(zhuǎn)換為大寫char charAt(int index) 獲取字符串中指定位置的字符String[] split(String regex,int limit) 將字符串分割為子字符串,返回字符串?dāng)?shù)組byte[] getBytes() 將該字符串轉(zhuǎn)換為byte數(shù)組String i="piano";String i2=new String("piano");他們區(qū)別是內(nèi)存區(qū)將會(huì)出現(xiàn)兩個(gè)piano對(duì)象并且由i和i2分別控制。“==”和equals()有什么區(qū)別呢?==:判斷兩個(gè)字符串在內(nèi)存中首地址是否相同,即判斷是否是同一個(gè)字符串對(duì)象equals():比較存儲(chǔ)在兩個(gè)字符串對(duì)象中的內(nèi)容是否一致PS:字節(jié)是計(jì)算機(jī)存儲(chǔ)信息的基本單位,1和字節(jié)等于8位,gbk編碼中1個(gè)漢字字符存儲(chǔ)需要2個(gè)字節(jié),1個(gè)英文字符存儲(chǔ)需要1個(gè)字節(jié)。所以我們看到上面的程序運(yùn)行結(jié)果中,每個(gè)漢字對(duì)應(yīng)兩個(gè)字節(jié)值,如“學(xué)”對(duì)應(yīng)“-47 -89”,而英文字母“j”對(duì)應(yīng)“74”。同時(shí),我們還發(fā)現(xiàn)漢字對(duì)應(yīng)的字節(jié)值為負(fù)數(shù),原因在于每個(gè)字是8位,最大值不能超過127,而漢字轉(zhuǎn)換為字節(jié)后超過127,如果超過就會(huì)溢出,以負(fù)數(shù)的形式顯示。認(rèn)識(shí)java中的StringBuilder類在java中,除了可以使用String類來存儲(chǔ)字符串,還可以使用StringBuilder類或StringBuffer類存儲(chǔ)字符串,那么他們之間有什么區(qū)別呢?String類具有是不可變性。如String str="hello";System.out.println(str+"world");System.out.println(str);java中StringBuilder類的常用方法StringBuilder類提供了很多方法來操作字符串方法 說明 StringBuilder append(參數(shù)) 追加內(nèi)容到當(dāng)前StringBuilder對(duì)象的末尾StringBuilder insert(位置,參數(shù)) 將內(nèi)容插入到StringBuilder對(duì)象的指定位置String toString() 將StringBuilder對(duì)象轉(zhuǎn)換為String對(duì)象int length() 獲取字符串的長度

java中基本類型和包裝類之間的轉(zhuǎn)換
Integer a=new Integer(3);
int b=a+5;

裝箱:把基本類型轉(zhuǎn)換成包裝類,使其具有對(duì)象的性質(zhì),又可分為手動(dòng)裝箱和自動(dòng)裝箱
int i=10;
Integer x=new Integer(i);
Integer y=i;
拆箱:和裝箱相反,把包裝類對(duì)象轉(zhuǎn)換成基本類型的值,又可分為手動(dòng)拆箱和自動(dòng)拆箱
Integer j=new Integer(8);
int m=j.intValue();
int n=j;

java中基本類型和字符串之間的轉(zhuǎn)換
在程序開發(fā)中,我們經(jīng)常需要在基本數(shù)據(jù)類型和字符串之間進(jìn)行轉(zhuǎn)換。
其中,基本類型轉(zhuǎn)換為字符串有三種方法:
1.使用包裝類的toString()方法
2.使用sTRING類的valueOf()方法
3.用一個(gè)空字符串加上基本數(shù)據(jù)類型,得到的就是基本類型數(shù)據(jù)對(duì)應(yīng)的字符串
將字符串轉(zhuǎn)換成基本類型有兩種方法;
1.調(diào)用包裝類的parseXxx靜態(tài)方法
2.調(diào)用包裝類valueOf()方法轉(zhuǎn)換為基本類型的包裝類,會(huì)自動(dòng)拆箱

使用Date和SimpleDateFormat類表示時(shí)間
在程序開發(fā)中,經(jīng)常需要處理日期和時(shí)間的相關(guān)數(shù)據(jù),此時(shí)我們可以使用java.util包中的Date類。這個(gè)類最主要的作用就是獲取當(dāng)前的時(shí)間,我們來看下Date類的使用:
Calendar類的應(yīng)用
Date類最主要的作用就是獲得當(dāng)前時(shí)間,同時(shí)這個(gè)類里面也具有設(shè)置時(shí)間以及一些其他的功能,但是由于本身設(shè)計(jì)的問題,這些方法卻遭到眾多批評(píng),不建議使用,更推薦使用Calendar類進(jìn)行時(shí)間和日期的處理。

java.util.Calendar類是一個(gè)抽象類,可以通過調(diào)用getInstance()靜態(tài)方法獲取一個(gè)Calendar對(duì)象,此對(duì)象已由當(dāng)前日期時(shí)間初始化,即魔人代表當(dāng)前時(shí)間,如Calendar c=Calendar.getInstance();
使用Math類操作數(shù)據(jù)
Math類位于java.lang包中,包含用于執(zhí)行基本數(shù)學(xué)運(yùn)算的方法,Math類的所有方法都是靜態(tài)方法,所以使用該類中的方法時(shí),可以直接使用類名.方法名,如:Math.round();
常用的方法:
返回值 方法名 解釋
long round() 返回四舍五入的整數(shù)
double floor() 返回小于參數(shù)的最大整數(shù)
double cell() 返回大于參數(shù)的最小整數(shù)
double random() 返回[0,1]之間的隨機(jī)數(shù)浮點(diǎn)數(shù)

集合框架 集合概念java中的集合類:是一種工具類里面是具有相同屬性的內(nèi)容 集合的作用在類的內(nèi)部,對(duì)數(shù)據(jù)進(jìn)行組織;簡單而快速的搜索大數(shù)量的條目;有的集合接口,提供了一系列排列有序的元素,并且可以在序列中間快速的插入或者刪除有關(guān)元素有的集合接口,提供了映射關(guān)系,可以通過關(guān)鍵字(key)去快捷查找對(duì)應(yīng)的唯一對(duì)象,而這個(gè)關(guān)鍵字可以是任意類型。 與數(shù)組的對(duì)比數(shù)組的長度固定,集合長度可變數(shù)組只能通過下標(biāo)訪問元素,類型固定,而有的集合可以通過任意類型查找所映射的具體對(duì)象 java集合框架的框架Collection map list Queue Ste HashMap <Key,Value>Entry(鍵值對(duì))

LinkedList
ArrayList LinkedList HashSet

Collection接口,子接口以及實(shí)現(xiàn)類
Collection接口
List接口及其實(shí)現(xiàn)類—ArrayList
List是元素有序并且可以重復(fù)的集合,被稱為序列
List可以精確的控制每個(gè)元素的插入位置,或刪除某個(gè)位置元素
ArrayList–數(shù)組序列,是List的一個(gè)重要實(shí)現(xiàn)類
ArrayList底層是由數(shù)組來實(shí)現(xiàn)的
方法的重寫:有繼承關(guān)系的子類中
方法名相同,參數(shù)列表相同,{參數(shù)順序,個(gè)數(shù),類型,方法返回值相同}
與重寫方法的參數(shù)名無關(guān)
訪問修飾符的限定范圍大于等于父類方法。
方法的重載:在同一個(gè)類中
方法名相同
參數(shù)個(gè)數(shù),順序,類型不同
返回值類型,訪問修飾符任意

List接口排序用
Collections.sort();方法進(jìn)行排序

數(shù)組排序 Arrays.sort()
集合排序 Collections.sort();
Comparator接口中包含一個(gè) int compare(T o1,T o2)方法的 用來比較排序的兩個(gè)參數(shù)
如果o1<o2 返回負(fù)整數(shù)
如果o1==o2;返回0;
如果o1>o2,返回正整數(shù)
還包含一個(gè) boolean equals(Obkect obj)方法 指示某個(gè)其他對(duì)象是否 “等于” 此 Comparator
此方法可以被Object類中的equals方法覆蓋,不必重寫

public class NameComparator implements Comparator<Cat> { @Override public int compare(Cat o1, Cat o2) {int n=o1.getName().compareTo(o2.getName());return n; }for(Cat n:list) {System.out.println(n); } System.out.println("*********************"); Collections.sort(list, new NameComparator()); for(Cat n:list) {System.out.println(n); }}對(duì)集合中的某一個(gè)屬性進(jìn)行排序首先定義一個(gè)類實(shí)現(xiàn)(implements)接口 Comparator然后進(jìn)行重寫 compare方法進(jìn)行比較 public int compare(Cat o1, Cat o2) {return o2.getMonth()-o1.getMonth(); }compare默認(rèn)返回是int類型的值,當(dāng)類型不一致時(shí)直接進(jìn)行加減運(yùn)算就可以了

Comparable java.lang包中的
此接口強(qiáng)行對(duì)實(shí)現(xiàn)它的每個(gè)類的對(duì)象進(jìn)行整體排序
這種排序被稱為類的自然排序,類的 compareTo方法 被稱為它的自然比較方法
對(duì)于集合,通過調(diào)用Collections.sort方法進(jìn)行排序
對(duì)于數(shù)組,通過調(diào)用Arrays.sort方法進(jìn)行排序.
int compareTo(T o)方法
該對(duì)象小于,等于或大于指定對(duì)象,則分別返回負(fù)整數(shù),零或正整數(shù).

Comparable和Comparator的區(qū)別
排序所用的的方法 collections 前者 一個(gè)參數(shù) 后者兩個(gè)參數(shù)
重寫compareTo方法前者直接在定義的類中重寫并與之當(dāng)前的屬性進(jìn)行比較
后者 則單獨(dú)創(chuàng)建一個(gè)類并重寫該方法在排序的參數(shù)中實(shí)例化該類對(duì)象

package com.demo25.sort;

public class Goods implements Comparable{
private String id;//商品編號(hào)
private String name;//商品名稱
private double price;//商品價(jià)格

//構(gòu)造方法public Goods(String id, String name, double price) {super();this.id = id;this.name = name;this.price = price;}//getter/setter方法public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Override public String toString() {return "商品編號(hào):"+id+",商品名稱:"+name+",商品價(jià)格:"+price;} @Override public int compareTo(Goods o) {int n=(int)(o.getPrice()-this.getPrice());return n; }}File類什么是文件?文件可認(rèn)為是相關(guān)記錄或放在一起的數(shù)據(jù)的集合在java中,使用java.io.File類對(duì)文件進(jìn)行操作.字節(jié)流字節(jié)輸入流 InputStream字節(jié)輸出流 OutputStreamFileInputStream從文件系統(tǒng)中的某個(gè)文件中獲得輸入字節(jié)try {FileInputStream fis=new FileInputStream("imooc.txt");int n=0;while((n=fis.read())!=-1) {System.out.println((char)n);}fis.close();讀取指定文件的數(shù)據(jù)

public class FileInputStreamDemo {

public static void main(String[] args) {FileInputStream fis;try {fis = new FileInputStream("imooc.txt");byte[] b=new byte[100];fis.read(b,0,5 );System.out.println(new String(b));} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

通過數(shù)組形式進(jìn)行輸出文件內(nèi)容

緩沖輸入流 BufferedInputStream
緩沖輸出流 BufferedOutputStream

字符輸入流 Reader
字符數(shù)出流 Writer

字節(jié)字符轉(zhuǎn)換流 InputStreamReader
OutputStreamWrite

對(duì)象序列化
步驟:
創(chuàng)建一個(gè)類,繼承Serializable接口
創(chuàng)建對(duì)象
將對(duì)象寫入文件
從文件讀取對(duì)象信息

對(duì)象輸入流 ObjectInputStream;
對(duì)象輸出流 ObjectOutputStream;

Library

Lorem Ipsum is simply dummy text of the printing and typesetting industy

Lorem Ipsum has been the industry’s tsandard dummy text ever since the 1500s,When an unknown printer took a galley of type and scrambled it to make a tyle specimen book.

element.getAttribute//獲取屬性
element.setAttribute//添加或者修改屬性
element.src//修改圖片名稱
element.href//修改網(wǎng)址

DOM事件不同寫法
1)

請(qǐng)點(diǎn)擊該文本


2)Element.οnclick=function(){displayDate()};
3)Element.addEventListener(“click”,function(){ })

DOM節(jié)點(diǎn)
document.createElement("");新增一個(gè)元素標(biāo)簽
document.createTextNode("")新增的內(nèi)容
parent.appendChild(child);//把子類的元素插入到父類中
parent.removeChild(child);//移除子類中的元素

window的方法
window.open()//打開新窗口 //四個(gè)參數(shù)第一個(gè)打開的頁面 第二個(gè)窗口的名字 第三個(gè)寬 第四個(gè)高
window.close()//關(guān)閉當(dāng)前窗口
window.moveTo()//移動(dòng)當(dāng)前窗口
window.resizeTo()//調(diào)整當(dāng)前窗口的尺寸

window.screen
screen.availWidth//可用的屏幕寬度
screen.availHeight//可用的屏幕高度

window.inner
window.innerWidth//當(dāng)前文檔可顯示的寬度
window.innerHeight//當(dāng)前文檔可顯示的高度

window.Location
location.hostname 返回web主機(jī)的域名
location.pathname返回當(dāng)前頁面的路徑和文件名
location.protocol返回所使用的web協(xié)議(http://或https//)
location.href 返回(當(dāng)前頁面的)整個(gè)URL

window.aler(’’)在網(wǎng)頁中輸出警告框
document.write(’’)輸出內(nèi)容到網(wǎng)頁中
document.getElementById(’’).innerHTML輸出內(nèi)容到html元素中
console.log(’’)輸出元素到控制臺(tái)

prompt() 方法用于顯示可提示用戶進(jìn)行輸入的對(duì)話框。有確定和取消選項(xiàng) 確定返回true 反之false
confirm(“文本”)用于提示用戶需要輸入的值并且創(chuàng)建一個(gè)接受用戶輸入的文本框

xml
1.標(biāo)簽名要有意義
2.建議使用,小寫字母,單詞之間使用"-"分割
3.建議多級(jí)標(biāo)簽之間不要存在重名的情況

適當(dāng)?shù)淖⑨屌c縮進(jìn)
適當(dāng)?shù)淖⑨屌c縮進(jìn)可以讓XML文檔更容易閱讀

合理使用屬性
1.標(biāo)簽屬性用于描述標(biāo)簽不可或缺的信息
2.對(duì)標(biāo)簽分組或者標(biāo)簽設(shè)置id時(shí)常用屬性表示

xml支持五中實(shí)體引用
CDATA標(biāo)簽

<![CDATA[ 開始]]}> 有序的子元素 1.在xml多層嵌套的子元素中,標(biāo)簽前后順序應(yīng)保持一致 xml標(biāo)簽書寫規(guī)則 xml語義約束 1.xml文檔結(jié)構(gòu)正確,但可能不是有效的。 例如,員工檔案XML中絕對(duì)不允許出現(xiàn)“植物品種”標(biāo)簽。XML語義約束就是用于規(guī)定XML文檔中允許出現(xiàn)哪些元素 XML語義約束有兩種定義方式:DTD與XML Schemma. DTD(Document Type Definition,文檔類型定義)是一種簡單易用的語義約束方式 DTD文件的擴(kuò)展名為.dtd. hr.dtd 最少出現(xiàn)一個(gè)employee子節(jié)點(diǎn) <!ELEMENT hr (employee+)> 可能出現(xiàn)0..n個(gè)employee子節(jié)點(diǎn) <!ELEMENT hr (employee*)> 最多出現(xiàn)1個(gè)employee子節(jié)點(diǎn) <!ELEMENT hr (employee?)> <!ELEMENT employee (name,age,salary,department)> <!ATTLIST employee no CDATA""> <!ELEMENT name (#PCDATA)> DTD定義節(jié)點(diǎn) 1.利用DTD中的<!ELEMENT>標(biāo)簽,我們可以定義XML文檔中允許出現(xiàn)的節(jié)點(diǎn)及數(shù)量 XML引用DTD文件 1.在XML中使用標(biāo)簽來引用DTD文件. XML Schema DOM文檔對(duì)象模型 1.DOM(Document Object Model)定義了訪問和操作XML文檔的標(biāo)準(zhǔn)方法,DOM把XML 文檔作為樹結(jié)構(gòu)來查看,能夠通過DOM樹來讀寫所有元素。 Dom4j 1.Dom4j是一個(gè)易用的、開源的庫,用于解析XML。它應(yīng)用于Java平臺(tái),具有性能優(yōu)異 功能強(qiáng)大和極其易使用的特點(diǎn) 2.Dom4j將XML視為Document對(duì)象。 3.XML標(biāo)簽被Dom4j定義為Element對(duì)象 XPath基本表達(dá)式 1.最常用的基本表達(dá)式 nodename 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn) / 從根節(jié)點(diǎn)選取 // 從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不去考慮他們的位置。 . 選取當(dāng)前節(jié)點(diǎn) .. 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn) @ 選取屬性 XPath基本表達(dá)式案例 bookstore 選取bookstore元素的所有子節(jié)點(diǎn) /bookstore 選取根元素 bookstore PS:注釋:假如路徑起始與正斜杠(/),則此路徑始終代表到某元素的絕對(duì)路徑! bookstore/book 選取屬于bookstore 的子元素的所有book元素。 //book 選取所有book子元素,而不管他們?cè)谖臋n中的位置. bookstore//book 選擇屬于bookstore元素的后代的所有book元素,而不管他們位于 bookstore之下的什么位置 //@lang選取名為lang的所有屬性 /bookstore/book[1] 選取屬于bookstore子元素的第一個(gè)book元素 /bookstore/book[last()] 選取屬于bookstore子元素的最后一個(gè)book元素 /bookstore/book[last()-1] 選取屬于bookstore子元素的倒數(shù)第二個(gè)元素 /bookstore/book[position()<3] 選取最前面的兩個(gè)屬于bookstore元素的book元素 //title[@lang] 選取所有擁有名為lang的屬性的title元素 //title[@lang='eng'] 選取所有title元素,且這些元素?fù)碛兄禐閑ng的lang屬性 /bookstore/book[price>35.00] 選取bookstore元素的所有book元素,其中的price元素的值須大于35.00. /bookstore/book[price>35.00]/title 選取bookstore元素中的book元素的所有title元素,其中的price元素的值須大于35.00 Jaxen 1.Jaxen是一個(gè)Java編寫的開源的XPath庫。這是適應(yīng)多種不同對(duì)象的類型,包括DOM,XOM,dom4j和JDOM 2.Dom4j底層依賴Jaxen實(shí)現(xiàn)XPath查詢 3.Jaxen下載地址:jaxen.codehaus.org BS 請(qǐng)求與響應(yīng)成對(duì)出現(xiàn) 從瀏覽器發(fā)出送給服務(wù)器的數(shù)據(jù)包稱為請(qǐng)求 (Request) 與 (Response) 從服務(wù)器返回瀏覽器的結(jié)果稱為響應(yīng) J2EE 1.J2EE(Java 2 Platform Enterprise Edition)是指"Java 2企業(yè)版" 2.開發(fā)BS(Web)應(yīng)用程序就是j2EE最核心的功能 3.J2EE由13個(gè)功能模塊組成 J2EE中13個(gè)功能模塊 Servlet JSP JDBC XML web服務(wù)器小程序 服務(wù)器頁面 數(shù)據(jù)庫交互模塊 XML交互模塊 EJB RMI JNDI JMS 企業(yè)級(jí)Java Bean 遠(yuǎn)程調(diào)用 目錄服務(wù) 消息服務(wù) JTA JavaMail JAF CORBA 事務(wù)管理 發(fā)送/接收Email 安全框架 CORBA集成 JTS CORBA事務(wù)監(jiān)控 Apache Tomcat 1.Tomcat是Apache軟件基金會(huì)旗下一款免費(fèi)的開放源代碼的Web應(yīng)用服務(wù)器程序 J2EE與Tomcat的關(guān)系 1.J2EE是一組技術(shù)規(guī)范與指南,具體實(shí)現(xiàn)由軟件廠商決定 2.Tomcat是J2EE Web(Servlet與JSP)標(biāo)準(zhǔn)的實(shí)現(xiàn)著 3.J2SE是J2EE運(yùn)行的基石,運(yùn)行Tomcat離不開J2SE Servlet 1.Servlet(Server Applet)服務(wù)器小程序,主要功能用于生成動(dòng)態(tài)Web內(nèi)容 2.Servlet是J2EE最重要的組成部分 安裝Tomcat 1.安裝JDK 8 2.安裝Tomcat 8.x 標(biāo)準(zhǔn)Java Web工程結(jié)構(gòu) tomcat安裝目錄/webapps/ Tomcat應(yīng)用根目錄 /web應(yīng)用目錄/ Java Web應(yīng)用目錄 /web應(yīng)用目錄/index.html|.jsp 默認(rèn)首頁 /WEB-INF WEB應(yīng)用的安全目錄,用于存放配置文件 /WEB-INF/web.xml web.xml是"部署描述文件",是該Web項(xiàng)目核心配置文件 /WEB-INF/classes 存放編譯后的classes文件 /WEB-INF/lib 用于存放web應(yīng)用依賴的jar文件 /META-INF/MANIFEST.MF 包含Web應(yīng)用的版本等信息 Servlet開發(fā)步驟 1.創(chuàng)建Servlet類,繼承HttpServlet 2.重寫servlet方法,編寫程序代碼 3.配置web.xml,綁定URL Servlet訪問方法 1.http://IP地址:端口/context-path/url-mapping 2.遠(yuǎn)程訪問使用IP地址,本地訪問localhost(127.0.0.1) context-path成為"上下文路徑",默認(rèn)為工程名 請(qǐng)求參數(shù) 1.請(qǐng)求參數(shù)是指瀏覽器通過請(qǐng)求向Tomcat提交的數(shù)據(jù) 2.請(qǐng)求參數(shù)通過是指用戶輸入的數(shù)據(jù),待Servlet進(jìn)行處理 3.參數(shù)名1=值&參數(shù)名2=值2&參數(shù)名n=... Servlet接收請(qǐng)求參數(shù) 1.request.getParameter() 接收單個(gè)參數(shù) 2.request.getParameterValues() 接收多個(gè)同名參數(shù) Servlet生命周期 1.裝載 - web.xml 2.創(chuàng)建 - 構(gòu)造函數(shù) 3.初始化 - init() 4.提供服務(wù) - service() 5.銷毀 - destory() 使用注釋簡化配置 啟動(dòng)時(shí)加載Servlet 1.web.xml使用設(shè)置啟動(dòng)加載 2.0-9999 0最先被加載 使用注解時(shí)需要在loadOnStartup中來設(shè)置加載順序 還需要設(shè)置urlPatterns 才能生效 3.啟動(dòng)時(shí)加載在工作中常用于系統(tǒng)的預(yù)處理 JSP介紹 1.JSP全稱是(Java Server Pages),Java服務(wù)器頁面 2.JSP是J2EE功能模塊,由Web服務(wù)器執(zhí)行 3.JSP的作用就是降低動(dòng)態(tài)網(wǎng)頁開發(fā)難度 JSP的特點(diǎn) 1.JSP使用簡單,短時(shí)間學(xué)習(xí)便可以上手 2.JSP可將Java代碼與HTML分離,降低開發(fā)難度 3.JSP的本質(zhì)就是Servlet JSP基本語法 JSP語法十分簡單,按功能可分為以下四種 1.JSP代碼塊 2.JSP聲明構(gòu)造快 3.JSP輸出指定 4.JSP處理指令 JSP代碼塊 1.JSP代碼塊用于在JSP中嵌入Java代碼 2.JSP代碼塊語法:<% java代碼 %> JSP聲明代碼塊 1.JSP聲明構(gòu)造塊用于聲明變量或方法 2.JSP聲明構(gòu)造塊語法:<%!聲明語句%> 3.例如:<%! public int add(int a,int b){return a+b;}%> JSP輸出指定 1.JSP輸出指令用于在JSP頁面中顯示Java代碼執(zhí)行結(jié)果 2.JSP輸出指令語法:<%=java代碼%> 例如:<%=" " + name + "" %> JSP處理指定 1.JSP處理指定用于提供JSP執(zhí)行過程中的輔助信息 2.JSP處理指令語法:<%@ jsp指令 %> 例如: <%@ page import="java.util.*" %> JSP常用處理指令 1.<%@ page %>定義當(dāng)前JSP頁面全局設(shè)置 2.<%@ include %>將其他JSP頁面與當(dāng)前JSP頁面合并 3. <%@ taglib %>引入JSP標(biāo)簽庫 JSP注釋的區(qū)別 1. <%--注釋--%> JSP注釋,被注釋語句不做任何處理 2.// , /*..*/ 用于注釋<% %>java代碼,被注釋代碼不執(zhí)行 3, HTML注釋,被注釋的語句不會(huì)被瀏覽器解釋 JSP頁面重用 HTTP請(qǐng)求結(jié)構(gòu) 1.HTTP請(qǐng)求包含三部分:請(qǐng)求行、請(qǐng)求頭、請(qǐng)求體 巧用請(qǐng)求頭開發(fā)多端應(yīng)用 ContentType的作用 1.ContentType決定瀏覽器采用何種方式對(duì)響應(yīng)體進(jìn)行處理 MIME 類型 描述 text/plain 純文本 text/html HTML文檔 text/xml XML文檔 application/x-msdownload 需要下載的資源 image/jpeg 圖片資源 image/gif image/... 請(qǐng)求轉(zhuǎn)發(fā) 1.請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器跳轉(zhuǎn),只會(huì)產(chǎn)生一次請(qǐng)求 響應(yīng)重定向 1.重定向則是瀏覽器端跳轉(zhuǎn),會(huì)產(chǎn)生兩次請(qǐng)求 2.響應(yīng)重點(diǎn)向語句是:response.sendRedirct(); 設(shè)置請(qǐng)求自定義屬性 1.請(qǐng)求允許創(chuàng)建自定義屬性 2.設(shè)置請(qǐng)求屬性:request.setAttribute(屬性名,屬性值) 3.獲取請(qǐng)求睡醒:Object attr = request.getAttribute(屬性名) 瀏覽器Cookie 1.Cookie 是瀏覽器保存在本地的文本內(nèi)容 2.Cookie常用于保存登錄狀態(tài),用戶資料等小文本 3.Cookie具有時(shí)效性,Cookie內(nèi)容會(huì)伴隨請(qǐng)求發(fā)送給Tomcat Session-用戶對(duì)話 1.Session(用戶對(duì)話) 用于保存與"瀏覽器窗口" 對(duì)應(yīng)的數(shù)據(jù) 2.Session的數(shù)據(jù)存儲(chǔ)在Tomcat服務(wù)器的內(nèi)存中,具有時(shí)效性 3.Session通過瀏覽器Cookie的SessionId值提取用戶數(shù)據(jù) ServletContext 1.ServletContext(Servlet上下文對(duì)象),是Web應(yīng)用全局對(duì)象 1.HttpServletRequest-請(qǐng)求對(duì)象 2.HttpSession-用戶會(huì)話對(duì)象 3.ServletContext-web應(yīng)用全局對(duì)象 Web應(yīng)用的中文亂碼問題 1.Tomcat默認(rèn)使用字符集ISO-8859-1,屬于西歐字符集 2.解決問題的核心思路是將ISO-8859-1轉(zhuǎn)換成UTF-8 3.Servlet中請(qǐng)求與響應(yīng)都需要設(shè)置UTF-8字符集 web.xml常用配置 1.修改web應(yīng)用默認(rèn)首頁 2.Servlet通配符映射及初始化參數(shù) 3.設(shè)置404,500等狀態(tài)碼默認(rèn) JSP九大內(nèi)置對(duì)象 內(nèi)置對(duì)象 描述 request 請(qǐng)求對(duì)象-HttpServletRequest response 響應(yīng)對(duì)象-HttpServletResponse session 用戶會(huì)話-HttpSession application 應(yīng)用全局對(duì)象-ServletContext out 輸出對(duì)象-PrintWriter page 當(dāng)前頁面對(duì)象-this pageContext 頁面上下文對(duì)象-PageContext config 應(yīng)用配置對(duì)象-ServletContext exception 應(yīng)用異常對(duì)象-Throwable Java Web打包與發(fā)布 1.Java Web應(yīng)用采用war包進(jìn)行發(fā)布 2.發(fā)布路徑為:{TOCAT_HOME}/webapps 3.Edipse支持war包導(dǎo)入 JSTL與EL表達(dá)式 EL表達(dá)式 1.EL(Expression Language)表達(dá)式語言,用于簡化JSP的輸出 2.EL表達(dá)式的基本語法:$(表達(dá)式) 3.示例:

學(xué)生姓名:$(student.name)

作用域?qū)ο?EL表達(dá)式內(nèi)置四種作用域?qū)ο?忽略書寫作用域?qū)ο髸r(shí),el則按作用域從小到大一次嘗試獲取 作用域?qū)ο?描述 pageScope 從當(dāng)前頁面取值 requestScope 從當(dāng)前請(qǐng)求中獲取屬性值 sessionScope 從當(dāng)前會(huì)話中獲取屬性值 applicationScope 從當(dāng)前應(yīng)用獲取全局屬性值 EL表達(dá)式輸出 1.語法 ${[作用域.]屬性名[.子屬性]} 2.EL表達(dá)式支持將運(yùn)算結(jié)果進(jìn)行輸出 3.EL支持絕大多數(shù)對(duì)象輸出,本質(zhì)是執(zhí)行toString()方法 EL輸出參數(shù)值 1.EL表達(dá)式內(nèi)置param對(duì)象來簡化參數(shù)的輸出 2.語法:${param.參數(shù)名} JSTL標(biāo)簽庫 1.JSTL(JSP Standard Tag Libray)JSP標(biāo)準(zhǔn)標(biāo)簽庫 2.JSTL用于簡化JSP開發(fā),提高代碼的可讀性與可維護(hù)性 3.JSTL由SUN(Oracle)定義規(guī)范,由Apache Tomcat團(tuán)隊(duì)實(shí)現(xiàn) JSTL的標(biāo)簽庫種類 1.JSTL按功能劃分可分為五類標(biāo)簽庫 類別 核心標(biāo)簽庫-core 格式化輸出標(biāo)簽庫-fmt SQL操作標(biāo)簽庫-sql XML操作標(biāo)簽庫-xml 函數(shù)標(biāo)簽庫-functions 引用JSTL核心庫 1.核心標(biāo)簽庫(Core)是JSTL最重要的標(biāo)簽庫,提供了JSTL的基礎(chǔ)功能 2.<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3.JSTL核心標(biāo)簽庫在taglibs-standard-impl.jar由META-INF/c.tld定義 判斷標(biāo)簽 1.JSTL核心庫提供了兩組判斷標(biāo)簽 2.-單分支判斷 3.、、-多分支判斷 遍歷集合 1.標(biāo)簽用于遍歷集合{Collection}中的每一個(gè)對(duì)象 第${idx.index+1}位
姓名:${p.name} 性別:${p.sex} 年齡:${p.age} fmt格式化標(biāo)簽庫 1.fmt格式化標(biāo)簽庫 URI:http://java.sun.com/jsp/jstl/fmt 2.格式化日期標(biāo)簽 3.格式化數(shù)字標(biāo)簽 web注冊(cè)登錄案例 MVC設(shè)計(jì)模式 Web案例開發(fā) MVC的概述 SUN公司推出JSP技術(shù)后,同時(shí)也推薦了兩個(gè)web應(yīng)用程序的開發(fā)模式,一種是JSP+JavaBean模式——簡單程序開發(fā),一種是Servlet+JSP+JavaBean模式 Servlet + JSP +JavaBean(MVC)——>復(fù)雜web程序 丨 丨 丨 處理用戶 數(shù)據(jù)顯示 數(shù)據(jù)封裝 請(qǐng)求 web開發(fā)模式 Servlet Servlet缺陷: 丨 1.需要配置 丨 2.顯示HTML元素的時(shí)候很復(fù)雜 丨 丨 JSP JSP缺陷: 丨 1.封裝和處理數(shù)據(jù)麻煩 丨 丨 JSP+JavaBean JSP+JavaBean模式優(yōu)點(diǎn) 1.JSP顯示數(shù)據(jù) 2.JavaBean封裝和處理數(shù)據(jù) Model1:使用JSP+JavaBean模式開發(fā) Servlet 丨 丨 丨 丨 JSP Servlet+JSP+JavaBean模式優(yōu)點(diǎn): 丨 1.使用Servlet處理用戶的請(qǐng)求 丨 2.JSP顯示數(shù)據(jù) 丨 3.JavaBean封裝和處理數(shù)據(jù) JSP+JavaBean 丨 丨 丨 Servlet+JSP+JavaBean Model2:使用 Servlet+JSP+JavaBean模式開發(fā)稱為MVC模式 M:Model模型層——JavaBean V:View視圖層——JSP C:Controller控制層——Servlet 用戶的請(qǐng)求都提交到Servlet(C),由C統(tǒng)一調(diào)度JavaBean(M)封裝和處理數(shù)據(jù), 由JSP(V)進(jìn)行數(shù)據(jù)顯示 模式一 應(yīng)用了Java Web開發(fā)中的兩種技術(shù) 1.JSP完成邏輯上的處理很顯示 2.JavaBean封裝數(shù)據(jù),處理數(shù)據(jù) 瀏覽器 request(請(qǐng)求) JSP 瀏覽器 response(響應(yīng)) 丨 JavaBeans (Web服務(wù)器) 模式二 1.Model2分為三部分 1.Servlet控制顯示那個(gè)JSP頁面給用戶、調(diào)用那個(gè)JavaBean 2.JSP響應(yīng)用戶請(qǐng)求,把結(jié)果數(shù)據(jù)展現(xiàn)給用戶 3.JavaBean對(duì)數(shù)據(jù)庫的數(shù)據(jù)的存取,復(fù)雜的業(yè)務(wù)功能和邏輯處理 瀏覽器 request(請(qǐng)求) Servlet———— 丨 丨 JSP<———>JavaBeans MVC開發(fā)流程 瀏覽器 ————>Servlet調(diào)用JavaBean(封裝數(shù)據(jù)) 調(diào)用另外一個(gè)JavaBean(處理數(shù)據(jù)) 最后將處理的結(jié)果通過JSP響應(yīng)給瀏覽器 Get與Post請(qǐng)求方法 1.Get方式是將數(shù)據(jù)通過在URL附加數(shù)據(jù)顯性向服務(wù)器發(fā)送數(shù)據(jù) http://localhost:8080/FirstServer/sam-ple?name=zhangsan 2.Post方式會(huì)將數(shù)據(jù)存放在"請(qǐng)求體" 中隱性向服務(wù)器發(fā)送數(shù)據(jù) 請(qǐng)求體:name=zhangsan Get與Post處理方式 1.所有請(qǐng)求-servlet()方法 2.Get請(qǐng)求-doGet()方法 3.Post請(qǐng)求-doPost()方法 Get與Post應(yīng)用場(chǎng)景 1.Get常用于不包含敏感信息的查詢功能 2.Post用于安全性要求較高的功能或者服務(wù)器的"寫"操作 1.用戶登錄 2.用戶注冊(cè) 3.更新公司賬目 xml是可擴(kuò)展標(biāo)記語言 編寫xml就是編寫標(biāo)簽,與html很相似 良好的人機(jī)可讀性 xml與html比較 xml和html非常相似,都是編寫標(biāo)簽 xml沒有預(yù)定義標(biāo)簽,html存在大量預(yù)定義標(biāo)簽 xml重在保存與傳輸數(shù)據(jù),html用于顯示信息 html xml 首頁 三年級(jí) 1班 三年級(jí) 2班 xml用途 配置描述文件 用于保存程序產(chǎn)生的數(shù)據(jù) 網(wǎng)絡(luò)間的數(shù)據(jù)傳輸 xml文檔結(jié)構(gòu) 第一行必須是xml聲明 有且只有一個(gè)根節(jié)點(diǎn) xml聲明 xml聲明說明xml文檔的基本信息,包括版本號(hào)與字符集,寫在xml第一行 <?xml version="1.0" encoding="UTF-8"?> version代表版本號(hào)1.0/1.1 encoding UTF-8設(shè)置字符集,用于支持中文 xml標(biāo)簽書寫規(guī)則 1.合法的標(biāo)簽名 2.適當(dāng)?shù)目s進(jìn)與注釋 3.合理使用屬性 4.特殊字符與CDATA標(biāo)簽 5.有序的子元素 xml支持五種實(shí)體引用 實(shí)體引用 對(duì)應(yīng)符號(hào) 說明 < < 小于 > > 大于 & & 和號(hào) ' ' 單引號(hào) " " 雙引號(hào) CDATA標(biāo)簽 1.CDATA指的是不應(yīng)由XML解析器進(jìn)行解析的文本數(shù)據(jù) 2.從 <![CDATA[ 不需要解析的代碼 ]]> 結(jié)束

有序的子元素
在xml多層嵌套的子元素中,標(biāo)簽前后順序應(yīng)保持一致.

xml語義約束
1.xml文檔結(jié)構(gòu)正確,但可能不是有效的
2.例如,員工檔案xml中絕不允許出現(xiàn)其他類型的標(biāo)簽

xml語義約束有兩種定義方式:DTD與xml Schema

Document Type Definition
1.DTD(Document Type Definition,文檔類型定義)是一種簡單易用的語義約束方式
2.DTD文件的擴(kuò)展名為.dtd.

<!ELEMENT hr (employee)> 定義hr節(jié)點(diǎn)下只允許出現(xiàn)1個(gè)employee子節(jié)點(diǎn) <!ELEMENT employee(name,age,salary,department)> employee節(jié)點(diǎn)下必須包含以下四個(gè)節(jié)點(diǎn),且按順序出現(xiàn) <!ELEMENT name(#PCDATA) 定義name標(biāo)簽體只能是文本,#PCDATA代表文本元素. DTD定義節(jié)點(diǎn)數(shù)量 1.如某個(gè)節(jié)點(diǎn)需要多次重復(fù)出現(xiàn),則需要在子節(jié)點(diǎn)后增加相應(yīng)的描述符 <!ELEMENT hr (employee+)> hr節(jié)點(diǎn)下最少出現(xiàn)1個(gè)employee子節(jié)點(diǎn) <!ELEMENT hr (employee*)> hr節(jié)點(diǎn)下可能出現(xiàn)0~n個(gè)employee子節(jié)點(diǎn) <!ELEMENT hr (employee?)> hr節(jié)點(diǎn)下最多出現(xiàn)1個(gè)employee子節(jié)點(diǎn)

xml引用dtd文件
在xml中使用<!DOCTYPE>標(biāo)簽來引用DTD文件
書寫格式

示例

XML Schema
1.xml schema比dtd更為復(fù)雜,提供了更多功能
2.xml schema提供了數(shù)據(jù)類型,格式限定,數(shù)據(jù)范圍等特性
3.xml schema是w3c標(biāo)準(zhǔn)

DOM文檔對(duì)象模型
1.DOM(Document Object Model)定義了訪問和操作XML文檔的標(biāo)準(zhǔn)方法,DOM把XML文檔
當(dāng)做樹結(jié)構(gòu)來查看,能夠通過DOM樹來讀寫所有元素.

DOM文檔對(duì)象模型

Dom4j
1.Dom4j是一個(gè)易用的,開源的庫,用于解析XML。它應(yīng)用于Java平臺(tái),具有性能優(yōu)異,功能強(qiáng)大和極其易使用的特點(diǎn).
2.Dom4j將XML視為Document對(duì)象.
3.XML標(biāo)簽被Dom4j定義為Element對(duì)象

XPath路徑表達(dá)式
1.Xpath路徑表達(dá)式是XML文檔中查找數(shù)據(jù)的語言
2.掌握XPath樂意極大的提高在提取數(shù)據(jù)時(shí)的開發(fā)效率。
3.學(xué)習(xí)Xpath本質(zhì)就是掌握各種形式表達(dá)式的使用技巧.

XPath基本表達(dá)式
1.最常用的基本表達(dá)式
表達(dá)式 描述
nodename 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)
/ 從根節(jié)點(diǎn)選取
// 從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮他們的位置
. 選取當(dāng)前節(jié)點(diǎn)
… 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
@ 選取屬性

XPath基本表達(dá)式案例
路徑表達(dá)式 結(jié)果
bookstore 選取bookstore元素的所有子節(jié)點(diǎn)
/bookstore 選取根元素bookstore。
bookstore/book 選取屬于bookstore的子元素的所有book元素
//book 選取所有book子元素,而不是他們?cè)谖臋n的位置
//bookstore//book 選取屬于bookstore元素的后代的所有book元素,而不管他們位于bookstore之下的什么位置
//@lang 選取名為lang的所有屬性

XPath謂語表達(dá)式案例
路徑表達(dá)式 結(jié)果
/bookstore/book[1] 選取屬于bookstore子元素的第一個(gè)book元素
/bookstore/book[last()] 選取屬于bookstore子元素的最后一個(gè)book元素
/bookstore/book[last()-1] 選取屬于bookstore子元素的倒數(shù)第二個(gè)book元素
/bookstore/book[position()??] 選取最前面的兩個(gè)屬于bookstore元素的子元素的book元素
//title[@lang] 選取所擁有名為lang的屬性的title元素
//title[@lang=‘eng’] 選取所有title元素,且這些元素?fù)碛兄禐閑ng的lang屬性
/bookstore/book[price>35.00] 選取bookstore元素的所有book元素,且其中的price元素的值須大于35.00
/bookstore/book[price>35.00]/title 選取bookstore元素的book元素的所有title元素,且其中的price元素的值須大于35.00

jaxen
1.jaxen是一個(gè)java編寫的開源的XPath庫,這是適應(yīng)多種不同的對(duì)象模型,包括DOM,XOM,dom4j和
JDOM.
2.Dom4j底層依賴jaxen實(shí)現(xiàn)XPath查詢

標(biāo)準(zhǔn)Java Web工程結(jié)構(gòu)
組織結(jié)構(gòu) 描述
tomcat Tomcat應(yīng)用根目錄
/web應(yīng)用目錄 Java Web應(yīng)用目錄
/web應(yīng)用目錄/index.html |.jsp 默認(rèn)首頁
/WEB-INF WEB應(yīng)用的安全目錄,用于存放配置文件
/WEB-INF/web.xml web.xml是"部署描述文件",是該Web項(xiàng)目核心配置文件
/WEB-INF/classes 存放編譯后的classes文件
/WEB-INF/lib 用于存放web應(yīng)用依賴的jar文件
/META-INF/MANIFEST.MF 包含Web應(yīng)用的版本等信息

Servlet開發(fā)步驟

1.創(chuàng)建Servlet類,繼承HttpServlet
2.重寫service方法,編寫程序代碼
3.配置web.xml,綁定URL

Servlet訪問方法
1.http://IP地址:端口/context-path/url-mapping
2.遠(yuǎn)程訪問使用,本地訪問localhost (127.0.0.1)
3.context-path稱為’上下文路徑’,默認(rèn)工程名

請(qǐng)求參數(shù)
1.請(qǐng)求參數(shù)是指瀏覽器通過請(qǐng)求向Tomcat提交的數(shù)據(jù)
2.請(qǐng)求參數(shù)通常是用戶輸入的數(shù)據(jù),待Sevlet進(jìn)行處理

Servlet接收請(qǐng)求參數(shù)
request.getParameter()–接收單個(gè)參數(shù)
request.getParameterValues()—接收多個(gè)同名參數(shù)

Get與Post請(qǐng)求方法
1.Get方式是將數(shù)據(jù)通過在URL附加數(shù)據(jù)顯性向服務(wù)器發(fā)送數(shù)據(jù)
1.http://localhost:8080/FirstServlet/sample?name=zhangsan

2.Post方式會(huì)將數(shù)據(jù)存放在"請(qǐng)求體"中隱性向服務(wù)器發(fā)送數(shù)據(jù)
2.請(qǐng)求體:name=zhangsan

request.getMethod();獲取當(dāng)前請(qǐng)求方法

Servlet生命周期
1.裝載-web.xml
2.創(chuàng)建-構(gòu)造函數(shù)
3.初始化-init()
4.提供服務(wù)-service()
5.銷毀-destory()

啟動(dòng)時(shí)加載Servlet

1.web.xml使用設(shè)置啟動(dòng)加載
2.0~9999
3.啟動(dòng)時(shí)加載在工作中常用于系統(tǒng)的預(yù)處理

JSP執(zhí)行過程
Tomcat 將jsp—轉(zhuǎn)譯為Servlet源代碼-----在進(jìn)行編譯成Servlet字節(jié)碼

JSP基本語法
1.JSP語法按功能可分為以下四種
1.JSP代碼塊 2.JSP聲明構(gòu)造塊
3.JSP輸出指令 4.JSP處理指令

JSP聲明構(gòu)造快
1.JSP聲明構(gòu)造快用于聲明變量或方法
2.JSP聲明構(gòu)造快語法:<%!聲明語句 %>
例如 <%! public int add(int a,int b){return a+b;} %>

JSP常用處理指令
1.<%@ page %>定于當(dāng)前jsp頁面全局設(shè)置
2.<%@ include %>將其他JSP頁面與當(dāng)前JSP頁面合并
3. <%@ taglib %>引入JSP標(biāo)簽庫

JSO九大內(nèi)置對(duì)象
HTTP請(qǐng)求的結(jié)構(gòu)
1.HTTP請(qǐng)求包含三部分:請(qǐng)求行,請(qǐng)求頭,請(qǐng)求體

String userAgent = request.getHeader("User-Agent"); 獲取顯示形式

響應(yīng)的結(jié)構(gòu)
1.HTTP響應(yīng)包含三部分:響應(yīng)行,響應(yīng)頭,響應(yīng)體

狀態(tài)碼 錯(cuò)誤描述
200 服務(wù)器處理成功
404 無法找到文件
500 內(nèi)部服務(wù)器錯(cuò)誤
403 服務(wù)器拒絕訪問
301.302 請(qǐng)求重定向
400 無效的請(qǐng)求
401 未經(jīng)過授權(quán)
503 服務(wù)器超負(fù)載或正停機(jī)維護(hù),無法處理請(qǐng)求

ContentType的作用
1.ContentType決定瀏覽器采用何種方式對(duì)響應(yīng)體進(jìn)行處理

MIME類型 描述
text/plain 純文本
text/html HTML文檔
text/xml XML文檔
application/x-msdownload 需要下載的資源
image/jpeg 圖片資源
image/gif
image/…

請(qǐng)求轉(zhuǎn)發(fā)與重定向

1.多個(gè)Servlet(JSP)之間跳轉(zhuǎn)有兩種方式
2.request.getRequestDispatcher().forward() -請(qǐng)求轉(zhuǎn)發(fā)
3.response.sendRedirect() --響應(yīng)重定向

請(qǐng)求轉(zhuǎn)發(fā)
1.請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器跳轉(zhuǎn),只會(huì)產(chǎn)生一次請(qǐng)求
2.重定向會(huì)產(chǎn)生兩次請(qǐng)求

瀏覽器Cookie
1.Cookie(小甜餅) 是瀏覽器保存在本地的文本內(nèi)容
2.Cookie常用于保存登錄狀態(tài),用戶資料等小文本
3.Cookie具有時(shí)效性,Cookie內(nèi)容會(huì)伴隨請(qǐng)求發(fā)送給Tomcat

Session–用戶會(huì)話
1.Session(用戶會(huì)話) 用于保存與"瀏覽器窗口"對(duì)應(yīng)的數(shù)據(jù)
2.Session的數(shù)據(jù)存儲(chǔ)在Tomcat服務(wù)器的內(nèi)存中,具有時(shí)效性
3.Session通過瀏覽器Cookie的SessionId值提取用戶數(shù)據(jù)

Session原理

ServletContext
1.ServletContext(Servlet上下文對(duì)象),是Web應(yīng)用全局對(duì)象
2.一個(gè)Web應(yīng)用只會(huì)創(chuàng)建一個(gè)ServletContext對(duì)象
3.ServletContext隨著Web應(yīng)用啟動(dòng)而自動(dòng)創(chuàng)建

Java Web三大作用域?qū)ο?br /> 1.HttpServletRequest–請(qǐng)求對(duì)象 作用域范圍一次遞增
2.HttpSession–用戶會(huì)話對(duì)象
3.ServletCotext-web應(yīng)用全局對(duì)象

web.xml常用配置
1.錯(cuò)誤頁面
2.映射配置

JSP九大內(nèi)置對(duì)象
內(nèi)置對(duì)象 描述
request 請(qǐng)求對(duì)象-HttpServletRequest
response 響應(yīng)對(duì)象-HttpServletResponse
session 用戶會(huì)話-HttpSession
application 應(yīng)用全局對(duì)象-ServletContext
out 輸處對(duì)象-PrintWriter
page 當(dāng)前頁面對(duì)象-this
pageContext 頁面上下文對(duì)象-PageContext
config 應(yīng)用配置對(duì)象-ServletConfig
exception 應(yīng)用異常對(duì)象-Throwable

EL表達(dá)式
1.EL(Expression Language)表達(dá)式語言,用于簡化JSP的輸出
2.EL表達(dá)式的基本語法:${表達(dá)式}

EL的作用域?qū)ο?br /> 1.EL表達(dá)式內(nèi)置四種作用域?qū)ο?/p>

作用域?qū)ο?描述
pageScope 從當(dāng)前頁面取值
requestScope 從當(dāng)前會(huì)話中獲取屬性值
sessionScope 從當(dāng)前會(huì)話中獲取屬性值
applicationScope 從當(dāng)前應(yīng)用獲取全局屬性值

El表達(dá)式的輸出
1.語法:${[作用域.]屬性名[.子屬性]}
2.EL表達(dá)式支持將運(yùn)算結(jié)果進(jìn)行輸出
3.EL支持絕大多數(shù)對(duì)象輸出,本質(zhì)是執(zhí)行toString()方法

EL輸出參數(shù)值
1.EL表達(dá)式內(nèi)置param對(duì)象來簡化參數(shù)的輸出
2.語法:${param.參數(shù)名}//可以代替request.getParameter

JSTL標(biāo)簽庫
1.JSTL(JSP Standard Tag Library),JSP標(biāo)準(zhǔn)標(biāo)簽庫
2.JSTL用于簡化JSP代碼開發(fā),提高代碼的可讀性與可維護(hù)性
3.JSTL由SUN(Oracle)定義規(guī)范,由Apache Tomcat實(shí)現(xiàn)

JSTL的標(biāo)簽庫種類
1.JSTL按功能規(guī)劃可分為五類標(biāo)簽庫
類別
核心標(biāo)簽庫–core
格式化輸出標(biāo)簽庫–fmt
SQL操作標(biāo)簽庫–sql
XML操作標(biāo)簽庫–xml
函數(shù)標(biāo)簽庫–functions

判斷標(biāo)簽
1.JSTL核心庫提供了兩組判斷的標(biāo)簽
2.<c:if>-單分支判斷
3.<c:choose>、<c:when>、<c:otherwise> -多分支判斷

fmt格式化標(biāo)簽庫
1.fmt格式化標(biāo)簽庫 URI:http://java.sun.com/jsp/jstl/fmt
2.<fmt:formatDate value="" pattern ="" >格式化日期標(biāo)簽
3.<fmt:formatNumber value = “” pattern ="">格式化數(shù)字標(biāo)簽

MVC模式

Servlet + JSP + JavaBena(MVC)---->復(fù)雜的web程序
控制層 視圖層 模型層
處理用戶請(qǐng)求 數(shù)據(jù)顯示 數(shù)據(jù)封裝

*****************接收表單中存在文件類型數(shù)據(jù)時(shí)的接收方式,request.getparameter不可以接收文件
//1.創(chuàng)建一個(gè)磁盤文件項(xiàng)工廠對(duì)象
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//2.創(chuàng)建一個(gè)核心解析類
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
//3.解析request請(qǐng)求,返回的是List集合,List中存放的是Fileitem對(duì)象
List list= servletFileUpload.parseRequest(request);
//4.遍歷集合,獲得每個(gè)Fileitem對(duì)象,判斷是表單項(xiàng)還是文件上傳項(xiàng)
for (FileItem fileItem:list) {
//判斷是否為表單項(xiàng)還是普通項(xiàng)
if (fileItem.isFormField()) {
//普通表單項(xiàng)
//接收表單項(xiàng)參數(shù)的值
fileItem.getFieldName();//獲取表單項(xiàng)的name
fileItem.getString(“UTF-8”);//獲取表單項(xiàng)Value的值
} else {
//文件上傳項(xiàng)
//文件上傳功能
}

}

文件讀取固定代碼
int len = 0;
byte[] b = new byte[1024];
while ((len = is.read(b)) != -1) {
os.write(b,0,len);
}

JSON
1.JavaScript Object Notation(JavaScript對(duì)象表示法)
2.JSON是輕量級(jí)的文本數(shù)據(jù)交換格式
3.JSON獨(dú)立于語言,具有自我描述性,更易于理解

JSON語法規(guī)則
1.數(shù)據(jù)由鍵(key)值(value)描述,由逗號(hào)分隔
2.大括號(hào)代表一個(gè)完整的對(duì)象,擁有多個(gè)鍵/值對(duì)
3.中括號(hào)保存數(shù)組,多個(gè)對(duì)象之間使用逗號(hào)分隔

JSON與字符串互相轉(zhuǎn)換
1.JSON.parse()方法將字符串裝換為JSON對(duì)象
2.JSON.stringify()方法將JSON對(duì)象轉(zhuǎn)換為字符串

@JSONField(format = “yyyy-MM-dd”)//對(duì)時(shí)間進(jìn)行注釋格式化

Calendar c = Calendar.getInstance();
c.set(2019, 0, 30, 0, 0, 0); 設(shè)置時(shí)間方式
employee.setHdate(c.getTime());

JSON和JAVA的交互

JSON.toJSONString將json進(jìn)行序列化返回的是一個(gè)字符串
JSON.parseObject將JSON轉(zhuǎn)換為JSON對(duì)象

JSON和JavaScript的交互

JSON.stringify()將json進(jìn)行序列化返回的是一個(gè)字符串
JSON.parse()將JSON轉(zhuǎn)換為JSON對(duì)象

document.getElementById //選中表單Id

$("#id") ID選擇器,指定id元素的對(duì)象
$(“標(biāo)簽”) 元素選擇器,選擇指定標(biāo)簽名的選擇器
$(".class") 類選擇器,選中擁有指定css類的元素
$(“S1,S2,SN”) 組合選擇器,對(duì)元素進(jìn)行組合

層疊選擇器
1.層疊選擇器是根據(jù)元素的位置關(guān)系來獲取元素的選擇器表達(dá)式

語法 說明
$(“ancestor descendant”) 后代選擇器
$(“ancestor>descendant”) 子選擇器
$(“prev~siblings”) 兄弟選擇器

屬性選擇器
1.屬性選擇器是根據(jù)元素的屬性值來選擇元素的選擇器表達(dá)式

語法 說明
$(“selector[attribute=value]”) 選中屬性值等于具體值得組件
$(“selector[attribute^=value]”) 選中屬性值以某值開頭的組件
("selector[attribute("selector[attribute("selector[attribute=value]") 選中屬性值以某值結(jié)尾的組件
$(“selector[attribute*=value]”) 選中屬性值包含某值得組件

$(“selector:first”) 獲取第一個(gè)元素
$(“selector:last”) 獲取最后一個(gè)元素
$(“selector:even”) 獲取偶數(shù)位置的元素
$(“selector:odd”) 獲取奇數(shù)位置的元素
$(“selector:eq(n)”) 獲取指定位置的元素

attr() 獲取或者設(shè)置元素屬性
removeAttr(name) 移除元素屬性

操作元素的CSS樣式
1.css() 獲取或設(shè)置匹配元素的樣式屬性
2.addClass() 為每個(gè)匹配的元素添加指定的類名
3.removeClass() 從所有匹配的元素中刪除全部或者指定的類

設(shè)置元素內(nèi)容
1.val() 獲取或設(shè)置輸入項(xiàng)的值
2.text() 獲取或設(shè)置元素的純文本
3.html() 獲取或設(shè)置元素內(nèi)部的HTML

jQuery事件處理方法
1.on(“click”,function) 為選中的頁面元素綁定單機(jī)事件
2.click(function) 是綁定事件的簡寫形式
3.處理方法中提供了event參數(shù)包含了事件的相關(guān)信息

Ajax的使用流程
1.創(chuàng)建XmlHttpRequest對(duì)象
2.發(fā)送Ajax請(qǐng)求
3.處理服務(wù)器響應(yīng)

1.XMLHttpRequest用于在后臺(tái)與服務(wù)器交換數(shù)據(jù),是AJAX的核心
2.XMLHttpRequest并不是W3C的標(biāo)準(zhǔn),不同瀏覽器的創(chuàng)建方式不一樣

處理服務(wù)器響應(yīng)
1.xmlHttp.onreadystatechange() 事件用于監(jiān)聽AJAX的執(zhí)行過程
2.xmlhtto.readyState屬性說明XMLHttpRequest當(dāng)前狀態(tài)

readyState = 0 請(qǐng)求未初始化
readyState = 1 服務(wù)器連接已建立
readyState = 2 請(qǐng)求已被接收
readyState = 3 請(qǐng)求正在處理
readyState = 4 響應(yīng)文本已被接收

獲取響應(yīng)體的文本
var responseText = xmlhttp.responseText;

jQuery對(duì)Ajax的支持
常用設(shè)置項(xiàng) 說明
url 發(fā)送請(qǐng)求地址
type 請(qǐng)求類型(get|post)
data 向服務(wù)器傳遞的參數(shù)
dataType 服務(wù)器響應(yīng)的數(shù)據(jù)類型
text|json|xml|html|jsonp|script
success 接收響應(yīng)時(shí)的處理函數(shù)
error 請(qǐng)求失敗時(shí)的處理函數(shù)

-----------------------當(dāng)id為lv1的屬性發(fā)生改變時(shí)自動(dòng)觸發(fā)后面的function()函數(shù)
$(function () {
$("#lv1").on(“change” , function () {
var parent = $(this).val(); //可以接收當(dāng)前id為lv1的表單選項(xiàng)發(fā)生改變時(shí)對(duì)應(yīng)選項(xiàng)的value值
})
})

正則表達(dá)式語法規(guī)則
1.[abc] a,b或c(簡單類)
2.[a-zA-Z]a到z或者A到Z,兩頭的字母包括在內(nèi)(范圍)
3.\d 數(shù)字 : [0-9]
4.X{n} X,恰好n次
5.X{n,} X,至少n次
6.X{n,m} X,至少n次,但是不超過m次

1.\D:非數(shù)字
2.\s:空白字符(如空格,\t,\n換行等)
3.\S:非空白字符(除了空白字符以外的其他都可以)
4.\w:單詞字符:[a-zA-Z_0-9]
5.\W:非單詞字符

matches方法的含義是將獲取過來的值與想匹配的正則表達(dá)式相比較,滿足返回true反之false

Java過濾器概述
過濾器的作用
1.實(shí)現(xiàn)對(duì)web資源請(qǐng)求的攔截,完成特殊的操作,尤其是對(duì)請(qǐng)求的預(yù)處理

JSPServlet 大部分過濾器會(huì)對(duì)請(qǐng)求做預(yù)處理的操作

Web 圖片 常常會(huì)忽略過濾器也會(huì)對(duì)請(qǐng)求處理完成后的一個(gè)響應(yīng)做出后處理的操作
文件

過濾器的應(yīng)用場(chǎng)景
1.Web資源權(quán)限訪問控制
2.請(qǐng)求字符集的編碼處理
3.內(nèi)容敏感字符詞匯過濾
4.響應(yīng)信息壓縮 //響應(yīng)后處理的應(yīng)用

過濾器的工作流程圖解

過濾器請(qǐng)求預(yù)處理客戶端 響應(yīng)后處理 servlet.service()

過濾器的生命周期
1.web應(yīng)用程序啟動(dòng)時(shí),web服務(wù)器創(chuàng)建Filter的實(shí)例對(duì)象,以及對(duì)象的初始化
2.當(dāng)請(qǐng)求訪問與過濾器關(guān)聯(lián)的Web資源時(shí),過濾器攔截請(qǐng)求,完成指定功能
3.Filter對(duì)象創(chuàng)建后會(huì)駐留在內(nèi)存,在web應(yīng)用移除或服務(wù)器停止時(shí)才銷毀
4.過濾器的創(chuàng)建和銷毀由WEB服務(wù)器實(shí)現(xiàn)

過濾器的實(shí)現(xiàn)步驟
1.編寫java類實(shí)現(xiàn)Filter接口,并實(shí)現(xiàn)其doFilter方法
2.在web.xml文件中對(duì)filter類進(jìn)行注冊(cè),并設(shè)置所攔截的資源

過濾器鏈
1.在一個(gè)web應(yīng)用中,多個(gè)過濾器組合起來稱之為一個(gè)過濾器鏈
2.過濾器的調(diào)用順序取決于過濾器在web.xml文件中的注冊(cè)順序

引入表單樣式css文件格式

1.注冊(cè)過濾器
2.攔截映射配置CharacterEncodingFiter

config.getInitParameter(“charset”)//獲取初始化參數(shù)

Servlet中使用load-on-startup配合 init能夠在啟動(dòng)的時(shí)候就初始化init

response.sendError(404)//可以使當(dāng)前頁面變成404頁面

ServletContextWeb Web

應(yīng)用服務(wù)器 監(jiān)聽器 HttpSession

ServletRequest

Java監(jiān)聽器簡介

java監(jiān)聽器定義
1.Servlet規(guī)范定義的一種特殊類
2.用于監(jiān)聽ServletContext,HttpSession,ServletRequest等的創(chuàng)建
,銷毀及其屬性修改發(fā)生變化的事件
3.監(jiān)聽器可以在事件發(fā)生前后進(jìn)行一些必要的處理操作

常見應(yīng)用場(chǎng)景1.統(tǒng)計(jì)在線人數(shù)(監(jiān)聽Session會(huì)話的創(chuàng)建來統(tǒng)計(jì)有多少用戶人數(shù))2.頁面訪問量的統(tǒng)計(jì)(監(jiān)聽Request的請(qǐng)求)3.應(yīng)用啟動(dòng)時(shí)完成信息初始化工作()4.與Spring結(jié)合監(jiān)聽器的實(shí)現(xiàn)步驟1.編寫java類實(shí)現(xiàn)監(jiān)聽器接口,并實(shí)現(xiàn)其接口方法2.在web.xml文件中對(duì)實(shí)現(xiàn)的監(jiān)聽器類進(jìn)行注冊(cè)多個(gè)監(jiān)聽器啟動(dòng)順序 1.監(jiān)聽器的啟動(dòng)順序好在web.xml中配置的順序一致當(dāng)銷毀是則是逆序Java監(jiān)聽器分類按監(jiān)聽對(duì)象1.ServletContext對(duì)象監(jiān)聽器 主要監(jiān)聽上下文對(duì)象2.HttpSession對(duì)象監(jiān)聽器主要監(jiān)聽會(huì)話對(duì)象3.ServletRequest對(duì)象監(jiān)聽器主要監(jiān)聽請(qǐng)求對(duì)象按監(jiān)聽事件1.域?qū)ο笞陨淼膭?chuàng)建和銷毀事件監(jiān)聽器2.域?qū)ο笾袑傩缘膭?chuàng)建,替換和消除事件監(jiān)聽器3.綁定到session中的某個(gè)對(duì)象的狀態(tài)事件監(jiān)聽器getAttributeHttpSession 對(duì)屬性的變化做監(jiān)聽setAttribute

單例模式:
1. 構(gòu)造器的私有化 private LoginCache() {

} 2. 實(shí)例化一個(gè)本身的私有靜態(tài)對(duì)象 private static LoginCache instance = new LoginCache(); 3. 定義一個(gè)靜態(tài)的方法返回實(shí)例化的對(duì)象 public static LoginCache getInstance() {return instance;}session.invalidate();//將session會(huì)話中的信息進(jìn)行清除,使其失效;charAt方法可以返回指定索引位置的字符Linux命令格式

關(guān)機(jī)/重啟命令
關(guān)機(jī):shutdown -h now
重啟:shutdown -r now 或者 reboot

Linux目錄結(jié)構(gòu) 使用ls命令查看目錄結(jié)構(gòu)Linux目錄結(jié)構(gòu)

/bin 命令存放目錄 /opt 第三方軟件放置目錄
/boot 啟動(dòng)目錄 /root 超級(jí)用戶家目錄
/dev 設(shè)備文件存放目錄 /tmp 臨時(shí)目錄
/etc 配置文件存放目錄 /sbin 命令存放目錄
/lib 函數(shù)庫存放目錄 /proc 放置數(shù)據(jù)到內(nèi)存
/home 普通用戶家目錄 /srv 服務(wù)存放數(shù)據(jù)目錄
/mnt 系統(tǒng)掛載目錄 /usr 系統(tǒng)軟件資源目錄
/media 媒體設(shè)備掛載目錄 /var 系統(tǒng)相關(guān)文檔內(nèi)容目錄

目錄查看,切換,顯示當(dāng)前目錄

目錄查看:ls [-al] [文件或目錄名稱]
目錄切換:cd [目錄名稱]
顯示當(dāng)前目錄:pwd

路徑格式
絕對(duì)路徑:
從根目錄/開始寫起

相對(duì)路徑:
當(dāng)前目錄 .
上級(jí)目錄 …
家目錄 ~

目錄創(chuàng)建,刪除
目錄創(chuàng)建:mkdir [-p] 目錄名稱
目錄刪除:rmdir [-p] 目錄名稱

文件的創(chuàng)建
文件創(chuàng)建:touch 文件名稱
文件編輯模式 vi 文件名

a在光標(biāo)后插入 A在當(dāng)前行之后插入
i在光標(biāo)前插入 I在當(dāng)前行之前插入
o在當(dāng)前行之下插入 O在上一行插入

文件內(nèi)容查看
cat 文件名稱

文件的復(fù)制,移動(dòng),刪除
復(fù)制:cp [-r] 來源文件 目標(biāo)文件
移動(dòng):mv 來源文件 目標(biāo)文件
刪除:rm [-rf] 文件或目錄

用戶管理
查看:who
創(chuàng)建用戶:useradd [-g 群組] 用戶名
設(shè)置密碼:passwd 用戶名

刪除用戶:userdel [-r] 用戶名

群組管理
查看群組:groups[用戶名]
創(chuàng)建群組:groupadd群組名
刪除群組:groupdel群組名

用戶群組修改:usermod [-g 群組名] 用戶名

權(quán)限,角色的作用
符號(hào) 權(quán)限 對(duì)文件的含義 對(duì)目錄的含義
r 讀權(quán)限 查看文件 查看目錄
w 寫權(quán)限 修改文件 修改目錄內(nèi)容
x 執(zhí)行權(quán)限 執(zhí)行文件 進(jìn)入目錄

權(quán)限,角色的設(shè)置
修改所有者:chown[-R] 用戶名 文件或目錄
修改所有者和組:chown[-R]用戶名:組名 文件或目錄
修改所屬組:chgrp[-R] 組名 文件或目錄

權(quán)限修改:chmod[-R] xyz 文件或目錄
x所有者權(quán)限 y所屬組權(quán)限 z其他用戶權(quán)限
r:4 w:2 x:1 rwx數(shù)字總和即權(quán)限

JDBC連接數(shù)據(jù)庫開發(fā)步驟 1.加載驅(qū)動(dòng) Class.forName("com.mysql.cj.jdbc.Driver");2.獲得連接Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jdbctest?useSSL=false&serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf-8","root", "password123123");3.創(chuàng)建執(zhí)行SQL語句的對(duì)象,并且執(zhí)行SQL//3.1創(chuàng)建執(zhí)行sql對(duì)象String sql = "select * from user";Statement stmt=conn.createStatement();//3.2執(zhí)行sql語句ResultSet resultSet=stmt.executeQuery(sql);while(resultSet.next()) {int uid=resultSet.getInt("uid");String username=resultSet.getString("username");String password=resultSet.getString("password");String name=resultSet.getString("name");System.out.println(uid+" "+username+" "+password+" "+name);} 4.釋放資源resultSet.close();stmt.close();conn.close();java的反射機(jī)制--JAVA反射機(jī)制是在運(yùn)行期間,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法,對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意方法和屬性;這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為java語言的反射機(jī)制java會(huì)被編譯成.class后綴的文件然后會(huì)被ClassLoader進(jìn)行記載進(jìn)JVM中運(yùn)行(運(yùn)行期間)可以動(dòng)態(tài)獲得這個(gè)類中的屬性和方法以及可以通過.class動(dòng)態(tài)獲取實(shí)例對(duì)象這就是反射Java的反射機(jī)制的作用-是用來編寫一些通用性較高的代碼或者框架的時(shí)候使用Classclass類的實(shí)例表示正在運(yùn)行的java應(yīng)用程序中的類和接口Constructor關(guān)于類的單個(gè)構(gòu)造方法的信息以及對(duì)它的訪問權(quán)限FieldField提供有關(guān)類或接口的單個(gè)字段信息,以及對(duì)它的動(dòng)態(tài)訪問權(quán)限MethodMethod提供關(guān)于類或接口上單獨(dú)某個(gè)方法信息 Java中java.lang.Class類用于表示一個(gè)類的字節(jié)碼(.class)文件如何得到某個(gè)class文件對(duì)應(yīng)的Class對(duì)象--已知類和對(duì)象的情況下類名.class對(duì)象.getClass()--Object類提供--未知類和對(duì)象的情況下Class.forName(“包名.類名”)返回的都是Class對(duì)象 例:Class class1=Class.forName("com.imooc.demo.Person");獲得無參/帶參構(gòu)造直接用獲得的字節(jié)碼文件.getConstructor 返回的對(duì)象為Constructor然后調(diào)用Constructor的對(duì)象.newInstance進(jìn)行實(shí)例化 例: Constructor c = class1.getConstructor();Person person = (Person) c.newInstance();有參 Constructor c = class1.getConstructor(String.class,String.class);Person person = (Person) c.newInstance();Spring的IOC的底層原地實(shí)現(xiàn)ocp原則:open-close原則,對(duì)程序擴(kuò)展是open的,對(duì)修改程序代碼是close盡量做到不修改程序的源碼,實(shí)現(xiàn)對(duì)程序的擴(kuò)展工廠模式 + 反射+ 配置文件配置文件<bean id="us" class="com.imooc.UserServiceImpl"/>進(jìn)行發(fā)射找到配置文件然后進(jìn)行類的實(shí)例化

總結(jié)

以上是生活随笔為你收集整理的JAVA整理的笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。