`

不要在程序中用System.out.println()

阅读更多

在log4j大行其道的今天,居然还有很多程序员在程序中到处写System.out.println()。这样做带来的影响是极其恶劣的。

1.最要命的就是影响程序的性能

2.浪费磁盘空间,如果你用的是tomcat,catalina.out文件用不了多久就会上G

3.影响程序的调试开发,一个用户请求发过去,控制台哗啦啦像下雨一样的打印日志,根本不晓得自己要看的输出语句在何方

4.就这么多了。。。

 

如果你不喜欢用log4j这样的日志类库,那么最次也要写个Debug类封装一下System.out.println(),然后加个开关控制日志是否输出。

7
6
分享到:
评论
12 楼 fangwei 2009-08-21  
night_stalker 写道
这样? 好像有点麻烦 ...
PrintStream oldOut = System.out;
PrintStream newOut = new PrintStream(new File("e:/log"));
System.setOut(newOut);

System.out.println("hello");

System.setOut(oldOut);
newOut.close();


另外直接打印屏幕的扩展性很好的,linux 下面很多命令的源代码都是直接 printf,调用的时候用 > 重定向就可以了。
ps -e > processes.log

windows 也支持重定向和管道
dir | find "java" > javaSrcList.txt

多谢分享
11 楼 fangwei 2009-08-21  
treblesoftware 写道
在DUBUG的时候System.out.println()何罪之有?请指教。

这样会有一个风险,你一不小心就会忘记删除或注掉类似的调试打印语句,然后就会在运行时不停的输出到控制台。
另外,即使你很小心翼翼的每次调试完毕后都删除或注掉了类似的调试打印语句,但是下次你再次需要调试时,你又得重新写一次或重新打开注释。其实也不麻烦,但是使用开关是更好的方式。举一个现实中的例子,你回到家打开灯,睡觉前关灯,但是你不会回到家把灯泡装上,睡觉前把灯泡取下来,System.out.println()就是这个灯泡。
10 楼 night_stalker 2009-08-21  
这样? 好像有点麻烦 ...
PrintStream oldOut = System.out;
PrintStream newOut = new PrintStream(new File("e:/log"));
System.setOut(newOut);

System.out.println("hello");

System.setOut(oldOut);
newOut.close();


另外直接打印屏幕的扩展性很好的,linux 下面很多命令的源代码都是直接 printf,调用的时候用 > 重定向就可以了。
ps -e > processes.log

windows 也支持重定向和管道
dir | find "java" > javaSrcList.txt
9 楼 treblesoftware 2009-08-21  
在DUBUG的时候System.out.println()何罪之有?请指教。
8 楼 fangwei 2009-08-21  
night_stalker 写道
正确的方法是用 setOut 重定向,没必要封装。

多谢指教
System.setOut(new PrintStream(new File("e:/log")));
System.out.println("hello");

这样确实可以做到重定向输出到文件,请问如何做到关闭输出呢?我查了一下api未果,下面这样直接空指针异常
System.setOut(null);
7 楼 fangwei 2009-08-21  
1986jade 写道
受教

只是一些小感悟,愿与大家分享
6 楼 fangwei 2009-08-21  
feigofigo3 写道
LZ,简直在乱说,应该是新人吧,新人是可以原谅的

我请求你不要原谅我
5 楼 fangwei 2009-08-21  
conservatism 写道

4 楼 night_stalker 2009-08-20  
正确的方法是用 setOut 重定向,没必要封装。
3 楼 1986jade 2009-08-20  
受教
2 楼 feigofigo3 2009-08-20  
LZ,简直在乱说,应该是新人吧,新人是可以原谅的
1 楼 conservatism 2009-08-20  

相关推荐

    JAVA环境配置+考试题目+Android studio配置与入门教程.docx

    System.out.println("请输入第" + (i + 1) + "件商品的名称:"); name[i] = input.next(); System.out.println("请输入第" + (i + 1) + "件商品的数量:"); shu[i] = input.nextInt(); System.out.println...

    Java学习资源

    System.out.println("请选择运算符: 1:+ 2:- 3:* 4:/"); int choice = scanner.nextInt(); switch (choice) { case 1: System.out.println(num1 + num2); break; case 2: System.out.println(num1 - num2)...

    Java关键字的用法

    System.out.println("Cannot divide by zero."); } ``` #### 8. `char` `char`类型用于存储单个字符。 **示例:** ```java char grade = 'A'; ``` #### 9. `class` `class`关键字用于定义一个新的类。 **示例...

    java输入输出语句整理总结.doc

    `System.out.print()` 输出字节数据流,而 `System.out.println()` 输出字节数据流并换行。 输入语句 输入语句是指将数据从外部世界输入到程序内部的语句。Java 中常用的输入语句有 `System.in.read()` 和 `...

    java 打印五角星for循环

    System.out.println("ǵһ߳:"); a = sc.nextInt(); ``` #### 四、处理输入值 根据用户输入的值进行调整,确保最终能够正确地打印出五角星。 ```java if (a % 3 == 1) { a += 2; } else if (a % 3 == 2) { a +=...

    Java中this用法.pdf

    System.out.println("1 -> this.s = " + this.s); this.s = s; System.out.println("2 -> this.s = " + this.s); } public static void main(String args[]) { Hello x = new Hello("HelloWorld!"); } } ``` ...

    动物特性的面向对象描述

    System.out.println("物种: " + animal.getSpecies()); System.out.println("年龄: " + animal.getAge()); System.out.println("性别: " + animal.getGender()); } ``` 这个方法接受任何类型的`Animal`对象,...

    在Eclipse中用JDBC连接Sql Server 2005总结

    System.out.println("Connected to the database!"); } catch (SQLException e) { System.err.println("Error connecting to SQL Server: " + e.getMessage()); } ``` ### 步骤3:执行SQL语句 有了连接后,你...

    JAVA课件主要关于集合/异常/IO

    System.out.println(list); ``` `Set`接口则代表不允许有重复元素的集合。`HashSet`是`Set`的一个实现,它不保证元素的顺序。以下是一个`Set`的示例: ```java Set<String> set = new HashSet(); set.add("one"); ...

    大数据必学Java基础(十三):基本数据类型的转换

    System.out.println(d); int i = (int) 6.5; // double ---> int,强制类型转换 System.out.println(i); // 表达式中多种数据类型运算 double d2 = 12 + 1294L + 8.5F + 3.81 + 'a'; System.out.println(d2...

    常见转义字符 Java

    在程序中,它可以用于模拟打印输出时的新页面。 4. **\n (LF) 010**:代表“换行”(Line Feed),用于文本编辑器或控制台中的新行操作。在大多数情况下,它是用于表示文本中的一行结束。 5. **\r (CR) 013**:...

    java分支循环

    这是一个典型的函数定义示例,可以在程序中复用这段逻辑。 #### 函数调用 在主函数`main`中调用了`isPrime`方法,如: ```java if (isPrime(i)) { // 执行操作 } ``` 这表示对于每一个循环中的数`i`,都会调用`...

    java语言程序设计课后习题答案.doc

    System.out.println(str1 == str2); // true,因为它们引用同一个对象 String str3 = new String("abc"); String str4 = new String("abc"); System.out.println(str3 == str4); // false,尽管内容相同,但它们是...

    base64的java实现方法

    System.out.println("Encoded Data: " + encodedData); } } ``` 2. **Base64解码** 对于Base64编码的字符串,我们可以使用`java.util.Base64.Decoder`的`decode()`方法将其转换回字节数组。以下是如何解码的示例...

    Java面试125面试题和答案

    System.out.println("The animal makes a sound"); } } class Dog extends Animal { @Override public void makeSound() { System.out.println("The dog barks"); } } class Cat extends Animal { @...

    java集合、常用类和String[参照].pdf

    总之,Java集合框架提供了丰富的数据结构和算法,使得在程序中管理对象变得简单高效。了解并熟练掌握这些接口和类,对于编写高质量的Java代码至关重要。String类则是处理文本数据的基础,它的特性和方法在日常开发中...

    java教程(20211103130232).pdf

    `System.out.println()`是Java中用来打印输出到控制台的语句,类似于C语言的`printf`或C++的`cout`。在这里,它打印出字符串"Hello World!"。 在Java中,源代码文件必须以类名命名,因此这个例子中的源代码应该保存...

    S1考前复习理论部分\S1期Java复习题

    在Java中,程序调试是解决程序错误的工具和方法的总称,主要方法包括使用System.out.println()输出语句验证变量值、设置断点、单步运行和观察变量等。 四、类和对象 在Java中,类是对象的模板,对象是类的实例。...

    java代码-并输出打印

    这涉及到Java的I/O(输入/输出)操作,尤其是System.out.println()方法的使用,这是Java中用来在控制台打印信息的常用方式。下面我们将深入探讨这个主题。 首先,`main.java`文件通常是Java程序的主入口点,因为每...

Global site tag (gtag.js) - Google Analytics