Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用方法时的异常处理_Java_Exception Handling - Fatal编程技术网

Java 调用方法时的异常处理

Java 调用方法时的异常处理,java,exception-handling,Java,Exception Handling,假设我有一个方法“position”,它获取两个坐标并创建一个position对象来保持它们。为了确保这些坐标不超出范围,将抛出InvalidPositionException public Position(int x, int y) throws InvalidPositionException { try { if (x > 10 || x < 1 || y>10 || y<1) { throw new Inva

假设我有一个方法“position”,它获取两个坐标并创建一个position对象来保持它们。为了确保这些坐标不超出范围,将抛出InvalidPositionException

public Position(int x, int y) throws InvalidPositionException {
    try {
        if (x > 10 || x < 1 || y>10 || y<1) {   
            throw new InvalidPositionException("Position x = "+x+", y = "+y+" is out of bounds");
        } else {
            setX(x);
            setY(y);
        }
    } catch (InvalidPositionException e) {
        System.err.println(e);
    }
}
public Position(int x,int y)抛出InvalidPositionException{
试一试{

如果(x>10 | | x<1 | | y>10 | | y转到类
InvalidPositionException
并使其从
运行时异常继承

RuntimeException
s是未经检查的异常,这意味着编译器不会强制您处理它们。这是一个很好的例子,当您从数组越界时。您不必每次访问数组时都编写处理此问题的代码(如我们如何处理
IOException
)。类似的示例是
NullPointerException
。但是,在这两种情况下,您都可以编写代码来捕获异常并处理它


如果您是checked exceptions纯粹主义者,并且不想要一个
try catch
块,那么另一种处理该问题的方法是在您输入数据的任何屏幕中清理数据,并说它超出了限制。

转到类
InvalidPositionException
并使其从
RuntimeException
继承

RuntimeException
s是未经检查的异常,这意味着编译器不会强制您处理它们。这是一个很好的例子,当您从数组越界时。您不必每次访问数组时都编写处理此问题的代码(如我们如何处理
IOException
)。类似的示例是
NullPointerException
。但是,在这两种情况下,您都可以编写代码来捕获异常并处理它


如果您是一个检查异常纯粹主义者,并且不想要一个
try-catch
块,那么另一种处理该问题的方法是在您输入数据的任何屏幕中清理数据,并说它超出了边界。

您需要在创建Position对象的语句周围包含一个
try-catch

Position myPosition = null;
try {
  myPosition = new Position(a, b);
}
catch (InvalidPositionException e) {
  // do something if the exception is caught
}

您需要在创建位置对象的语句周围包含一个
try-catch

Position myPosition = null;
try {
  myPosition = new Position(a, b);
}
catch (InvalidPositionException e) {
  // do something if the exception is caught
}
来自约书亚·布洛赫

第72项:赞成使用标准例外

区分专家程序员和非专家程序员的属性 有经验的人是专家们努力追求的,并且通常能取得很高的成就 代码重用的程度。异常并不例外 代码重用是一件好事 涵盖了大多数客户的大多数异常抛出需求的异常 API。

IllegalArgumentException可供使用-非空参数值不合适

这段代码是创建IllegalArgumentException的经典示例。它扩展了RuntimeException,因此您无需捕获它

public Position(int x, int y) {
    if (x > 10 || x < 1 || y>10 || y<1) {   
        throw new IllegalArgumentException("Position x = "+x+", y = "+y+" is out of bounds");
    } 
    setX(x);
    setY(y);
}
公共位置(整数x,整数y){
如果(x>10 | | x<1 | | y>10 | | y,摘自Joshua Bloch

第72项:赞成使用标准例外

区分专家程序员和非专家程序员的属性 有经验的人是专家们努力追求的,并且通常能取得很高的成就 代码重用的程度。异常并不例外 代码重用是一件好事 涵盖了大多数客户的大多数异常抛出需求的异常 API。

IllegalArgumentException可供使用-非空参数值不合适

这段代码是创建IllegalArgumentException的经典示例。它扩展了RuntimeException,因此您无需捕获它

public Position(int x, int y) {
    if (x > 10 || x < 1 || y>10 || y<1) {   
        throw new IllegalArgumentException("Position x = "+x+", y = "+y+" is out of bounds");
    } 
    setX(x);
    setY(y);
}
公共位置(整数x,整数y){

如果(x>10 | | x<1 | | y>10 | | | | | | | y>10 | | | | | | | | | | | | | | | | | | | y>10 | | | | | | | y“抓住或扔掉”原则的全部要点。我不想涉入自……以来一直在互联网上激荡的关于“检查例外”的争论(向空中看一个达斯·维德)Java发布了,但我很清楚,我们站在它的对立面。哦,不。不。不。不。不。不。不。不。不要这样做。这违背了
捕获或抛出原则的全部要点。我不想涉入互联网上自……以来就一直在激烈争论的检查异常问题(向空中看一个拉达斯·维德)Java已经发布,但我似乎很清楚我们处于相反的位置。当我这样做时,对象变量的作用域在try块中,所以我不能在外部使用它,但是如果我在try块外部初始化它,我也会遇到同样的问题。在这种情况下,我是否必须在try块之前使用Position myPosition=null;并删除类型从内部?如果你的意思是
myPosition=新位置(a,b)
当你说“删除类型”时,是的。是的,我的错误。在try块外声明变量并将其初始化为null。我在回答中进行了编辑。当我这样做时,对象变量的作用域在try块内,因此我不能在try块外使用它,但如果我在try块外初始化它,我也会遇到同样的问题。在这种情况下,我是否需要e在try块之前使用Position myPosition=null;并从其中删除类型?如果您的意思是
myPosition=new Position(a,b)
当你说“删除类型”时,是的。是的,我的错误。在try块外声明变量并将其初始化为null。我在我的答案中进行了编辑。我认为这是一个好答案。但它遇到了所谓的“问题”不需要检查异常。@ifly6啊,这确实是一个很大的争论。在这里使用检查过的异常有什么用呢?假设发送了无效参数,然后客户端捕获异常,然后尝试在其中使用不同的参数进行实例化