Thông tin tài liệu:
Exception là một loại lỗi đặc biệt. Lỗi này xuất hiện vào lúc thực thi chương trình. Cáctrạng thái không bình thường xảy ra trong khi thi hành chương trình tạo ra các exception.Những trạng thái này không được biết trước trong khi ta đang xây dựng chương trình.Nếu bạn không xử lý các trạng thái này thì chương trình có thể bị kết thúc đột ngột. Vídụ, việc chia cho 0 sẽ tạo một lỗi trong chương trình. Ngôn ngữ Java cung cấp cơ chếdùng để xử lý ngoại lệ rất hiệu quả. Việc xử lý này làm hạn...
Nội dung trích xuất từ tài liệu:
Giáo trình java cơ bản - Chương 7Chương7 XỬLÝNGOẠILỆ(ExceptionHandling)Saukhikếtthúcchươngnày,bạncóthểnắmđượccácnộidungsau: Địnhnghĩamộtngoạilệ(Exception) Hiểuđượcmụcđíchcủaviệcxửlýngoạilệ HiểuđượccáckiểungoạilệkhácnhautrongJava Môtảmôhìnhxửlýngoạilệ Hiểuđượccáckhốilệnhchứanhiềukhốixửlýngoạilệ(catch) Môtảcáchsửdụngcáckhối‘try’,‘catch’và‘finally’ Giảithíchcáchsửdụngcáctừkhoá‘throw’và‘throws’ Tựtạoracácngoạilệ 7.1GiớithiệuExceptionlàmộtloạilỗiđặcbiệt.Lỗinàyxuấthiệnvàolúcthựcthichươngtrình.Cáctrạngtháikhôngbìnhthườngxảyratrongkhithihànhchươngtrìnhtạoracácexception.Nhữngtrạngtháinàykhôngđượcbiếttrướctrongkhitađangxâydựngchươngtrình.Nếubạnkhôngxửlýcáctrạngtháinàythìchươngtrìnhcóthểbịkếtthúcđộtngột.Vídụ,việcchiacho0sẽtạomộtlỗitrongchươngtrình.NgônngữJavacungcấpcơchếdùngđểxửlýngoạilệrấthiệuquả.Việcxửlýnàylàmhạnchếtốiđatrườnghợphệthốngbịhỏng(crash)hayhệthốngbịngắtđộtngột.TínhnăngnàylàmchoJavatrởthànhmộtngônngữlậptrìnhmạnh.7.2MụcđíchcủaviệcxửlýngoạilệMộtchươngtrìnhnêncócơchếxửlýngoạilệthíchhợp.Nếukhông,chươngtrìnhsẽbịngắtkhimộtngoạilệxảyra.Trongtrườnghợpđó,tấtcảcácnguồntàinguyênmàhệthốngđãcấpkhôngđượcgiảiphóng.Điềunàygâylãngphítàinguyên.Đểtránhtrườnghợpnày,tấtcảcácnguồntàinguyênmàhệthốngcấpnênđượcthuhồilại.Tiếntrìnhnàyđòihỏicơchếxửlýngoạilệthíchhợp.Vídụ,xétthaotácvàora(I/O)trongmộttậptin.Nếuviệcchuyểnđổikiểudữliệukhôngthựchiệnđúng,mộtngoạilệsẽxảyravàchươngtrìnhbịhủymàkhôngđóngtậptinlại.Lúcđótậptindễbịhưhạivàcácnguồntàinguyênđượccấpphátchotậptinkhôngđượctrảlạichohệthống.Chương 7: Xử lý ngoại lệ (Exception Handling) 1757.3XửlýngoạilệKhimộtngoạilệxảyra,đốitượng(object)tươngứngvớingoạilệđóđượctạora.Đốitượngnàysauđóđượctruyềnchophươngthứclànơimàngoạilệxảyra.Đốitượngnàychứathôngtinchitiếtvềngoạilệ.Thôngtinnàycóthểđượcnhậnvềvàđượcxửlý.Cácmôitrườngruntimenhư‘IllegalAccessException’,‘EmptyStackException’v.v…cóthểtạorangoạilệ.Chươngtrìnhđôikhicóthểtựtạorangoạilệ.Lớp‘Throwable’đượcJavacungcấplàlớptrêncùngcủalớpException(lớpđầutiêntrongcâythừakế),lớpnàylàlớpchacủatấtcảcácngoạilệkhác.7.4MôhìnhxửlýngoạilệTrongJava,môhìnhxửlýngoạilệgiámsátviệcthựcthimãđểpháthiệnngoạilệ.MôhìnhxửlýngoạilệcủaJavađượcgọilà‘catchandthrow’.Trongmôhìnhnày,khimộtngoạilệxảyra,ngoạilệsẽbịchặnvàchươngtrìnhchuyểnđếnmộtkhốixửlýngoạilệ.Ngườilậptrìnhphảixửlýcácngoạilệkhácnhaucóthểphátsinhtrongchươngtrình.Cácngoạilệphảiđượcxửlý,hoặcthoátkhỏichươngtrìnhkhinóxảyra.NgônngữJavacungcấp5từkhoásauđểxửlýcácngoạilệ: try catch throw throws finally Dướiđâylàcấutrúccủamôhìnhxửlýngoạilệ:try{ //đoạnmãcókhảnănggâyrangoạilệ}catch(Exceptione1){ //Nếucáclệnhtrongkhối‘try’tạorangoạilệcóloạie1,thìthựchiện//xửlýngoạilệ nếukhôngchuyểnxuốngkhốicatchtiếptheo}catch(Exceptione2)176 Core Java{ //Nếucáclệnhtrongkhối‘try’tạorangoạilệcóloạie2,thìthựchiện//xửlýngoạilệ nếukhôngchuyểnxuốngkhốicatchtiếptheo}catch(ExceptioneN){ //Nếucáclệnhtrongkhối‘try’tạorangoạilệcóloạieN,thìthựchiện//xửlýngoạilệ nếukhôngchuyểnxuốngkhốicatchtiếptheo}finally{ //khốilệnhnayluônđượcthựchiệnchodùngoạilệcóxảyrahaykhông.}7.4.1Cácưuđiểmcủamôhình‘catchvàthrow’Môhình‘catchvàthrow’cóhaiưuđiểm: Ngườilậptrìnhchỉphảixửlýngoạilệkhicầnthiết.Khôngcầnphảithựchiệntại mọimức. Thôngbáolỗicóthểđượchiệnrakhitiếnhànhxửlýngoạilệ.7.4.2Cáckhối‘try’và‘catch’Khối‘trycatch’đượcsửdụngđểthihànhmôhình‘catchvàthrow’củaviệcxửlýngoạilệ.Khối‘try’chứamộttậplệnhcóthểthihànhđược.Cácngoạilệcóthểbịchặnkhithihànhtậplệnhnày.Phươngthứccókhảnăngtạorangoạilệcóthểđượckhaibáotrongkhối‘try’.Mộthaynhiềukhối‘catch’cóthểtheosaumộtkhối‘try’.Cáckhối‘catch’nàybắtcácngoạilệcókhảnăngtạoratrongtrongkhối‘try’.Hãyxemkhối‘try’dướiđây:try{ doFileProcessing();//ph ...