Ngoại lệ là gì?
Một ngoại lệ đề cập đến một vấn đề phát sinh trong quá trình thực hiện chương trình. Nó được mang lại bởi một tình huống bất ngờ. Một ví dụ điển hình là khi bạn đang thực hiện một phép chia và sau đó bạn chia cho không (0). Một ngoại lệ sẽ được nêu ra.
Trong Hướng dẫn Visual Basic này, bạn sẽ học:
- Ngoại lệ là gì?
- Xử lý ngoại lệ là gì?
- Cú pháp của Thử / Bắt
- Ví dụ để xử lý các trường hợp ngoại lệ
- Ngoại lệ do người dùng xác định
- Ném đồ vật
Xử lý ngoại lệ là gì?
Với các ngoại lệ, bạn có thể chuyển quyền điều khiển chương trình từ phần này sang phần khác. Trong VB.NET, các ngoại lệ được xử lý bằng cách sử dụng 4 từ khóa sau:
Từ khóa | Chi tiết |
Thử | Công việc của khối Thử là xác định khối mã mà một ngoại lệ cụ thể sẽ được kích hoạt. Nó phải được theo sau bởi (các) khối bắt. |
Nắm lấy | Bắt ngoại lệ được thực hiện trong khối này. Nó là một trình xử lý ngoại lệ trong đó Ngoại lệ được xử lý. |
Cuối cùng | Sử dụng khối Cuối cùng để chạy một tập hợp các câu lệnh cho dù có ngoại lệ xảy ra hay không. |
Phi | Một ngoại lệ được đưa ra sau khi sự cố xảy ra. Đây là công việc của từ khóa Throw. |
Cú pháp của Thử / Bắt
Câu lệnh Try / Catch có cú pháp dưới đây:
Try[ try_Statement(s) ][ Exit Try ][ Catch [ exception_name [ As type ] ] [ When expression ][ catch_Statement(s) ][ Exit Try ] ][ Catch… ][ Finally[ finally_Statement(s) ] ]End Try
Khối Thử / Bắt phải bao quanh mã có thể tạo ra một ngoại lệ. Mã này được gọi là mã được bảo vệ. Bạn có thể sử dụng nhiều câu lệnh bắt khi bạn cần bắt nhiều loại ngoại lệ khác nhau.
Ví dụ để xử lý các trường hợp ngoại lệ
Với các câu lệnh Try / Catch, bạn có thể tách mã chương trình thông thường của mình khỏi Hệ thống xử lý lỗi. Hãy để chúng tôi trình bày cách xử lý một ngoại lệ bằng cách sử dụng các từ khóa Thử, Bắt và Cuối cùng.
Bước 1) Tạo một ứng dụng bảng điều khiển mới.
Bước 2) Sử dụng mã này:
Module Module1Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)Dim answer As IntegerTryanswer = n1 \ n2Catch ex As DivideByZeroExceptionConsole.WriteLine("Exception: {0}", ex)FinallyConsole.WriteLine("Answer is: {0}", answer)End TryEnd SubSub Main()divisionFunction(4, 0)Console.ReadKey()End SubEnd Module
Bước 3) Nhấp vào nút Bắt đầu từ thanh công cụ để thực thi mã. Bạn sẽ nhận được kết quả sau:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Tạo một mô-đun có tên là Module1.
- Tạo một thủ tục con có tên là splitFunction với hai đối số nguyên n1 và n2. ByVal là một từ khóa VB.NET cho biết rằng giá trị của các đối số sẽ được chuyển theo giá trị.
- Tạo một biến số nguyên có tên là câu trả lời.
- Bắt đầu khối Thử / Bắt. Chúng tôi cần bao quanh mã mà chúng tôi nghi ngờ có thể tạo ra một ngoại lệ với khối này.
- Thực hiện phép chia giữa các giá trị của biến n1 và n2. Kết quả của phép toán chia được gán cho câu trả lời là biến. Mã này có thể đưa ra một ngoại lệ, ví dụ, khi chúng ta chia một số cho số 0, do đó chúng ta đã bao quanh nó bằng các khối Thử / Bắt.
- Bắt Exception có tên là SplitByZeroException và gán thông báo ngoại lệ đã tạo cho ngoại lệ.
- In một số văn bản trên bảng điều khiển để thông báo cho người dùng về loại / tên của Ngoại lệ đã được nêu ra.
- Khối Cuối cùng. Điều này sẽ thực thi cho dù một ngoại lệ có được bắt hay không.
- In một số văn bản trên bảng điều khiển hiển thị kết quả của phép toán chia.
- Kết thúc khối Thử, nghĩa là kết thúc mã xử lý lỗi.
- Kết thúc thủ tục con Phép chia.
- Bắt đầu thủ tục phụ chính.
- Gọi / gọi thủ tục con DivisionFunction. Giá trị của hai đối số nguyên được chuyển vào đây. Giá trị của n1 = 4 và n2 = 0. Điều này có nghĩa là phép toán chia sẽ là 4 \ 0, tức là n1 \ n2.
- Tạm dừng cửa sổ bảng điều khiển để chờ người dùng thực hiện hành động để đóng nó.
- Kết thúc thủ tục phụ chính.
- Kết thúc học phần.
Ngoại lệ do người dùng xác định
VB.NET cho phép bạn xác định các ngoại lệ của riêng mình. Bạn có thể nhận các lớp ngoại lệ do người dùng xác định từ lớp ApplicationException. Hãy để chúng tôi chứng minh điều này bằng một ví dụ:
Bước 1) Tạo một ứng dụng bảng điều khiển mới.
Bước 2) Sử dụng mã sau:
Module Module1Public Class HeightIsZeroException : Inherits ApplicationExceptionPublic Sub New(ByVal text As String)MyBase.New(text)End SubEnd ClassPublic Class HeightDim height As Integer = 0Sub showHeight()If (height = 0) ThenThrow (New HeightIsZeroException("Zero Height found"))ElseConsole.WriteLine("Height is: {0}", height)End IfEnd SubEnd ClassSub Main()Dim hght As Height = New Height()Tryhght.showHeight()Catch ex As HeightIsZeroExceptionConsole.WriteLine("HeightIsZeroException: {0}", ex.Message)End TryConsole.ReadKey()End SubEnd Module
Bước 3) Nhấp vào nút Bắt đầu từ thanh trên cùng để thực thi mã. Bạn sẽ nhận được kết quả sau:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Tạo một mô-đun có tên là Module1.
- Tạo một lớp ngoại lệ có tên là HeightIsZeroException. Lớp kế thừa tất cả lớp ApplicationException.
- Tạo một thủ tục con có tên là Mới. Nó sẽ nhận một đối số chuỗi có tên là văn bản.
- Gọi hàm tạo lớp cơ sở và truyền cho nó đối số trên.
- Kết thúc thủ tục phụ Mới.
- Kết thúc lớp HeightIsZeroException.
- Tạo một lớp có tên là Chiều cao. Công cụ sửa đổi quyền truy cập công khai của nó là Công khai, có nghĩa là nó sẽ có thể truy cập công khai.
- Tạo một biến số nguyên có tên là Chiều cao và khởi tạo giá trị của nó bằng 0.
- Tạo một thủ tục con có tên showHeight ().
- Kiểm tra xem giá trị của biến Height bằng 0. Chúng ta đã sử dụng điều kiện If… Then.
- Để ném HeightIsZeroException nếu điều kiện trên là đúng. Thông báo Tìm thấy độ cao bằng không sẽ được hiển thị khi Ngoại lệ này được ném.
- Phần khác sẽ được thực hiện khi điều kiện If không đúng.
- Thông báo in trên bảng điều khiển hiển thị Chiều cao khi nó không phải là 0.
- Kết thúc điều kiện If.
- Kết thúc quy trình con showHeight ().
- Chiều cao cuối lớp.
- Bắt đầu thủ tục phụ chính.
- Tạo một đối tượng có tên là Chiều cao như một thể hiện của lớp Chiều cao.
- Bắt đầu khối xử lý ngoại lệ.
- Gọi thủ tục con showHeight () được xác định trong lớp Chiều cao. Chúng tôi đã sử dụng một đối tượng của lớp này để truy cập vào phương thức này. Dòng này có thể dẫn đến một ngoại lệ. Do đó, chúng tôi đã bao quanh nó bằng một mã xử lý ngoại lệ.
- Bắt ngoại lệ HeightIsZeroException dưới dạng đối tượng cũ trong trường hợp nó xảy ra.
- Thông báo sẽ in trên bảng điều khiển khi bắt được HeightIsZeroException.
- Kết thúc khối xử lý ngoại lệ.
- Tạm dừng cửa sổ bảng điều khiển để chờ người dùng thực hiện hành động để đóng nó.
- Kết thúc thủ tục phụ chính.
- Kết thúc học phần.
Ném đồ vật
Trong xử lý ngoại lệ, bạn có thể chọn ném một đối tượng. Tuy nhiên, đối tượng phải có nguồn gốc từ Hệ thống. Lớp ngoại lệ, trực tiếp hoặc gián tiếp. Ví dụ:
Bước 1) Tạo một ứng dụng bảng điều khiển mới.
Bước 2) Sử dụng mã sau:
Module Module1Sub Main()TryThrow New ApplicationException("Throwing a custom exception")Catch ex As ExceptionConsole.WriteLine(ex.Message)FinallyConsole.WriteLine("The Finally Block")End TryConsole.ReadKey()End SubEnd Module
Bước 3) Nhấp vào nút Bắt đầu từ thanh trên cùng để thực thi mã. Bạn sẽ nhận được những điều sau:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Tạo một mô-đun có tên là Module1.
- Bắt đầu thủ tục phụ chính.
- Bắt đầu mã xử lý lỗi.
- Ném một đối tượng ngoại lệ. Mã này có thể tạo ra một ngoại lệ do đó chúng tôi đã bao quanh nó bằng một khối Thử / Bắt.
- Bắt một ngoại lệ dưới dạng đối tượng ex nếu dòng ném một ngoại lệ.
- In thông báo ngoại lệ trên bảng điều khiển trong trường hợp nó xảy ra.
- Khối Cuối cùng để chạy cho dù một ngoại lệ có được bắt hay không.
- Thông báo sẽ in trên bảng điều khiển khi khối Cuối cùng được thực thi.
- Kết thúc mã xử lý ngoại lệ.
- Tạm dừng bảng điều khiển một lúc để chờ người dùng thực hiện hành động để đóng bảng điều khiển.
- Kết thúc thủ tục phụ chính.
- Kết thúc học phần.
Tóm lược
- Một ngoại lệ đề cập đến một vấn đề phát sinh trong quá trình thực hiện chương trình do một tình huống bất ngờ mang lại.
- Nếu bạn nghi ngờ rằng một số mã sẽ tạo ra một ngoại lệ, hãy bao quanh nó bằng một khối Thử / Bắt.
- Khối Cuối cùng xuất hiện sau khối Thử / Bắt và thực thi xem có bắt được ngoại lệ hay không.
- VB.NET cho phép chúng ta tạo các ngoại lệ tùy chỉnh.