2012-03-21 32 views
7

Vì vậy, nhiệm vụ của tôi có thể đơn giản, nhưng nó đã khiến tôi boggled. Tôi đã xem qua mã trên internet, nhưng tôi không thể hiểu thấu. Tôi cũng không thể hiểu thấu các trang trình bày mà giáo viên của tôi đã đăng. Đây là những gì được yêu cầu từ tôi.Cần tạo một RunTimeException mới cho EmptyStacks

Tạo loại ngoại lệ thời gian chạy mới được gọi là EmptyStackException.

Tuy nhiên tôi không có đầu mối làm thế nào để làm cho phương pháp, lớp, biến hoặc bất cứ điều gì cần phải được thực hiện để đáp ứng yêu cầu. Tôi có một vài lớp được triển khai của một DynamicArrayStack và một LinkedStack. Giao diện cho Stack.

Bất kỳ con trỏ nào cũng sẽ hữu ích.

Cảm ơn

Mjall2

Trả lời

15

Tạo một kiểu thời gian chạy ngoại lệ mới gọi EmptyStackException.

tạo loại được thực hiện bằng

public class EmptyStackException extends RuntimeException { ... } 

Bây giờ nếu duy nhất chúng ta biết những gì để đưa vào kiểu mới này (lớp a.k.a.). Thông thường chúng ta xem xét các phương thức trong siêu lớp và ghi đè lên các phương thức cần xử lý khác nhau. Dưới đây tôi đã ghi đè một số người trong số họ nhưng được ủy nhiệm trở lại lớp hiện có. Không cần phải làm điều này nếu bạn không cần thực hiện bất kỳ thay đổi nào về hành vi.

public class EmptyStackException extends RuntimeException { 
     public EmptyStackException() { 
      super(); 
     } 
     public EmptyStackException(String s) { 
      super(s); 
     } 
     public EmptyStackException(String s, Throwable throwable) { 
      super(s, throwable); 
     } 
     public EmptyStackException(Throwable throwable) { 
      super(throwable); 
     } 
    } 
+0

Gọi super(), gọi hàm khởi tạo của RuntimeException, điều này sẽ ném ra một ngoại lệ thời gian chạy! – Mjall2

+2

Gọi super() nên * xây dựng * một RuntimeException, nó * không ném * một ngoại lệ. – Jim

+0

ngay nhưng khi chúng tôi muốn ném một, ném EmptyStackException mới(); Điều này sẽ làm tôi tin rằng tôi có thể nhận ra một sự runtimeexception? – Mjall2

1

Có vẻ như bạn có thể muốn đọc trên Java. Hãy xem The Java Tutorials, đặc biệt là cái này về Exceptions.


Nói một cách đơn giản, trường hợp ngoại lệ là một loại đặc biệt của đối tượng đại diện cho một sự kiện bên ngoài của các hoạt động bình thường của mã của bạn, gây control flow để bị phá vỡ. Ví dụ: ArrayIndexOutOfBoundsException có nghĩa là mã của bạn đã cố gắng lập chỉ mục cho một vị trí trong một mảng không tồn tại, chẳng hạn như -1.

Do sự liên kết của chúng với lỗi, ngoại lệ thường có ý nghĩa xấu đối với các lập trình viên mới hơn. Nhưng vì Java là Object Oriented, bạn có thể mở rộng RuntimeException để tạo các loại ngoại lệ tùy chỉnh của riêng bạn, điều này khá hữu ích để gỡ lỗi và mã rõ ràng. Để ném ngoại lệ tùy chỉnh trong khi mã của bạn đang thực thi, bạn sẽ phải (1) đã xác định ngoại lệ tùy chỉnh, (2) phát hiện điều kiện ngoại lệ và (3) throw ngoại lệ.

Cách đơn giản để xác định tùy chỉnh của bạn RuntimeException là xác định một lớp học như:

public EmptyStackException extends RuntimeException { 
    // customize error messages if necessay 
} 

Sau đó, bạn sẽ phát hiện và ném Exception như:

if (/** stack is empty */) { 
    throw new EmptyStackException(); 
} 

Đây chỉ là những điều cơ bản. Bạn cũng có thể xác định ngoại lệ tùy chỉnh on the fly. Hi vọng điêu nay co ich!

3

Để làm như vậy, bạn phải mở rộng lớp RuntimeException.

Có hai loại ngoại lệ trong Java: các ngoại lệ được kiểm tra và kiểm tra. RuntimeExceptions thuộc loại thứ hai. Điều này có nghĩa là họ không cần phải xử lý và tuyên bố rõ ràng.

Thông thường, một trường hợp sử dụng ngoại lệ đã kiểm tra khi viết ngoại lệ tùy chỉnh. Điều này được thực hiện bằng cách mở rộng lớp Exception. Tôi không thấy bất kỳ trường hợp sử dụng nào để tạo tùy chỉnh RuntimeException.

Dù sao, các mã sau đây cho thấy làm thế nào để viết RuntimeException riêng bạn:

public class EmptyStackException extends RuntimeException{ 

    public EmptyStackException(String message){ 
     super(message); 
    } 

} 

Từ bên trong mã nguồn của bạn, bạn có thể sử dụng điều này bằng cách tuyên bố sau:

throw new EmptyStackException("Stack was Empty, can't pop"); 

Để biết thêm thông tin về trường hợp ngoại lệ tôi khuyên bạn sau đây Tutorial

Các vấn đề liên quan