当检查方法是否为真时,再次调用该方法?

When check if method true, the method is called again?

好的,所以在我的程序中我有两个 类、LinkPhone.java 和 Frame.java。在 LinkPhone 部分,它调用一个函数来确定它是否为真,然后如果它是做某事。但随后我调用该函数并使用 If 语句对其进行检查,它会从 If 语句中调用语句。就像在控制台中一样,它说 "DEBUG: Frame init success" 两次。为什么它会调用该函数两次,我该如何解决?

LinkPhone.java:

Frame.initFrame();
if(Frame.initFrame() == true){
    return;
} else {
    return;
}

Frame.java:

public static boolean initFrame(){
    try {
        JFrame frame = new JFrame("Link Phone");
        System.out.println("DEBUG: Frame init success");
        return true;
    } catch (Exception e) {
        System.out.println("DEBUG: Frame init failed!!!");
        return false;
    }
}

您需要保留第一次调用该方法时的结果:

boolean result = Frame.initFrame();
if(result) {
    return;
} else {
    return;
}

您正在调用您的方法两次!

Frame.initFrame();
if(Frame.initFrame() == true){
    return;
} else {
    return;
}

只需调用一次:

// Frame.initFrame();  // no need for this one

if(Frame.initFrame()){
    // hopefully you do more in here!
    // return;
} else {
    // hopefully you do more in here!
    // return;
}
return;

一些旁注:

  • 我会避免调用 class "Frame",因为这会与作为 Java 核心 class 部分的 class 发生冲突。给它起一个更具描述性的名称,以避免将来出现问题。
  • 您似乎在调用静态方法。如果有指示,这是可以的,但过度使用静态方法和变量可能会增加程序的连接性,即,它会增加代码耦合,这在较大的程序中会导致复杂性和错误风险增加。 Java 是一种 OOP 语言是有原因的,因为正确使用 OOP 技术有助于隐藏数据、减少错误和增加代码重用。
  • 您的 if 和 else 代码块都有一个 return 调用。最好简化代码并从块中获取 return 调用。只需在两个块之后调用 return。
  • 再次希望您的 if 和 else 块包含比仅匹配 return 语句更多的代码。

是的。每次您的程序执行 Frame.initFrame() 时,它都会调用该方法。 (这就是 () 语法的意思)

如果你想调用它一次你可以这样做(之前没有额外的调用):

if(Frame.initFrame() == true) {

或者这个,如果你更喜欢在单独的行上调用方法:

boolean result = Frame.initFrame();
if(result == true) {

它被调用了两次,因为你写了两次Frame.initFrame()

Frame.initFrame();                //Once
if(Frame.initFrame() /* Twice */ == true){
    return;
} else {
    return;
}

如果您只想调用它一次并想存储结果,试试这个:

boolean ok = Frame.initFrame();
if(ok){ //Use result of call
    //Do stuff in the event the initting went correctly
    return;
} else {
    //Do stuff in the event the initting failed
    return;
}

或者,事件更紧凑:

if(Frame.initFrame()){ //Use result of call
    //Do stuff in the event the initting went correctly
    return;
} else {
    //Do stuff in the event the initting failed
    return;
}