标签: checked-exceptions

Java中的异常类型

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

  1. 编译时间异常
  2. 运行时异常

但是当我与一些java大师交谈时,根据它们没有像编译时异常这样的东西.他们说编译时错误也不例外,我在Java文档中也没有发现编译时异常.但是当我运行以下程序时

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);
Run Code Online (Sandbox Code Playgroud)

如果尝试捕获未提供,我得到低于输出.

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
Run Code Online (Sandbox Code Playgroud)

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

java exception checked-exceptions

3
推荐指数
1
解决办法
7765
查看次数

如何指定Delphi方法引发的异常?

再一次是Delphi的新手问题.是否有一种标准的方法来指定方法引发的异常(我已经用Google搜索了这个但是在处理异常的基础知识之外似乎找不到任何关于该主题的内容).

换句话说,在函数/过程签名中有一种标准的说法"我的函数/过程可以抛出这个特定的异常"(我假设没有).那么让API客户知道给定过程/方法会引发哪种异常的最佳做法是什么

delphi checked-exceptions

3
推荐指数
1
解决办法
242
查看次数

始终使用选中的例外

我最近一直在重新考虑一些Java代码......我发现有很多RuntimeExceptions被抛出(即未经检查的异常).我创建了自己的已检查异常,并用我自己的异常替换了这些RuntimeExceptions的每个实例.然后,这迫使我检查异常.

有了这个,我发现检查异常更好,因为另一个开发人员将确保处理异常...而不是程序只是吃异常而不向用户显示任何内容.

我已经阅读了许多关于未经检查和已检查异常的文章.但是,我仍然觉得我更多地检查了异常,因为它减少了人为错误.

编程有多糟糕,主要是使用检查异常?有没有其他人觉得他们喜欢检查异常比未经检查的异常更多?

java exception checked-exceptions unchecked-exception

2
推荐指数
1
解决办法
725
查看次数

不清楚"Scala函数式编程"中的"Checked exception"解释

在"Scala中的函数式编程"一书中,有一些词汇谈论"已检查的异常":

检查异常

Java检查的异常至少会强制决定是否处理或重新报告错误,但它们会为调用者带来重要的样板.更重要的是,它们不适用于高阶函数,它们不可能知道它们的参数可能引发的特定异常.例如,考虑我们为List定义的map函数:

def map[A,B](l: List[A])(f: A => B): List[B]

这个函数显然很有用,非常通用,并且与使用已检查的异常不一致 - 我们不能为每个可能抛出的单个检查异常提供一个map版本f.即使我们想要这样做,地图甚至会知道哪些例外是可能的?这就是为什么通用代码,即使在Java中,也常常使用RuntimeException或一些常见的检查Exception类型.

我多次阅读本节,但仍不清楚为什么检查异常不适用于高阶函数.

有人可以举一些例子来说明问题吗?

functional-programming scala higher-order-functions checked-exceptions

2
推荐指数
1
解决办法
127
查看次数

抛出方法之外的异常 - Java

我是Java的初学者.

我声明了一个方法public void method() throws Exception,但每当我尝试通过使用在同一个类的另一个区域中调用该方法时method();,我得到一个错误:

Error: unreported exception java.lang.Exception; must be caught or declared to be thrown
Run Code Online (Sandbox Code Playgroud)

如何在不收到此错误的情况下使用该方法?

java exception throw checked-exceptions

2
推荐指数
1
解决办法
3308
查看次数

为什么这被认为是未处理的例外?

由于未处理的异常,以下代码无法编译,尽管在我看来应该没有问题:

class Car {
    public void drive() throws Exception {
        System.out.println("Driving...");
    }
}

public class Sedan extends Car {
    public void drive() {
        System.out.println("Driving Sedan...");
    }
    public static void main(String[] args) {
        Car c = new Sedan();
        c.drive(); //unhandled exception!
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器是否应该明白,当c.drive()调用重写方法时,不会抛出已检查的异常?为什么仅仅因为引用是Car类型而不是类型Sedan,我们必须将驱动器视为仍然抛出已检查的异常?最重要的方法不是!

java overriding checked-exceptions

2
推荐指数
1
解决办法
89
查看次数

为什么抛出upcasting检查异常

我注意到一些复杂库中的方法,包括标准JDK,倾向于throws向上转换异常.起初我在Apache POI的源代码中发现了这种现象,稍后会再次看到它java.io.FileWriter:

public FileWriter(String fileName) throws IOException {
    super(new FileOutputStream(fileName));
}
Run Code Online (Sandbox Code Playgroud)

其中实例化FileOutputStream声明FileNotFoundException此callstack中唯一的已检查异常.然而,IOException声明,这是超级类FileNotFoundException.

那是什么原因呢?还是仅仅依赖于程序员的习惯?

java exception-handling upcasting checked-exceptions

2
推荐指数
1
解决办法
121
查看次数

elm的编译与Java检查的异常有何不同?

elm零运行时例外的主张是其主要卖点之一(见官方网站),

但是,如果你停下来思考它,没有什么可以阻止你除以零或耗尽内存.

什么elm编译器基本上没有,强迫你以涵盖所有可能的路径,可导致异常.

例如:

import String exposing (toInt)
toIntOrZero s = case toInt s of
                          Err e -> 0
                          Ok val -> val
Run Code Online (Sandbox Code Playgroud)

但这与臭名昭着的 "检查例外"功能java有何不同?

public static Integer toIntOrZero(String s) {
    try { return Integer.valueOf(s); }
    catch (NumberFormatException e) { return 0; }
}
Run Code Online (Sandbox Code Playgroud)

我从来没有听说过任何java零运行时异常语言.

java checked-exceptions elm

2
推荐指数
1
解决办法
142
查看次数

抛出已检查的异常

我在Java中的一些方法会抛出异常,例如NoSuchElementException,IllegalArgumentException等.但是在使用这些方法时,这些异常似乎未经检查.换句话说,我的方法的调用者不需要对抛出这些异常的方法执行try/catch.我读到它似乎默认情况下"异常"被"检查",只有错误是"未选中".但不知何故,我抛出的异常也未经检查.真奇怪.

我怎样才能确保当我的方法抛出异常时,调用者必须在编译时捕获异常?简单地说,我怎么能抛出一个检查过的异常?

谢谢!

java exception-handling exception checked-exceptions

1
推荐指数
1
解决办法
1万
查看次数

java如何检测Checked Exceptions?

如果我写这样的话:

public static void main(String[] args) {
    try {
    } catch (MalformedURLException e) { 
        e.printStackTrace()
    };
}
Run Code Online (Sandbox Code Playgroud)

Java编译器在catch子句中显示编译错误MalformedURLException.如果我URL url = new URL("HI");在try块中插入行 ,抱怨停止.我认为java必须使用包绑定这些已检查的异常.然后我通过CookieManager manager = new CookieManager();在try块中插入" "来尝试另一类java.net包 .再次开始编译错误.

那么JVM如何将这些经过检查的异常与java类绑定在一起来编译这样的编译时错误?

java jvm exception checked-exceptions

1
推荐指数
1
解决办法
424
查看次数