Java

时间:2015-09-24 10:33:58

标签: java exception checked-exceptions

我对Java中的异常类型感到困惑。在许多教程网站上,我看到java中存在两种类型的异常

  1. 编译时间异常
  2. 运行时异常
  3. 但是当我与一些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
    

    那么我应该考虑这个错误还是编译时异常?

7 个答案:

答案 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编译器报告的问题。编译错误可能包括:

  1. Sytax错误
  2. 类路径相关错误
  3. try-catch block相关错误(由您报告)
  4. 如果你在运行该程序时得到了这个,那么它们就是例外。 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