- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么这段代码是正确的:
thử {
} catch(ArrayOutOfBoundsException e) {}
这是错误的:
thử {
} catch(IOException e) {}
这段代码是错误的,因为在 thử
主体中从未抛出 Ngoại lệ IO
,但在第一个主体中也从未抛出 ArrayOutOfBoundsException
。第一个代码是正确的。为什么??我是否也可以创建自己的异常,例如 Ngoại lệ IO
(必须在捕获之前抛出)?
1 Câu trả lời
ArrayIndexOutOfBoundsException
是一个运行时异常(因为它是 java.lang.RuntimeException
的子级),因此理论上它可以在任何地方抛出。任何代码都可以抛出所有运行时异常,而包含方法不需要在 ném
子句中声明它;因此编译器不会尝试检查任何给定代码块是否实际抛出此类异常。无论如何,这在任何非平凡的情况下都是不可能的;任何包含对非最终类的至少一个方法调用的代码都可能抛出这样的异常(即使您当前的类都没有这样做,也可以在运行时使用不同的子类来这样做) .
Mặt khác,Ngoại lệ IO
是一个已检查的异常,因此只能由在其 ném
子句*中明确声明它的方法抛出。
Xem thêm this Sun article有关已检查异常与未检查异常的更多哲学。还要注意,这有点像是一场宗教 war ,双方都在插入所有异常(exception)情况。
biên tập:澄清一下,在您的第一个示例中,编译器Có thể可能会验证 AIOOBE 永远不会被抛出。但事实并非如此;首先,因为它只能在这种简单的情况下(比如这个)这样做,不会带来任何实际好处;其次,如果有时允许您包含“不可能的”运行时异常但有时不允许包含它,则可能会更加困惑,例如:
// Preparation stuff
private void myNoop() {}
public void publicNoop() {}
public final void finalNoop() {}
// hypothetically illegal (same as your first example)
thử {
// do nothing
} catch (ArrayIndexOutOfBoundsException e) {}
// hypothetically illegal (myNoop() can't be overridden)
thử {
myNoop();
} catch (ArrayIndexOutOfBoundsException e) {}
// hypothetically illegal (finalNoop() can't be overridden)
thử {
finalNoop();
} catch (ArrayIndexOutOfBoundsException e) {}
// legal (publicNoop() could do anything at runtime)
thử {
publicNoop();
} catch (ArrayIndexOutOfBoundsException e) {}
在我看来,更改方法(或实际上是类)的访问级别或最终性会突然改变捕获某些运行时异常的合法性,这似乎很奇怪。尤其是当您考虑到 catch block 在堆栈中的级别可能比被更改的方法高几个级别时...
此外,拥有一个永远不会被调用的 catch block 是无害的,真的。 “如果出现 AIOOBE,这就是你如何处理它”——而且它永远不会在运行时发生。实际上,检查异常也会发生同样的情况;例如,Callable.call()
被声明为抛出 Ngoại lệ
,但您正在使用的特定实现可能永远不会抛出任何异常 - 因此,您将再次获得有关如何处理永远不会在运行时调用的异常的说明。
最终,编译器只是指出了差异——“你确定你打算捕获 IOException,因为这段代码永远不会运行吗?”这就像静态类型,因为它会自动提醒您界面的变化。存在运行时异常,因此您不必声明每一个方法来抛出 NullPointerException
等。
*从技术上讲,这不是严格意义上的,这有一些低级漏洞,但从广义上讲是这样的。异常通常是异常、人工制品和/或已弃用。
关于Java:异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1714240/
Vấn đề rất đơn giản: Tôi đang tìm một cách thanh lịch để sử dụng CompletableFuture#exceptionally cùng với CompletableFuture#supplyAsync. Cách này không hiệu quả: private void
Đối với các dịch vụ web, chúng tôi thường sử dụng maven-jaxb2-plugin để tạo java bean và sử dụng mã hóa JAXB2 trong Spring. Tôi muốn biết cách xử lý (SOAP-
Câu hỏi này đã có câu trả lời: Chỉ số mảng nằm ngoài hành vi giới hạn (10 câu trả lời) Đã đóng 8 năm trước. Tôi tò mò về đoạn mã C sau int main(){
Khi tôi khởi tạo đối tượng MediaPlayer với ngữ cảnh và tài nguyên ở đầu lớp, nó sẽ ném ra ngoại lệ NullPointer, nhưng khi tôi khai báo nó ở đầu lớp (do đó nó là null) rồi khởi tạo nó theo cùng một cách trong phương thức onCreate, nó sẽ ném ra ngoại lệ NullPointer.
Xin chào, tôi đang cố gắng kết nối một chương trình Java với REST API. Với cùng đoạn mã đó, tôi đã nhận được ngoại lệ Java trong Java 6 và nó hoạt động tốt trong Java 8. Cùng một môi trường: Trust machine unix user agent
Tôi đang cố gắng phân tích Twitter bằng Flume và Hive. Để lấy tweet từ twitter, tôi đã thiết lập tất cả các tham số bắt buộc (consumerKey, consumer
Tôi gặp một số vấn đề với ngoại lệ JavaFX. Dự án của tôi đang chạy trên Eclipse, nhưng bây giờ bạn tôi cũng đang cố gắng truy cập vào dự án đó. Chúng tôi đã chia sẻ và lưu trực tiếp vào thư mục Dropbox. Nhưng ông ấy không thể thực hiện được điều đó. Anh ấy đang ở bàn điều khiển
Giả sử tôi đã xác minh ID email bằng sự kiện blur(), tôi sẽ thực hiện như sau: $('#email').blur(function(){ //thực hiện lệnh gọi ajax, kiểm tra xem có trùng lặp không
Tôi làm điều này để gọi các hàm không được quản lý từ mã C. pCallback là một con trỏ hàm và do đó là một đại biểu ở phía được quản lý. [DllImport("MyDLL.dll")] công khai tĩnh
Tại sao đoạn mã này đúng: try { } catch(ArrayOutOfBoundsException e) {} Đoạn mã này sai: try { } catch(IOException e) {}
Tôi gặp vấn đề sau: Có một DLL xuất một hàm. Ví dụ mã như sau: [Thư viện liên kết động] __declspec(dllexport) int openDevice(int,void**) [Ứng dụng] Developer.h: __de
Từ các luồng khác, tôi biết rằng chúng ta không nên ném ngoại lệ vào hàm hủy! Nhưng đối với ví dụ bên dưới, nó lại hoạt động. Điều này có nghĩa là chúng ta chỉ có thể đưa ra ngoại lệ trong hàm hủy của một thể hiện không? Chúng ta nên hiểu ví dụ mã này như thế nào! #include sử dụng n
Tại sao chúng ta cần phải ném một ngoại lệ public static void main(String[
1. Cơ chế ngoại lệ của Java Lớp Throwable là lớp cha cấp cao nhất của các kiểu ngoại lệ Java. Chỉ khi một đối tượng là một thể hiện của lớp Throwable (trực tiếp hoặc gián tiếp) thì nó mới là một đối tượng ngoại lệ và có thể được cơ chế xử lý ngoại lệ nhận dạng. JDK
Tôi mới làm quen với Python và có một câu hỏi liên quan đến việc triển khai một phương thức ngoại lệ cụ thể. Sau đây là mã (viết tắt): class OurException(Exception): """Ngoại lệ do người dùng định nghĩa"
Tôi đã tạo sơ đồ sau để biểu diễn mối liên kết giữa người dùng và một tập hợp các luồng được sắp xếp theo tin nhắn cuối cùng của họ (những luồng nào người dùng đã đọc và những luồng nào chưa đọc): CREATE TABLE table(user_id bigint, mes
Tôi đang viết một tập lệnh tự động hóa đơn giản bằng Python có thể phát sinh ngoại lệ ở nhiều vị trí. Trong mỗi trường hợp, tôi muốn ghi lại một thông điệp cụ thể và thoát khỏi chương trình. Để thực hiện điều này, tôi đưa ra SysError sau khi phát hiện ngoại lệ và xử lý nó (thực hiện các hành động ghi nhật ký cụ thể, v.v.).
Có ai có thể giải thích tại sao điều này lại dẫn đến lỗi không: let xs = [| "Mary"; "Mungo"; "Midge" |] Array.iter printfn xs Trong khi đây không phải là trường hợp: Array.iter printfn xs
Trên trang web tôi đang sử dụng Play!, tôi có một phần quản trị. Tất cả Bộ điều khiển quản trị đều có chú thích @With và @Check. Sau khi ngắt kết nối, mọi thứ hoạt động bình thường. Sau khi kết nối được thực hiện, mỗi lần một trang được tải (bất kỳ trang nào, bất kể
Tôi thử kết nối với bộ lưu trữ bảng Azure và thêm một đối tượng. Nó hoạt động tốt trên máy chủ cục bộ, nhưng trên máy chủ tôi đang sử dụng, tôi nhận được ngoại lệ sau và ngoại lệ bên trong của nó: Ngoại lệ loại 'Microsoft.Wind
Tôi là một lập trình viên xuất sắc, rất giỏi!