




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JAVA編程基礎一課堂筆記詳解
1)課程使用的開發(fā)環(huán)境:
?bin:文獻中重要是包含我們此后要用到的命令
?1ib:重要包含java開發(fā)過程中要用到的java包
2)環(huán)境變量的配置
?假如使用ecplise等開發(fā)工具,則不配置環(huán)境變量也是可以正常使用jdk等功能,但是
在dos中卻使用不了,配置環(huán)境變量則可以在dos中使用
?環(huán)節(jié):
右擊我的電腦一》屬性一》高級一》環(huán)境變量一》編輯系統(tǒng)變量中的path(在path后面
加上一個號,再將bin文獻途徑C:\ProgramFiles\Java\jdkl.6.0_ll\bin加上
去》查看系統(tǒng)變量中是否有classpath變量,假如沒有則》新建》c1asspath,
將”.;C:\ProgramFi1es\Java\jdk1.6.0_附加到classpath后面----》擬
定。
3)在dos中運營java程序
?通過cd命令找到java文獻所在的途徑
?編譯:javache11oworld.java-----注意此處文獻名的大小寫要區(qū)分
?編譯完畢后會出現(xiàn)一個helloworldCLASS文獻
?運營:javahe11。wor1d-----不加擴展名,真正運營的是.class文獻
?注意:java文獻名字必須與文獻中具有publicstaticvoidmain()類的名字是同
樣
4)
?java虛擬機的作用是將字節(jié)碼文獻解釋成機器語言;不同的操作系統(tǒng)平臺要安裝不同
的JDK;
?java是一種半編譯半解釋的文獻;源文獻一一》字節(jié)碼:編譯方式
?字節(jié)碼一一》機器代碼:解釋方式
5)使java的格式優(yōu)化:
source—>format:優(yōu)化文檔格式
6)在dos中提取java文檔的信息(提取文檔注釋的信息)
javadoc-dtextdoc-version-authorhel1oworld.java
7)當在數(shù)字后面加上一個L時,則系統(tǒng)會認為它是一個長整形;
?同樣在一個浮點數(shù)后面加上F/D系統(tǒng)就會認為它是單精度活或者雙精度;
?轉義字符例如:'\n'是一個字符,同時Unicode編碼也是一個字符,例如、;因
此區(qū)分字符和字符串是通過雙引號/單引號區(qū)分而不是字符的長度區(qū)分。
面向對象編程;
1)在類中有屬性和方法,不能將功能性的語句放到類中,只能放到方法中
2)通過return將方法要返回的值返回;同時,return有立即結束方法的執(zhí)行,并返回到
調用點。
3)在程序里是看不到對象的,只能通過引用來使用它
在HumanaMan=newHuman();中:
HumanaMan:對引用的聲明
Newhuman():對象的創(chuàng)建;
4)未被初始化的引用是不能使用的,編譯的時候就會犯錯;但當一個對象的引用指向的是空
值(nu11值),在編譯的時候是不會犯錯的,但是在運營的時候會出現(xiàn)錯誤。
5)Tostring用法:
?toString就是讓你重載用以在調用的時候輸出你像要輸出的信息的,
也就是當打印輸出一個對象時,系統(tǒng)自動調用其toString方法,打
印的是toString方法的返回值。
?Pub1icstringtoString()〃重載這個類的Tostring方法
(
Return"name:"+name+"&sex:"+sex+"&age"+age+"&teIephon
e,,+telnum://自己想要構建的字符串
}
toString的使用
System..out.printIn(對象引用)//System..out.printIn(對象引
用.tostringO);
?假設對象的名字叫做car則:
System.out.print1n(car)或者System.out.println(car.toString);
6)程序包;
?右擊project------》new------》package;同時也可以在一^"b包下再建立子包;在一個pa
ckage右擊新建package,包的名字的書寫:父包的名字.子包的名字;
?在一些java開發(fā)工具中編寫程序時,系統(tǒng)會自動給你分派到選擇的包中,但用
DOS書寫代碼,或者調用存在在包中的JAVA文獻時,就需要指出所在的包
?例如:packagemypackage;
Publicc1assmyclass{...............}
?若想訪問其他包中的類必須將類所在的包的名字:
Java.io.fileinputstream.stream//fileinputstream包名,stream類名
也可以使用import引入其他的包的類:
Importjava.io.fi1einputstream;
7)堆與棧的區(qū)別:
?Java的堆是一個運營時數(shù)據(jù)區(qū),類的(對象從中分派空間。這些對象通過new、new
array、anewarray和mu1tianewarray等指令建立,它們不需要程序代碼來顯式的
釋放。堆是由垃圾回收來負責的,堆的優(yōu)勢是可以動態(tài)地分派內存大小,生存期也不必
事先告訴編譯器,由于它是在運營時動態(tài)分派內存的,Java的垃圾收集器會自動收
走這些不再使用的數(shù)據(jù)。但缺陷是,由于要在運營時動態(tài)分派內存,存取速度較慢。
?棧的優(yōu)勢是,存取速度比堆要快,僅次于寄存器,棧數(shù)據(jù)可以共享。但缺陷是,存在棧中
的數(shù)據(jù)大小與生存期必須是擬定的,缺少靈活性。棧中重要存放一些基本類型的變量
(,int,short,long,byte,f1oat,doub1e,boolean,char)和對象句柄。
?實例變量(成員變量):直接定義在類中而不屬于任何方法。在對象被創(chuàng)建時創(chuàng)建;存
放在堆中
?局部變量:在方法中定義的變量和方法中的參數(shù)變量;方法執(zhí)行時創(chuàng)建,方法退出時釋
放;存儲在棧中
?靜態(tài)變量(static):存放在靜態(tài)存儲區(qū)中
8)JAVA參數(shù)的傳遞:
?Java語言中方法的傳遞采用值傳遞的規(guī)則
?在方法中對基本類型參數(shù)進行的一切修改都不會影響到方法外的變量;〃由于傳遞的只
是值
?方法中對引用類型的修改會影響到引用所指向的值;〃例如對對象進行傳遞,由于對象
為引用類型,所以傳遞的是對象的地址,則會改變。
?方法中改變引用變量指向的對象不會影響方法外的引用變量;//即在方法中為引用變
量分派了新的空間時,方法結束,引用變量就會釋放空間,并指向調用方法前的空間,此時
方法內的變化不會影響到方法外部。
9)This的作用:
?作為當前類的引用;
例如:robotrobotl=newrobot(this);
?將代碼中的成員變量與方法中的局部變量區(qū)分開(防止歧義)。
例如:thisoName=Name
JAVA中的運算符:
1)兩個整數(shù)之間相除的到的結果還是一個整數(shù)5/2=2,其取值是相除后的整數(shù)部分。
2)i的值為5;表達式(i++)的值為5,運算完畢i的值為6;
3)=:是賦值運算;==:是比較運算符
對于浮點數(shù)進行比較不能用==號,由于浮點數(shù)的小數(shù)點不一定到第幾位,一次采用F1-
F2<1E—4來判斷。
連續(xù)的比較不能3<i<8,必須用到邏輯與&&運算符;即:3<i&&i<8
4)System.out.,print(s):表達輸出s,但不換行;System,out..printin(s):表達輸出s,
并且換行。System.out..printin():表達換行。
5)邏輯運算(&&、||)執(zhí)行時會出現(xiàn)短路現(xiàn)象,位運算不會出現(xiàn)短路現(xiàn)象。
什么叫做短路現(xiàn)象那:在進行二元邏輯運算時,假如第一個操作數(shù)就可以擬定表達式的
值而不需要再計算第二個操作數(shù),這種現(xiàn)象叫做邏輯表達式的短路。
5)算數(shù)右移>>,左移<<:最高位補符號;
邏輯右移》>:最高位補0;
7)三元運算符:
Boolean-exp?express1:express2
8)浮點型文字常量默認為double型,而doub1e型常量不能賦值給float型
Floata=3.14(錯)
Floata=3.14f(對)
9)表達式的運算至少要用int類型
Byteb3=b1+b2:error,變量的運算只少要int型
Byteb3=l+2;對的,由于運算的為常量
整個表達式的中變量的運算向著表達式中最大的類型靠攏,至少應當為int型;這是表達
式的自動提高的過稱(隱式類型轉換)。
程序的流程控制:
1)switch(整形變量或者整形表達式)
2)帶標號的break
對于某一個循環(huán)做一個標號,break標號.name就會跳出這個循環(huán);
數(shù)組:
1)數(shù)組的聲明,只是聲明了對象的引用,即:若僅僅寫char[]s;這只是個引用,沒有
指向任何空間和有效的數(shù)據(jù),是不可使用的;在使用數(shù)組的時候需要創(chuàng)建數(shù)組對象。
2)使用關鍵字new創(chuàng)建數(shù)組對象,在創(chuàng)建對象時,需要指明數(shù)組的大小。數(shù)組對象被創(chuàng)建
之后,假如不對其進行賦值,則每個成員都會被默認的初始化為0值。
Chars[]=newchar[16];
3)數(shù)組的顯示初始化:
Char[1s={'a','b','c'};
3)對于數(shù)組可以用空來賦值,這時它就不指向任何數(shù)據(jù)
Chars[]=null;
4)當已經(jīng)用new為數(shù)組創(chuàng)建數(shù)組對象后,必須對數(shù)組中的每個成員一一賦值。
對的的方式:Inti[]=newint[3];
For(intj=0;j<3;j++)
{i[J1=j+1;)
錯誤:一起賦值是不允許的:
1[]={1,2,3};::是不允許的。
5)多維數(shù)組的創(chuàng)
Java中沒有真正意義上的多維數(shù)組,而是通過數(shù)組的數(shù)組來實現(xiàn)的
多維數(shù)組的聲明方式如下,以二維為例:int[]口a
多維數(shù)組可以用以下方式進行創(chuàng)建:a=newint[10][8];
錯誤寫法:
Int[][]a=newi錯:用new創(chuàng)建數(shù)組時,至少要在第一個維度上指定明確大
??;
Int⑶口b=newint[3][]數(shù)組聲明的時候,口內必須是空的
lnt[]d=newint[]{l,2,3,}〃對的
Int[]d=newint⑶{1,23}〃錯誤,
Int[]d=newint{1,2,3,}〃錯誤
類的繼承與組合:
1)一個概念是另一個概念的一種;比如蘋果是水果的一種,燕子是鳥類的一種,但是
父親與兒子的關系不是一種繼承關系(兒子不是父親的一種哈哈)。
2)類的繼承使用關鍵字:extends
classSuper{}
classDerivedextendsSuper{)
3)子類可以加入自己的方法和屬性。
4)可以將父類的引用指向一個子類的對象,這種引用使用的時候,只能使用子類從父類繼承
來的方法;即這個引用只能訪問父類的成員,而不能訪問子類的成員。
例如:上溯造型(將子類的對象賦值給父類的引用):
Humanh;
Parentp=newParent();
H=p;
*((Human)p):對P進行強制類型轉換,注意此時只是將引用p轉換成了Human
類型,而其真正指向的對象還是Persion類型。
下塑造型(將父類引用指向的子類對象,通過強制類型轉換賦值給一個子類的引
用):
Humanh=newParent();〃指父類的引用指向的必須是子類的對象
Parentp;
P=(Parent)h;〃強制類型轉換
錯誤的操作:(編譯時通過,運營時將拋出異常)
Humanh=newHuman();
Parentp;
P=(Parent)h;//強制類型轉換
編譯的時候只能看出變量的類型(等號左邊的),對象的類型是在程序運營起來之后
才干擬定。
4)instanceof運算符:
superRefinstanceofDevriedCIass
superRef與DevriedClass必須在繼承樹的同一條分支上,否則無法通過編譯;
判斷引用superRef所指向的對象的實際類型是DevriedCIciss類型或是DevriedCIa
ss的一個繼承類時,上面表達式返回TRUE,否則FALSE;
類的訪問控制:
1)Java語言中類的成員有四種存取權限:
PubIic:所有包中的所有類均可訪
問protected:所在包中的類和其他
包中繼承當前類的繼承類可以訪問
無:只有所在包中的類可以訪問
Private:只有當前類可以訪問
2)方法的重載
Java語言中允許多個方法擁有同樣的名字,這種情況叫做方法的重載(overIoad)
重載的多個方法必須要有不同的參數(shù)表,只能通過參數(shù)表分辨,不能通過返回值
3)方法的覆蓋:
在類的繼承過程中,子類可以定義同父類完全同樣(涉及參數(shù)表和返回值)的方法,在通
過子類對象調用方法時,將調用子類的方法而不是父類的方法,這種情況叫做方法的重置
或覆蓋(override)
要覆蓋父類的方法,必須是子類的方法同父類的方法完全同樣——不管是參數(shù)列表還
是返回值
在覆蓋父類的方法時,可以給方法賦予不同的訪問限制符,但是,覆蓋方法的訪問限制不
能比原方法的訪問限制更窄:private<?c<protected<pubIic
4)在子類中覆蓋和重載都是針對方法而言。
在子類中可以聲明與父類中的變量同名的變量,并且所聲明的變量可以與父類的變量有
不同的類型。子類中的新變量與父類中的同名變量是兩個不同的變量,都可以被訪問,訪
問的變量是哪一個取決于對象引用的類型。
在子類和父類的方法中有覆蓋的方法時,調用的方法取決于引用所指向的對象的類型。
5)多態(tài):
通過引用實現(xiàn)的動態(tài)綁定的方法;通過同一個方法來解決同一個父類的不同子類,從而實現(xiàn)
不同的結果的方法。
例如:
classEmployee
(
voidsa1ary()
{System.out.println("Employeesalary");
)
)
ClassSecretaryextendsEmployee
(
voidsa1ary()
{System.out.print1n("Secretarysa1aryH);
)
)
ClassManagerextendsEmployee
(
voidsalary()
{System.out.print1n(”Managersalary");
)
)
PublieC1asssa1ary
{publicvoidsalaryofemployees(Employeee)
e.saIary();
)
pub1icstaticvoidmain(String[]args)
{Secretarys=newSecretary();
Managerm=newManager();
EmployeeSalary,salary0fEmployee(s);
EmployeeSa1ary.salaryOfEmployee(m);
)
6)super關鍵字:
是一個指向當前對象的父類的弓I用。
只能使用在類的方法中。
作用:
?指向當前對象的父類引用
通過super就可以調用父類的protected和public變量和方法;〃supe
;
Protected:封裝范圍是在它所有的子類中可用
?代表父類的構造方法。
通過super關鍵字可以在子類中對父類的構造方法進行初始化,并且必須先初始
化父類的構造方法,再初始化子類中的參數(shù)(假如不通過super調用父類的構造方
法,則系統(tǒng)會自動去調用父類沒有帶參數(shù)的構造方法,假如此時父類中定義了帶參數(shù)
的構造方法,無參構造方法就會消失,則運營就會犯錯)
Classupper
{Publicupper(inti){};
}
CIassderivedextendsupper
(
PubIicderived(inti)
{super(m)//super中傳遞的參數(shù)不一定非要通過derived的參數(shù)傳遞,可以
寫為
//super(3),只要類型與父類中的參數(shù)類型相同即可
)
}
This關鍵字可以調用本類的其他構造方法。
7)什么叫做單態(tài):
?在整個系統(tǒng)運營的過程中,某個類的對象只有唯一的一個。
?一方面他的構造方法必須是Private類型的,以保證在類外就不能創(chuàng)建新的對
象。
?唯一的對象是在類中定義的,且是私有的,用static修飾(假如一個對象用stati
c修飾,則在整個程序的運營過程中只有一個)
?使用過程中,只能通過方法指向那個唯一的引用。
例如:publicclassCompany
(
PrivateCompany(){};
PrivatestaticCompanycompany=newCompany
(0;
PubliestaticCompanyinstance()
(
Returncompany;
)
)
Companyc=Company.instance();
8)Object類中的方法:
?==在基本數(shù)據(jù)類型中是判斷基本類型的值是否相等;在引用類型中是判斷兩個對象的
引用是否相同。默認情況下equaI方法與等號的作用是同樣的。但一般對其進行覆
蓋,使其的作用與==的作用不同,
例如:strings1=newstring("heIIo");
strings2=newstring("heIIo");
strings3=s1;
sl==s2;//結果為FALSE,由于si,s2的引用值并不同
sl==s3;//結果為TRUE,由于si,s3為同一個引用;
s1.equals(s2);〃true,由于sl,s2引用所指向的值是相同的
si.equaIs(s3);//true,由于si,s2引用所指向的值是相同的
在字符串類型中對equaIs方法進行了重寫,使其具有比較兩個引用所指向的值是否
相同的作用。
?在。bject類中有很多像equals同樣的方法,我們可以對其進行重寫,以實現(xiàn)自己想
要的方法。
例如:
ClassStudent
(
Stringname;
Intage;
PublicBooleanequals(。bjectobj)〃。bject為系統(tǒng)類,可以傳遞
任意類型參//數(shù)
(
Studentst=null;
lf(objinstanceofStudent)//判斷。bj與student是否為同一類型。
St=(Student)obj;
日se
Returnfalse;
If(==&&st.age-this.age)
Returntrue;
日se
Returnfalse;
)
)
9)Static:
?訪問方式:既可以通過創(chuàng)建對象,使用引用訪問;也可以直接通過類名進行訪問。
?特點:靜態(tài)變量是存放在靜態(tài)存儲區(qū)的,它不會存放在創(chuàng)建對象時動態(tài)分派的空間中;
在類裝入]avas虛擬機時,靜態(tài)變量就被創(chuàng)建,所有對象都共享這一個靜態(tài)變量。
?作用:靜態(tài)變量和方法可以記錄存放所有對象的信息,表達類自身的某些特性和操作。
?靜態(tài)方法:不能直接訪問類中的非靜態(tài)成員(通過創(chuàng)建對象,使用對象的引用可以訪問
非靜態(tài)成員),只能直接使用靜態(tài)成員。
10)Final關鍵字:
?在Java中finaI關鍵字可以被用來修飾類、方法和變量
?用final修飾類時表達此類不可以被繼承
?用final修飾方法是表達此方法不可以被繼承類重置
?用final修飾變量是表達該變量是一個常量,在初始化后不能被改變
?在final關鍵字修飾類或方法時,不能同abstract關鍵字共同使用
?使用final關鍵字修飾類的變量時,假如修飾static變量,則須在定義時或者在靜態(tài)塊
中進行初始化;假如修飾普通變量,則可以在定義時,在動態(tài)塊中,或者在構造方法中進
行初始化
?Publicstaticfinal——全局常量
11)Abstract
?抽象類定義格式:
Abstractclassclass_name
{intname
Abstractvoideat();〃抽象方法不能有方法體,默認都是publie類型
的。
Publicvoidsay(){system.out.print("itisdeIicious")}
}
不能創(chuàng)建抽象類的對象。
抽象方法與普通方法相比最大的不同是沒有方法體,即沒有具體的實現(xiàn);抽象方法只能
定義在抽象類中,不能定義在普通類中,一個抽象類里是可以沒有抽象方法的,也可以有
非抽象屬性和方法。
若一個類繼承了一個具有抽象方法的抽象類,但是沒有對所有的抽象方法進行重寫,那
么這個類也必須書寫成抽象的,由于抽象方法中必須存在抽象類中。
12)接口:
?Java不允許進行多重繼承,為了避免單根繼承帶來的局限性,產(chǎn)生了接口。
?接口可以看作是沒有成員變量,并且所有方法都是抽象方法的抽象類。
?接口中的方法都省略了pubIicabstract,且接口中的方法不能用final修
飾。
?在接口中沒有成員變量,接口中的數(shù)據(jù)一定是全局常量,即都是publiestaticf
inaI型的,但是publiestaticfinaI已經(jīng)被省略掉了
格式:
InterfaceMylnterface
(
Voidmethodl();〃接口中的方法都省略了publicabstract
Intmethod2();
〃接口中是沒有成員變量的,因此所有這樣定義的數(shù)據(jù)都是全局變量
)
?接口的使用:
Classmyclassimplementsmyinterface
)
?對接口中抽象方法的實現(xiàn),必須用PUblic關鍵字修飾,否則編譯犯錯
?假如實現(xiàn)一個借口h是并沒有實現(xiàn)接口中的所有方法,那么這個類就需要聲明為抽象類,
由于抽象方法只能在抽象類中。
?一個類可以在繼承一個父類的同時,實現(xiàn)一個或多個接口,但extends必須寫在im
plemerits的前面。
?一個類可以繼承多個接口,接口之間可以多重繼承
InterfaceDerivedlnterfaceextendsMylnterfacel,MyInterfac
e2
(
Method............
)
13)無論在哪一個類中寫主方法都是可以的,只是運營的時候要找到主方法所在的類,然后
就可以運營。
14)內部類:
?定義:內部類是定義在其他類中的或方法中的類,包含內部類的類通常稱作:EncI
osingCIass;內部類的存取控制方式與同它在同一位置上的成員是相同的。
?靜態(tài)內部類:
定義靜態(tài)內部類的方法類似于聲明一個類的靜態(tài)成員變量。
PublieclassEnclosing
(
PrivatestaticintstaticMember=0;
PubliestaticclassStaticlnner//靜態(tài)內部類
PublicvoidinnerMethod()
{System.out.printIn(staticMember);}
}
)
聲明靜態(tài)內部類的引用:
Enclosing.StaticlnnerinnerRef;
創(chuàng)建靜態(tài)內部類的對象:
innerRef=newEnclosing.Staticlnner();
注:靜態(tài)內部類不能與EnclosingCIass同名;
靜態(tài)內部類可以訪問EnclosingClass內的靜態(tài)成員,不能直接訪問非靜態(tài)成員;
EnclosingClass不能直接訪問靜態(tài)內部類的成員。
?成員內部類:
定義一個成員內部類的方法類似與定義一個類的普通成員;
PubliccIassEnclosing
(
PrivateintMember=0;
PubliccIassMemberlnner〃靜態(tài)內部類
(
PublicvoidinnerMethod()
{System.out.println(Member);}
}
)
聲明成員內部類的引用:
EncIosing.MemberlnnerinnerRef;
創(chuàng)建成員內部類的對象:
EncIosingenclosing=newEnclosing();
InnerRef=enclosing.newMemberInner();
或者:
InnerRef=newEnclosing,newMemberInner();
注:
成員內部類不能與EnclosingClass同名;
成員內部類不能定義靜態(tài)的成員變量和方法;
成員內部類可以訪問EnclosingClass中的所有成員,無論是靜態(tài)還是非靜態(tài);
而EnclosingClass不能直接訪問成員內部類的成員。
在成員內部類的方法中this是內部類當前對象的引用,假如需要訪問當前的外部類對象
需要使用Enclosing.this
?本地內部類
本地內部類是定義在方法中的內部類
Publicvoidcontainlnner()
(
ClassLocaIInner
(
Publicvoidprint(){}
)
LocalInnerinnerRef=newLocalInner();〃本地內部類的訪問在方
法中
)
注:
同定義在方法中的變量同樣,本地內部類只能在定義它的方法中使用,并且不能使用P
ublieprivate等訪問權限控制
本地內部類不能與EnclosingClass同名;
本地內部類可以訪問EnclosingCIass中的所有成員,無論是靜態(tài)還是非靜態(tài);而
EnclosingClass不能直接訪問本地內部類的成員。
在本地內部類的方法中this是內部類當前對象的引用,假如需要訪問當前的外部類對象
需要使用EncIosing.this
本地內部類可以訪問包含它的方法中的變量和方法的參數(shù),但是這些變量或參數(shù)必須聲
明為final,內部類中不能改變他們。
?匿名內部類:
匿名內部類等號右邊的可以是接口,抽象類,正常類;弊端是不能被重用。
異常:
1)異常的簡介:
?異常是程序開發(fā)和運營過程中產(chǎn)生的不正常的、錯誤的情況。
?在Java中產(chǎn)生的任何一個異常都被表達為一個對象,不同的異常被表達為不同類型
的對象,這些對象屬于共同的基類ThrowabIe
?在java程序中,發(fā)生異常時,會在發(fā)生異常的地方就會中斷,后面的不會執(zhí)行;當使用
try{}catch(){}塊做了解決之后,后面的代碼就可以繼續(xù)執(zhí)行下去。
2)異常解決的方法:
Try/catch關鍵字:
結構:
Try{〃也許產(chǎn)生異常的代碼}
Cateh(someexceptione){〃解決異常的代碼}
Catch(someexceptione){//解決異常的代碼}
注:Try下面如假如具有多個catch語句的話,只會調用跟異常情況相符合的那個
cache語句。當要書寫多個catch塊時,要把子類的exception寫在前面。
什么代碼寫在Try中:
對于存在拋出異常隱患的代碼應當寫在try中;
不是寫在try中的代碼越多越好;只要把也許出現(xiàn)異常的哪一行代碼寫進去就好,由于在
try中,假如加入了太多的代碼,那么出現(xiàn)異常的那一行之后的所有代碼也是不可以執(zhí)行
的。
Catch中寫什么?
Catch中寫什么,就會在程序結果中輸出什么。
e.printStackTrace():拋出異常的信息,可以直接使用
e.getMessage():返回發(fā)生異常的字符串,需要通過print輸出。
throws;可以在catch塊中使用throw拋出異常;重新拋出的異常不會被同一個try
下的其他catch塊解決,只能被包裹當前try/catch結構更大的try/catch來捕獲解決,
或者被拋出當前方法,由方法的調用者進行解決。
Catch中假如什么都不寫,那么只是把異常給屏蔽掉了,異常真正的犯錯路線是不
悔顯示的。
當try中發(fā)生異常時,Java虛擬機就會自動創(chuàng)建一個異常對象,并傳遞給catch解
決;Catch(exceptione)//不明確具體是什么類型異常時,就寫;excepti
on,由于exception是所有異常的父類
程序員可以解決的是異常exception,對于error是虛擬機的內部錯誤,要尋找虛擬機的內
部錯誤。
Finally語句塊:
寫在trycatch后面,無論怎么樣都會執(zhí)行的語句塊
在這個方法中有異常,但是方法的書寫者并沒有對方法進行解決,這就需要方法的使用者自
行進行異常解決,
拋出異常就是將異常屏蔽了,使不犯錯誤,但事實上異常還是存在的
Throw(excepti。川拋出了那個異常就要對這個異常進行trycatch解決。
覆蓋方法時所拋出的異常規(guī)格不能超過父類聲明的異常。
自定義異常
Run--------run-------arguments---------VM-------ea
Dos下:
1)先編譯
2)Java-eacIass_name;
-ea只在只在這一次運營中有效,下次寫文獻還要寫上-ea
通常是做一些私有方法的檢查
基于文本的應用程序
1)命令行參數(shù):
允許程序運營起來之后,往里面輸入?yún)?shù)
所謂的命令行參數(shù)就是主方法main括號中的參數(shù)
1、在d。s中用java命令運營的時候對main中的參數(shù)進行賦值
Javaclassname參數(shù)1參數(shù)2參數(shù)3......//參數(shù)之間以空格分隔
2、在ecplise下傳遞參數(shù)
Run-----run-----arguments-----programargument中輸入自己的參數(shù)(參數(shù)之間以
空格分隔)
控制臺
System.in
Fanhui的是inputstream,以字節(jié)為單位
BufferedReader:允許一次讀取多個字符
System.in.read();返回值是一個整型值。就是當前字符的A$CII編碼,可以通過強制
類型轉換將其轉換為一個字符,且要寫在trycatch塊中,當需要讀入多個字符是需要用
到循環(huán),直到你輸入-1時,或者是回車(/r)時循環(huán)結束
讀取多行:
現(xiàn)將System」n轉換為字符流
InputstreamReaderir=newInputStreamReader(SystemoIn);
BufferedReaderin=newBufferedReader(ir);
System.error
File類
DeIete刪除文獻時,要保證文獻的內容為空;
創(chuàng)建文獻時也要保證要存放文獻的目錄已經(jīng)存在
將A文獻的內容放入B文獻中
對A文獻的內容讀出來寫到B文獻中
進內存:輸入流(從磁盤輸入到內存,讀的方法)
出內存:輸出流(從內存輸出到磁盤上,寫的方法)
I/O流:
1)p466頁467頁
2)P468
3)P469節(jié)點流,解決流的概念
4)P470有那些節(jié)點流
5)解決流:有哪些解決流?在后面
節(jié)點流:文獻流
字節(jié)流:FILeinputStream.FileOutputStream:對字節(jié)進行操作。
字符流:FileWriter:可以直接寫入一行字符串;
FileReader:讀取時候要讀入到字符數(shù)組中。
方法:read();//對于文獻流中的“讀操作”都要讀到一個數(shù)組中,而不能直接將
字//符串輸出
Write();
以對E盤下的f.txt文獻為例進行操作
FiIefilename==newFile("e:\\f.txt")
?以字節(jié)的形式向文獻寫入內容:
FileOutputStreamoutput=newFileOutputStream(filename/這里也可以直接
輸入途徑,true);//Append=true:在源文獻基礎上追加內容;默認是FALSE:即覆蓋
源文獻內容。
byteb[]="string……getBytes()/.getBytes()方法將字符串轉換為字符
output.write(b);
?以字節(jié)的形式將文獻內容讀到內存:
FiIelnputStreaminput=newFilelnpuIStream(fielname/這里也可以直接輸
入途徑);
bytea[]=newByte[input.available]〃定義一個字節(jié)數(shù)組以存放要讀進來的字
節(jié)數(shù)據(jù),//input.avaiIable表達讀進來的數(shù)
據(jù)的長度。
lotIen=lnput.Read(a);//讀入到字符數(shù)組a,并且將字節(jié)數(shù)組的長度返回到一個i
nt類〃數(shù)據(jù)中
System.out.printInfnewString(a,0,len));〃輸出字節(jié)數(shù)組
?以字符的形式向文獻寫內容
FileWriterw=newFileWriter(fiIename,);
w.writeC'string……”);〃字符流可以直接向文獻寫入字符串。
?以字符的形式從文獻讀取內容
FileReaderr=newFileReader(filename);
char[]buf=newchar[1024];〃可以給出數(shù)組的大小,也可以像上面那樣定義
intIen=in.read(buf);
System,out.println(newString(buf,0,len));
節(jié)點流:內存流
用于內存數(shù)組,類似于內存虛擬文獻的功能。
實現(xiàn)在讀到文獻時換行:
運用BufferedWriterbw=newBufferedWriter(filewriter_name);
bw..write(l'adfIjafdlj;alsn);
bw.newLine();
bw.write("sdfsdfdfO").
Bw.close();
Character.tollpperCase(小寫字母)=大寫字母
ByteArrayOutputStream:將讀到的字符暫時存儲在內存緩沖區(qū)中。
管道的功能:
將兩個流連接,能完畢通訊的過程
解決流:
解決流是建立在節(jié)點流的基礎上進行操作
緩沖流:
節(jié)點流跟解決流的類型必須一致。(字節(jié)對字節(jié),字符對字符)
緩沖流中具有一個指示器,通過這個指示器可以做一些標記,
Bin.Skip(6):向后跳過六個字節(jié)
Bin.Mark(0):在當前這個字節(jié)處做一個標記
Bin.Skip(2):向后跳過2個字節(jié)
Bin。Reset():回到第一次做標記的地方。
把對象轉換為連續(xù)的字節(jié)數(shù)據(jù),這就叫做序列化。不涉及編碼問題
SerializabIe這個接口自身不具有任何抽象方法,僅僅需要一個聲明。
將各種基本類型的數(shù)據(jù)進行轉換讀寫
DatainputstreamDataoutputstream
沒有把字符串讀出來的方法,可以寫,但是不能直接讀
我們學過的只有readline(),在傳輸?shù)臅r候加上換行符,就可以通過readline讀出來
現(xiàn)在又有writeUTF()會在原有基礎上多余兩個字節(jié),這兩個字節(jié)放在最前面這兩個字節(jié)
用來存放你輸入的字符串一共有多少個字節(jié)。
ReadUTF():規(guī)定寫的時候必須用writeUTF(),才干用ReadUTF。讀
一個節(jié)點流的外部包裝了多少個解決流是不受限制的
關閉流時只要關閉最外層的流就可以,內部的流會自動關閉。
打印六
常用的JAVA類:
Math類:
1)p376
2)Math.random()返回一個在0.0到1.0之間的隨即doubIe值;
3)Math.round(x)四舍五入,注意當x為負數(shù)時,向0取整。
4)Math.sin()/cos()/tan()返回給定的弧度值的相應三角函數(shù),弧度值就是ir/n
詳見參考文檔
String類
1)String類的構造方法:
Stringstringname=newString()
Stringstringnome=newString(StringvaIue)
Stringstringname=newString(StringBufferbuffername)
Stringstringname=w$tring......”
2)通過下面方式建立的字符串,u==m返回true
Stringu="hello”
Stringm="helIow
通過這種方式聲明時,相同的文字常量指的是同一個對象,即:u和m是指向同一個對象,
注意用equaIs比較值是否相同,用==比較引用是否相同
3)+運算符可以被用來連接字符串
+后面的所有數(shù)據(jù),無論是什么類型都會被當做字符串連接在一起。
例:
System.out.printin(5+6+'A')//結果76
System.out.println(5+6+"AD)〃結果11A
System.out.printIn(5+"A"+6)〃結果5A6
3)字符串有一^t'性質immutabIe
即創(chuàng)建之后不能再對其內容做任何更改。對其的操作其實都是生成了新的對象,
4)字符串中的方法:
忽略字符串大小寫進行比較
IndexOf("x"):判斷某個字符/子字符串在字符串中的位置(從左往右找),若找不
到返回1假如找到返回改字符在字符串中第一次出現(xiàn)的位置
lastlndexOf(“X"判斷某個字符在字符串中的位置(從右往左找)
stringbuffer
區(qū)別:
capacity()
Iength()
包裹類:
是對基本數(shù)據(jù)類型進行包裝
有一些方法里傳遞的類型必須是引用類型,所以基本類型的數(shù)據(jù)就無法向其中添加,因此需
要將基本類型包裝成弓|用類型,包裹類就解決了這樣的問題
Namel.EquaIs(name2):比較同類兩個對象的數(shù)值是否相同,一方面是同類,另一
方面值相同;
從控制臺和命令行輸入的數(shù)據(jù)基本都是字符型所以parsexxx(String)將一個字符串
轉換成自己想要的類型很有用。
將包裹類轉換成基本數(shù)據(jù)類型
Xxxname=包裹類name,intValue();
例如:IntegerknewInteger(8);
Intm=Value();
集合類:
集合的大小是動態(tài)可變的;
存在與java,util包中
Enumeration
Vector多個線程在共享同一個資源時,對線程進行了控制,以保證在同一時刻只有一個
線程對資源進行操作,實現(xiàn)了線程的同步,代價就是效率下降
Hashtable適合用于對對象進行快速查找
線程:
?一個進程在執(zhí)行的時候至少包含一個線程(main線程),當一個進程包含多個線程時,
它就是多線程;一個進程事實上就是多個線程的共同協(xié)作完畢的。
?所有的java程序運營起來之后都至少包含一個線程,那就是main。方法中的線
程,CPU每一次調用時,給每一個線程分派的時間不一定是同樣的,所以看多線程程序
時,不能去看細節(jié),只要線程之間是交替出現(xiàn)的,就說明運營對的;主線程(main線程)
往往是在別的程序沒有執(zhí)行完時就結束了。
1)通過繼承Thread類創(chuàng)建線程
?CIassthreadlextendsThread
{pubIicvoidrun()〃線程的功能就是通過run方法實現(xiàn)
{……}
)
Thread1name=newThread1();
注:run(沒有返回值,沒有參數(shù))方法,線程啟動之后會自動運營run方法
?線程的啟動:thread_name.start()//start方法實際就是讓線程調用run方法,
但是不能調用:thread_name.run()
假如調用run,那么就是一個普通的方法調用,那么只有當run這個方法完全執(zhí)行完
之后,程序才會繼續(xù)執(zhí)行,此時,就不是一個多線程問題了,而是先執(zhí)行完thread再執(zhí)行
main,它就是線程的串行。
?也可以將start。方法寫在構造方法中,當創(chuàng)建線程時,線程就可以自動啟動
2)通過Runnable方法創(chuàng)建線程(適合在資源共享的時候使用)
?通過實現(xiàn)Runnable接口創(chuàng)建的其實不是Thread的繼承類,由于Runanable
接口并沒有繼承thread類,Runnable只具有一個方法run()。
?如何調用實現(xiàn)了Runnable接口的對象那?
PublicclassrunthreadimplementsRunnabIe
{publievoidrun(){.............}}
runthreadthread1=newrunthread();
Threadk1360升班。€1111川;//將此「0。€11對象傳遞給一個線程對象,從而
是懼有〃thread1的方法run()
t.start()〃通過t啟動線程。
?讓實現(xiàn)了RunnabIe接口的對象通過構造方法啟動那?
RunnabIe_thread()
(
Threadname=newThread(this);〃定義一個線稱并將本省傳遞給這個接
口。
name,start();〃通過對象名啟動線程。
)
3)Thread.currentThread().getName():返回當前線程名字。
4)在一個main方法中對一個線程只能啟動一次;即對于一個線程對象只能調用一次s
tart()方法。
6)主線程.
概念:當java程序運營時,一個線程會立刻運營,該線程通常
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙江出租車司機從業(yè)資格證考試題庫
- 特殊感染病人手術的管理
- 高中化學人教版必修第二冊 5.2.3氨氣的制備 課件
- 醫(yī)學文獻匯報分享
- 健康監(jiān)測技術課程介紹
- 氫氣能源汽車技術解析與應用前景
- 課件物理教學中的優(yōu)勢
- CATIA齒輪參數(shù)化畫法課件
- 2025年推進劑利用系統(tǒng)項目建議書
- 程門立雪識字教學課件
- 工藝執(zhí)行管理辦法
- 撲火隊伍管理辦法
- 2025年中級經(jīng)濟法試題庫及答案
- 2025年初級經(jīng)濟師工商管理試題及答案
- 中醫(yī)藥適宜技術試題庫及答案
- 事業(yè)干部考核管理辦法
- 2025年楚雄州金江能源集團有限公司招聘考試試題(含答案)
- 基于風險指標的低壓設備退役優(yōu)化及其在新加坡電網(wǎng)中的應用
- 反賄賂培訓課件圖片
- 血液透析室??谱o理常規(guī)
- GB 17051-2025二次供水設施衛(wèi)生規(guī)范
評論
0/150
提交評論