我对Java中的异常类型感到困惑。在许多教程网站上,我看到java中存在两种类型的异常
但是当我与一些java大师交谈时,根据它们没有像编译时异常这样的东西。他们说编译时错误也不例外,我在Java docs中没有发现编译时异常。但是当我运行以下程序时
File f = new File("C:/Documents and Settings/satyajeet/Desktop/satya.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
System.out.println(s);
如果没有提供捕获,我得到了以下输出。
D:\jdk1.6.0_19\bin>javac Testing.java
Testing.java:7: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
FileReader fr=new FileReader(f);
^
Testing.java:9: unreported exception java.io.IOException; must be caught or declared to be thrown
String s=br.readLine();
^
2 errors
那么我应该考虑这个错误还是编译时异常?
答案 0 :(得分:7)
Java中有3种类型的Throwable。
Exception
s(Exception
并在链中,保存RuntimeException
)。这些由编译器检查,必须在抛出时捕获。它们代表了通常可以恢复的特殊情况,例如:在文件系统上找不到引用的文件时(参见FileNotFoundException
)。Exception
s(RuntimeException
的子项)。这些可以抛出而不会被抓住。它们通常表示编程错误,例如在null
对象上调用方法(请参阅NullPointerException
)。 Errors
。这些也是未经检查的。当发生非常错误时,JVM会抛出它们,通常超出开发人员的直接控制范围(例如,内存不足,请参阅OutOfMemoryError
)。编译器错误由Java编译器在代码编译失败时发出,原因有多种,例如语法错误,调用模糊,无法捕获已检查Exception
等等。答案 1 :(得分:4)
任何“着名网站”都表示不应该阅读。这是垃圾。没有“编译时异常”这样的东西。你正在谈论的Java Geeks是正确的 1 。
实际上,你可能误读或误解了你在那些“着名网站”上读到的内容。有“编译时错误”和“运行时EXCEPTIONS”。
在您的示例中,您所拥有的是一些编译时错误消息,这是由于代码中的错误造成的。错误是存在的,因为您的代码没有正确处理异常,但它们仍然是错误的。它们在编译时被Java编译器检测到。
1 ...也许是时候停止使用像他们这样的“极客”等半贬义标签了。听起来他们应该受到一些尊重。
答案 2 :(得分:1)
没有“编译时异常”之类的东西。异常仅在运行时发生(可以检查或取消选中它们 - 您可能需要查看它)。
你所拥有的仅仅是编译错误。您的代码甚至不是有效的Java。
顺便说一下,大多数教程都是垃圾。使用信誉良好的资源,如Oracle教程。或者是一本好书。
答案 3 :(得分:1)
他们没有编译时异常。正如上面提到的评论。
请在下面找到有关例外情况的javdocs,并链接到有关已检查和未经检查的例外的信息。 https://docs.oracle.com/javase/tutorial/essential/exceptions/ http://www.geeksforgeeks.org/checked-vs-unchecked-exceptions-in-java/
您还发现以下讨论很有用 Differences between Exception and Error
答案 4 :(得分:1)
如果你在编译期间得到这个,那么这两个是编译错误。编译错误基本上是java编译器报告的问题。编译错误可能包括:
如果你在运行该程序时得到了这个,那么它们就是例外。 Java异常,如文档中所定义的,是在程序执行期间发生的异常事件,它会破坏程序的正常流程
答案 5 :(得分:1)
您发布的 javac.exe 的输出是与您正在开发的软件不同的软件错误。
这意味着您的代码不会抱怨Java代码范例:事实上,您没有检查已检查的异常。
您的代码没有抛出任何异常或错误,它根本就不存在。
答案 6 :(得分:0)
java中有两种类型的异常。
Checked Exception
Unchecked Exception
选中:异常必须由程序员处理,否则程序会抛出编译错误。
" 所以你可以调用检查异常是编译时异常"
现在未经检查的异常:在未经检查的异常中,程序员可以以这种方式编写代码以避免未经检查的异常。程序员无法获得编译异常。
" 您可以调用未经检查的异常是运行时异常"
已检查例外列表:
ClassNotFoundException
EOFException
IllegalAccessException...etc
如果方法应该抛出一个检查过的异常,那么它应该由
处理try{}catch(Exception ex ){} Or you can use the throws keyword.
未经检查的例外列表
ArithmeticException
NullPointerException
ArrayIndexOutOfBound...etc