Java:从主方法外部调用println

Java:从主方法外部调用println,java,methods,println,Java,Methods,Println,因此,我正在为我在学校的Java编程课创建一个非常基本的机场模拟器。每次调用fly()或land()方法时,我都需要在控制台上打印一条消息,我只是想知道最实用的方法。我会选择将其设置为void方法,因此每次从main方法调用它时,它都会直接从fly()打印。我隐约记得我的教授告诉我,这种方式是一种糟糕的做法,你不应该从外部方法打印到控制台。这是真的吗?让fly()和land()方法返回一个字符串,然后打印出来会更好吗 public void fly() { System.out.prin

因此,我正在为我在学校的Java编程课创建一个非常基本的机场模拟器。每次调用fly()或land()方法时,我都需要在控制台上打印一条消息,我只是想知道最实用的方法。我会选择将其设置为void方法,因此每次从main方法调用它时,它都会直接从fly()打印。我隐约记得我的教授告诉我,这种方式是一种糟糕的做法,你不应该从外部方法打印到控制台。这是真的吗?让fly()和land()方法返回一个字符串,然后打印出来会更好吗

public void fly() {
    System.out.println("Plane is flying.");
}


通常,直接从方法打印消息不是一个坏方法,但这取决于上下文。有时域逻辑(飞行)应该与日志记录分开(
System.out.println
)。如果您不想在
fly
方法中直接打印消息,可以创建第二个方法来包装
fly
方法并打印所需消息:

public void flyAndLog() {
    fly();
    System.out.println("Plane is flying.");
}

你的教授说得有道理;在实际开发中,我会利用日志框架来代替这里的
System.out.println
,但这可能不是他们所说的

这最终取决于你在做什么。如果要在调用
fly
时显示值,则可以使用第一种方法。如果您计划使用调用
fly
时返回的值,则可以使用第二种方法如果您只想打印消息,那么第二种方法没有任何价值。


如果看不到您的方法是如何相互混合的,就不可能进行全面调用。你必须选择对你的应用最有意义的方法和途径。

你可以用一种复杂的方式来做(不得不写下这个答案哈哈哈)


从函数内部打印某些内容没有固有的错误做法。如果您需要在每次飞机飞行时打印输出,请在
fly
函数中添加
println
。实际应用程序倾向于写入文件或打印日志。我将以此作为类比。也就是说,我认为没有理由只在方法
main
中执行此类操作。但是,方法的名称应反映消息已打印的事实。在给定的情况下,可以创建一个方法
public void printMessage(String s){System.out.println(s);}
,并从
fly()
land()中调用此方法
public void flyAndLog() {
    fly();
    System.out.println("Plane is flying.");
}
public interface Status {
   Status next();
   Status previous(); 
   String representation();
}

public class PlaneLanding implements Status {
    private final Status previous;

    public PlaneLanding(Status previous) {
        this.previous = previous;
    }

    @Override
    public String representation() {
        return "Plane is landing";
    }

    @Override
    public Status next() {
        return null;
    }

    @Override
    public Status previous() {
        return previous;
    }
}

public class PlaneFlying implements Status {
    private final Status previous;

    public PlaneFlying(final Status previous) {
        this.previous = previous;
    }

    @Override
    public String representation() {
        return "Plane is flying";
    }

    @Override
    public Status next() {
        return new PlaneLanding(this);
    }

    @Override
    public Status previous() {
        return previous;
    }
}

class PlaneSimlulator {
   public static void main(final String... args) {
      Status planeStatus = new PlaneTakingOff();

      do {
         System.out.println(planeStatus.representation());
         planeStatus = planeStatus.next();
      } while (planeStatus != null);
   }
}