Helpex - Trao đổi & giúp đỡ Đăng nhập
442

Trong C #, tôi có thể sử dụng throw;câu lệnh để ném lại một ngoại lệ trong khi vẫn giữ nguyên dấu vết ngăn xếp:

try
{
   ...
}
catch (Exception e)
{
   if (e is FooException)
     throw;
}

Có điều gì đó giống như thế này trong Java ( điều đó không làm mất dấu vết ngăn xếp ban đầu ) không?

442 hữu ích 5 bình luận 281k xem chia sẻ
602
catch (WhateverException e) {
    throw e;
}

sẽ chỉ đơn giản là ném lại ngoại lệ bạn đã bắt (rõ ràng là phương thức xung quanh phải cho phép điều này thông qua chữ ký của nó, v.v.). Ngoại lệ sẽ duy trì dấu vết ngăn xếp ban đầu.

602 hữu ích 5 bình luận chia sẻ
83

Tôi muốn:

try
{
    ...
}
catch (FooException fe){
   throw fe;
}
catch (Exception e)
{
    // Note: don't catch all exceptions like this unless you know what you
    // are doing.
    ...
}
83 hữu ích 5 bình luận chia sẻ
79

Bạn cũng có thể bao bọc ngoại lệ trong một ngoại lệ khác VÀ giữ nguyên dấu vết ngăn xếp ban đầu bằng cách chuyển vào Ngoại lệ dưới dạng Có thể ném làm tham số nguyên nhân:

try
{
   ...
}
catch (Exception e)
{
     throw new YourOwnException(e);
}
79 hữu ích 3 bình luận chia sẻ
21

Trong Java cũng gần giống như vậy:

try
{
   ...
}
catch (Exception e)
{
   if (e instanceof FooException)
     throw e;
}
21 hữu ích 4 bình luận chia sẻ
14

Trong Java, bạn chỉ cần ném ngoại lệ mà bạn đã bắt được, throw ethay vì chỉ throw. Java duy trì dấu vết ngăn xếp.

14 hữu ích 0 bình luận chia sẻ
6

một cái gì đó như thế này

try 
{
  ...
}
catch (FooException e) 
{
  throw e;
}
catch (Exception e)
{
  ...
}
6 hữu ích 0 bình luận chia sẻ
5
public int read(byte[] a) throws IOException {
    try {
        return in.read(a);
    } catch (final Throwable t) {
        /* can do something here, like  in=null;  */
        throw t;
    }
}

Đây là một ví dụ cụ thể trong đó phương thức ném một IOException. Phương finaltiện tchỉ có thể giữ một ngoại lệ được ném ra từ khối thử. Tài liệu đọc thêm có thể được tìm thấy ở đâyở đây .

5 hữu ích 1 bình luận chia sẻ
3

Dấu vết ngăn xếp được xử lý nếu bạn bọc số lần xuất hiện đã được xử lý thành một ngoại lệ khác (để cung cấp thêm thông tin) hoặc nếu bạn chỉ ném lại lần xuất hiện đã được xử lý.

try{ ... }catch (FooException e){ throw new BarException("Some usefull info", e); }

3 hữu ích 0 bình luận chia sẻ
2

Tôi vừa gặp phải một tình huống tương tự, trong đó mã của tôi có khả năng ném ra một số ngoại lệ khác nhau mà tôi chỉ muốn ném lại. Giải pháp được mô tả ở trên không hoạt động đối với tôi, vì Eclipse đã nói với tôi rằng điều đó throw e;dẫn đến một ngoại lệ không hợp lệ, vì vậy tôi chỉ thực hiện điều này:

try
{
...
} catch (NoSuchMethodException | SecurityException | IllegalAccessException e) {                    
    throw new RuntimeException(e.getClass().getName() + ": " + e.getMessage() + "\n" + e.getStackTrace().toString());
}

Đã làm cho tôi....:)

2 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ java exception , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading