Java 在不修改代码的情况下更改输出
这个问题最近在我参加的一次采访中被问到Java 在不修改代码的情况下更改输出,java,Java,这个问题最近在我参加的一次采访中被问到 public class MagicOutput { public static void main(final String argv[]) { System.out.println("Hello, World!"); } } 我被要求保留方法主签名(名称、参数的数量和类型、返回类型)和实现(方法体) 并将此程序输出到标准控制台消息“Magic output!” 我花了大约2分钟来回答。我的解决方案是在那里放置一个静态块
public class MagicOutput {
public static void main(final String argv[]) {
System.out.println("Hello, World!");
}
}
我被要求保留方法主签名(名称、参数的数量和类型、返回类型)和实现(方法体)
并将此程序输出到标准控制台消息“Magic output!”
我花了大约2分钟来回答。我的解决方案是在那里放置一个静态块并输出所需的字符串
static{
System.out.println("Magic Output !");
}
这确实有效,但它同时打印魔术输出代码>和你好,世界代码>
如何使其仅输出魔术字符串
static{
System.out.println("Magic Output !");
System.exit(0);
}
或者更有趣(取决于字符串实现-适用于openjdk 8):
使用静态块上的System.setOut()将System.out重定向到PrintStream的实例。您也可以使用静态嵌套类来实现这一点
public class MagicOutput {
public static void main(final String argv[]) {
System.out.println("Hello, World!");
}
static class System {
static Out out = new Out();
}
static class Out {
void println(String s){
java.lang.System.out.println("Magic Output !");
}
}
}
在短时间内回答得很好!我想投10票。
public class MagicOutput {
public static void main(final String argv[]) {
System.out.println("Hello, World!");
}
static class System {
static Out out = new Out();
}
static class Out {
void println(String s){
java.lang.System.out.println("Magic Output !");
}
}
}