Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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,这个问题最近在我参加的一次采访中被问到 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 !");
        }
    }
}