一.一个问题
突然看到一个问题,看了别人的答案觉得不是很理想。好像扭曲了问题核心。
public static void main(String[] args) {
if(...)
{
System.out.println("a");
}else
{
System.out.println("b");
}
}
问怎么填能输出ab?
有的同学使用了很多方法,但只能输出a \n b或ab\n这样的结果。我觉得如果要输出这种结果,你不如直接System.out.println(“a”)然后想办法扭到错误分支。但是我觉得这个问题最主要还是这个格式如何达到ab漂亮在这里插入代码片
的形式,我们知道如果调用println肯定会把a,b分开。那么有没有办法真的输出ab呢我想是有的。
二.System.out.println
这个方法查阅jdk我们知道System是系统类,out是里面一个静态流实例,println是一个静态方法。
顺带推荐一个中文jdk文档http://www.matools.com/file/manual/jdk_api_1.8_google/overview-summary.html
我们想要改变println不如从流入手。
我的主要出发点就是去掉该死的换行符,一个想法是,为了防止输出换行符,我们不如在判断条件中关掉这个流,自己执行命令,让底下的println不能执行,这样给了我们很大的操作空间。
三.匿名类
Java提供了一种语法,允许我们在创建时定义类。这就叫匿名类。
new 类名
{
字段,方法。
}
这个new出来的对象是继承自类名。
四.我们可以轻易实现这个想法啦
我们在if判断中用匿名类创建一个对象,自己输出ab让其把流关闭,同时返回一个布尔真值,让其不妨碍其他判断。
这样得到的数据就是标准的‘ab’输出,不带任何讨厌的回车。一个完整的字符串。
public class Test {
public static void main(String[] args) {
if(new Object()
{public boolean test()
{
System.out.write('a');
System.out.write('b');
System.out.close();
return true;}}.test()||...)
{
System.out.println("a");
}else
{
System.out.println("b");
}
}
}
这个方法有很多优点,你可以向后加任意的判断条件,绝对不会影响我输出’ab’,为什么我选用System.out.write呢,因为这样处理其实a,b是在一次输出后得到,而不是两次输出。详情见jdk文档。
我觉得这个做法虽然简单也比较笨,但的确做到了标准的ab,绝对没有任何换行符干扰,并且无论在什么情况下都可以输出,进行绝对完美的扩展。
不带任何回车的ab字符串这才是我爱的味道。