通过一个软构问题了解System.out.println

本文介绍一种在Java中使用匿名类和流控制技巧,实现在if-else语句中输出连续字符串'ab'的方法,避免了println方法自带的换行符干扰,实现了完美扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.一个问题

突然看到一个问题,看了别人的答案觉得不是很理想。好像扭曲了问题核心。

	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字符串这才是我爱的味道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值