Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 - Fatal编程技术网

Java 使方法在抛出异常时能够执行某些操作

Java 使方法在抛出异常时能够执行某些操作,java,Java,我正在做一个小节目 我希望有一个方法在传递null参数时显示错误消息,而不执行其工作。 我想 public void doSomething (String) { try { //other } catch (Exception IllegalArgumentException){ JOptionPane.showMessageDialog(null,"Null argument passed"); } } 但它不起作用。 有什么想法吗 更新 看到离题的横幅,我试着更精确一些。

我正在做一个小节目 我希望有一个方法在传递null参数时显示错误消息,而不执行其工作。 我想

public void doSomething (String) {
try
{
   //other
} catch (Exception IllegalArgumentException){
    JOptionPane.showMessageDialog(null,"Null argument passed");
}
}
但它不起作用。 有什么想法吗


更新

看到离题的横幅,我试着更精确一些。我有一个方法,它必须在数据库中写入它像参数一样传递的内容。 自然存在“风险”,即无意识的用户传递空字符串,显然我不希望我的数据库由空字符串编写。 所以我想解决这个简单的问题。 这是我的密码

public void insertTeach(String teachName, int studentsNum) { 
try {
    String query1 = "INSERT INTO teaching (Name, StudentsNum)"
            + "VALUES ('" + teachName+ "','"
            + StudentsNum + "');";
    PreparedStatement statement=con.prepareStatement(query1);
    statement.executeUpdate();
    JOptionPane.showMessageDialog(null,"Data successfully inserted");
}

catch (Exception ex){
    System.out.println("Errore: "+ex);
    JOptionPane.showMessageDialog(null,"Error in writing. Try Again.");
}
如果我在try的主体中编写If语句,If语句将被完全忽略

public void insertTeach(String teachName, int studentsNum) { 
try {
           if (param == null) {
           JOptionPane.showMessageDialog(null, "Null argument passed");
           return;
           }

    String query1 = "INSERT INTO teaching (Name, StudentsNum)"
            + "VALUES ('" + teachName+ "','"
            + StudentsNum + "');";
    PreparedStatement statement=con.prepareStatement(query1);
    statement.executeUpdate();
    JOptionPane.showMessageDialog(null,"Data successfully inserted");
}

catch (Exception ex){
    System.out.println("Errore: "+ex);
    JOptionPane.showMessageDialog(null,"Error in writing. Try Again.");
}

我必须做什么?

我想你真正想做的是捕获一个
NullPointerException
,而不是
IllegalArgumentException
。这是因为当有人将
null
作为参数传递时,不会抛出
IllegalArgumentException
,因为
null
不是非法参数。所以你的代码应该是-

public void doSomething (String s) {
    if (s == null) {
        JOptionPane.showMessageDialog(null,"Null argument passed");
        return;
    }
    // actual work
}
public void doSomething (String) {
try
{
   //other
} catch (NullPointerException e){
    JOptionPane.showMessageDialog(null,"Null argument passed");
}
}
或者更好

public void doSomething (String) {
    if(String == null)//do error stuff
}

你说它不起作用是什么意思?没有给您预期的结果,从未执行?@Luigi,系统无法识别异常并使用null string执行它必须执行的操作(在本例中为write DB)。您的catch块中是否真的有一个名为IllegalArgumentException的类型为exception的变量,或者你的问题中有输入错误吗?第二句话:我写了一个输入错误问题我很惊讶你的if语句没有给你编译错误,因为我没有看到任何
param
的声明。另外,您的输入字符串有时实际上是
null
,还是空字符串?因为
“”!=null
,因此如果字符串为空(但不是null),代码将以if方式跳过if-statement.mmm,它看起来不太优雅。。是吗?@Bernhart,不,与其他一些语言相比,它不是很优雅,但它实际上是用Java进行输入数据验证的方式。当你需要验证多个参数时,它会变得非常混乱,我可以看到你的目标是让它更干净。也许您需要一个具有自己的ValidationException集的自定义验证类。不过,这几乎只是猜测而已。我认为这很好。它有什么不优雅的地方?您有一个特定的案例要检查,您有一个简单的布尔检查(这是非常有效的,它基本上是一个整数比较)。有什么不爱?@Dgrin91我想用例外的方式来做(因为Java为我提供了这种工具)。但是,正如你和J安迪告诉我的那样,这是进行比较的最好、最有效的方法。顺便说一句,我感谢你虽然你的代码可能正是OP需要的,但是展示一段代码并不能真正帮助他。它没有以任何方式回答这个问题,它没有说明为什么使用这种方法而不是其他方法,它没有说明为什么捕获RuntimeException是一种糟糕的做法,etc@JAndy当前位置你说的每句话都是对的。然而,我尽量不回答从未被问过的问题。如果需要方法验证或一些建议,我可能会建议Guava
先决条件
,并在其他层处理异常。但是没有人要求这样的东西,这是千真万确的。投票支持先决条件,对我来说也是新的。