Bất kỳ bạn có thể giải thích sự khác biệt giữa throw
, throws
và Throwable
và thời điểm sử dụng không?Xử lý ngoại lệ: ném, ném và Throwable
Trả lời
throws
: Được sử dụng khi viết phương pháp, tuyên bố rằng phương pháp trong câu hỏi ném xác định (kiểm tra) là ngoại lệ.Ngược lại với ngoại lệ đã kiểm tra, ngoại lệ thời gian chạy (NullPointerExceptions v.v.) có thể được ném mà không cần phương thức khai báo
throws NullPointerException
.throw
: Hướng dẫn thực sự ném ngoại lệ. (Hoặc cụ thể hơn, Có thể ném).Từ khóa ném được theo sau bởi tham chiếu đến
Throwable
(thường là ngoại lệ).
Ví dụ:
Throwable
: Một lớp học mà bạn phải mở rộng để tạo riêng, tùy chỉnh của bạn, Throwable.
Ví dụ:
Throw
được sử dụng để ném ngoại lệ, throws
(nếu tôi đoán một cách chính xác) được sử dụng để chỉ ra phương pháp mà có thể ném ngoại lệ đặc biệt, và lớp Throwable
là lớp cha của tất cả các lỗi và ngoại lệ trong Java
ném - Nó được sử dụng để ném một tuyên bố Exception.The ném đòi hỏi một cuộc tranh luận duy nhất: một đối tượng lớp Throwable
ném - Đây được sử dụng để xác định rằng phương pháp này có thể ném ngoại lệ
Có thể ném - Đây là lớp cha của tất cả các lỗi và ngoại lệ trong ngôn ngữ Java. bạn chỉ có thể ném những vật thể xuất phát từ lớp Throwable. Throwable chứa một bản chụp của việc thực hiện chồng chủ đề của nó tại thời điểm nó được tạo ra
throw
: tuyên bố để ném đối tượngt
nơit instanceof java.lang.Throwable
phải là sự thật.throws
: mã thông báo chữ ký phương thức để chỉ định ngoại lệ đã kiểm trathrow
n theo phương pháp đó.java.lang.Throwable
: loại cha của tất cả các đối tượng có thể được ném (và bị bắt).
+1 cho câu trả lời dạng viên nang. – 0x6900
Điều này thực sự dễ hiểu.
Các java.lang.Throwable:
Lớp
Throwable
là các lớp cha của tất cả các lỗi và ngoại lệ trong ngôn ngữ Java. Chỉ có đối tượng là trường hợp của lớp học này (hoặc một trong các lớp con của nó) là được ném bởi Máy ảo Java hoặc có thể được ném bởi câu lệnh Javathrow
. Tương tự, chỉ lớp này hoặc một trong số các lớp con của nó có thể là đối số nhập vào mệnh đềcatch
. More
Các từ khóa ném được sử dụng trong phương pháp kê khai, điều này xác định loại ngoại lệ [lớp Throwable] chúng ta có thể mong đợi từ phương pháp này.
Từ khóa ném được sử dụng để ném một đối tượng là thể hiện của lớp Throwable.
Kẻo thấy một số ví dụ:
Chúng tôi tạo ra ourself một lớp ngoại lệ
public class MyException super Exception {
}
Các chúng ta tạo ra một phương pháp mà tạo ra một đối tượng từ lớp ngoại lệ của chúng tôi và ném nó sử dụng từ khóa ném.
private void throwMeAException() throws MyException //We inform that this method throws an exception of MyException class
{
Exception e = new MyException(); //We create an exception
if(true) {
throw e; //We throw an exception
}
}
Khi chúng ta sẽ sử dụng phương pháp throwMeAException()
, chúng tôi buộc phải chăm sóc nó một cách cụ thể bởi vì chúng tôi có những thông tin mà nó ném một cái gì đó, trong trường hợp này, chúng tôi có ba tùy chọn.
Đầu tiên lựa chọn là sử dụng khối try và catch để xử lý các ngoại lệ:
private void catchException() {
try {
throwMeAException();
}
catch(MyException e) {
// Here we can serve only those exception that are instance of MyException
}
}
tùy chọn thứ hai là phải vượt qua các ngoại lệ
private void passException() throws MyException {
throwMeAException(); // we call the method but as we throws same exception we don't need try catch block.
}
tùy chọn thứ ba là để bắt và tái ném ngoại lệ
private void catchException() throws Exception {
try {
throwMeAException();
}
catch(Exception e) {
throw e;
}
}
Tiếp tục, khi bạn cần dừng một số hành động, bạn có thể ném ngoại lệ sẽ quay lại cho đến khi không phải là máy chủ bởi một số khối try-catch. Bất cứ nơi nào Bạn sử dụng phương pháp ném một ngoại lệ Bạn nên xử lý nó bằng khối try-catch hoặc thêm các khai báo vào các phương thức của bạn.
Ngoại lệ của quy tắc này là java.lang.RuntimeException
những quy tắc này không phải được khai báo. Đây là một câu chuyện khác như là khía cạnh của việc sử dụng ngoại lệ.
Ví dụ hay. Cảm ơn thời gian và nỗ lực của bạn trong việc giải thích cho tôi điều này. – Sumithra
Ném:
được sử dụng để thực sự ném ngoại lệ, trong khi ném là khai báo cho phương pháp này. Họ không thể hoán đổi cho nhau.
throw new MyException("Exception!);
Ném:
này được sử dụng khi bạn không sử dụng câu lệnh catch trong mã của bạn nhưng bạn biết rằng lớp học đặc biệt này có khả năng ném vậy và như vậy ngoại lệ (chỉ kiểm tra ngoại lệ). Trong này, bạn không sử dụng try catch block nhưng viết bằng cách sử dụng mệnh đề throw tại điểm thích hợp trong mã của bạn và ngoại lệ được ném cho người gọi phương thức và được xử lý bởi nó. Ngoài ra các từ khóa ném được sử dụng khi chức năng có thể ném một ngoại lệ kiểm tra.
public void myMethod(int param) throws MyException
Cùng câu trả lời như trên nhưng với copy-paste niềm vui:
public class GsonBuilderHelper {
// THROWS: method throws the specified (checked) exception
public static Object registerAndRun(String json) throws Exception {
// registering of the NaturalDeserializer
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer());
Gson gson = gsonBuilder.create();
Object natural = null;
try {
// calling the NaturalDeserializer
natural = gson.fromJson(json, Object.class);
} catch (Exception e) {
// json formatting exception mainly
Log.d("GsonBuilderHelper", "registerAndRun(json) error: " + e.toString());
throw new Exception(e); // <---- THROW: instance of class Throwable.
}
return natural;
}
}
Throwable :
trong Java, tất cả của lỗi và lớp execption của đang drieved từ lớp java.lang.Throwable. Nó là đầu của hệ thống phân cấp của các lớp lỗi và ngoại lệ. Chỉ các đối tượng là các cá thể của lớp này (hoặc một trong các lớp con của nó) được ném bởi Máy ảo Java hoặc có thể được ném bởi câu lệnh Java throw.
Throws:
là công cụ sửa đổi sau phương pháp và chỉ định phương pháp nào có thể được thực thi. Nếu chúng được kiểm tra ngoại lệ, trình biên dịch sẽ đảm bảo mã gọi phương thức đó phải bắt các ngoại lệ được kiểm tra này.
Throw:
tuyên bố được sử dụng để ném lỗi hoặc ngoại lệ. câu lệnh throw yêu cầu một đối số duy nhất: một cá thể của bất kỳ lớp con nào của lớp Throwable hoặc lớp Throwable. Việc thực thi lệnh throw sẽ kích hoạt JVM để ném ngoại lệ này và gây ra một ngoại lệ xảy ra.
Danh sách vài ...
Ném
- Java
throw
từ khóa được sử dụng để rõ ràngthrow
một ngoại lệ. - Ngoại lệ được kiểm tra không thể được truyền bá chỉ sử dụng
throw
. Throw
được theo sau bởi một phiên bản.Throw
được sử dụng trong phương pháp.- Bạn không thể
throw
nhiều ngoại lệ.
Ném
- Java
throws
từ khóa được sử dụng để khai báo một ngoại lệ. - Ngoại lệ được kiểm tra có thể được nhân giống với
throws
. Throws
được theo sau bởi lớp học.Throws
được sử dụng với chữ ký phương thức.- Bạn có thể khai báo nhiều ngoại lệ ví dụ:
public void method()throws IOException,SQLException
Có 2 loại chính của Exceptions:
Runtime Exceptions (đánh dấu): ví dụ. NullPointerException, ClassCastException, ..
Ngoại lệ đã kiểm tra: ví dụ: FileNotFoundException, CloneNotSupportedException, ..
Trường hợp ngoại lệ thời gian chạy là ngoại lệ xảy ra trong thời gian chạy và nhà phát triển không nên cố gắng nắm bắt hoặc dừng nó. Bạn chỉ viết mã để tránh chúng hoặc ra lệnh ném, khi tiêu chí lỗi được đáp ứng. Chúng tôi sử dụng ném bên trong cơ thể phương pháp.
public Rational(int num, int denom){
if(denom <= 0) {
throw new IllegalArgumentException("Denominator must be positive");
}
this.num=num;
this.denom=denom;
}
Tuy nhiên đối với trường hợp ngoại lệ Kiểm tra, JVM hy vọng bạn để xử lý nó và sẽ cung cấp cho lỗi biên dịch nếu không được xử lý, do đó bạn tuyên bố rằng nó ném kiểu của ngoại lệ như bên dưới trong phương pháp clone().
Class Employee{
public Employee clone() throws CloneNotSupportedException{
Employee copy = (Employee)super.clone();
copy.hireDate = (Date)hireDate.clone();
return copy;
}
}
1. throw keyword used to throw user defined exceptions.(we can throw predefined exception too).
2. Using throws keyword we can explicitly provide the information about unhand-led exceptions of the method to the end user, Java compiler, JVM.
Ném vs ném
http://www.instanceofjava.com/2016/04/exception-handling-interview-questions.html
- 1. Ném ngoại lệ trong bộ xử lý ngoại lệ
- 2. Xử lý ngoại lệ Netty - Trình xử lý ném ngoại lệ, sau đó là gì?
- 3. Ném và bắt ngoại lệ
- 4. ném mới std :: ngoại lệ vs ném std :: ngoại lệ
- 5. SafeFileHandle.Close ném ngoại lệ nhưng xử lý hợp lệ và hoạt động
- 6. chênh lệch giữa ném và ném ngoại lệ mới()
- 7. WebAuthenticationBroker.AuthenticateAsync ném ngoại lệ
- 8. LLVM ngoại lệ ném
- 9. BeginInvoke ném ngoại lệ
- 10. recursive_directory_iterator ném ngoại lệ
- 11. autoFocus ném ngoại lệ
- 12. Ngoại lệ ném
- 13. TransactionScope ném ngoại lệ
- 14. ném ngoại lệ
- 15. Xử lý lỗi Tôi có nên ném ngoại lệ không? Hoặc xử lý tại nguồn?
- 16. Khi trả lại bool, hãy ném ngoại lệ và ngoại lệ nào để ném
- 17. symfony2 và ném ngoại lệ lỗi
- 18. Làm thế nào để ném và xử lý các ngoại lệ trong Đề án R6RS
- 19. WebDriver getText ném ngoại lệ
- 20. Worksheet get_Range ném ngoại lệ
- 21. C# finalizer ném ngoại lệ?
- 22. Tái ném một ngoại lệ đích InvocationTargetException
- 23. Xử lý ngoại lệ AOP
- 24. Làm thế nào để tái ném một ngoại lệ
- 25. C# Ngoại lệ ném lại
- 26. Không có ngoại lệ loại DataAccessException có thể được ném; loại ngoại lệ phải là một lớp con của Throwable
- 27. Ném ngoại lệ và thông báo cho người dùng
- 28. Tôi nên ném loại ngoại lệ nào?
- 29. Giao diện Java ném ngoại lệ nhưng việc triển khai giao diện không ném ngoại lệ?
- 30. Ném nhiều ngoại lệ trong .Net/C#
Java không có gì. Nó có một phương thức 'throw' của lớp Throwable, và nó có một từ khóa' throws' được sử dụng trên các tiêu đề phương thức. Họ là hai điều khá khác nhau. Quên về 'ném' lúc đầu và chỉ ra những gì 'ném' nào. 'ném 'chỉ là cần thiết để giữ cho trình biên dịch hài lòng. –