System类中有三个常量:
标准输出(显示器): public static final PrintStream out; 错误输出: public static final PrintStream err; 标准输入(键盘): public static final InputStream in;
public class MAIN { public static void main(String[] args) { try{ Integer.parseInt("a"); }catch (Exception e){ System.out.println("out:" + e); System.err.println("err :" + e); } } }
err 和 out 是同一种类型的,如果是使用的工具进行输出,那么使用 err 进行错误输出 工具会进行红色字体的输出,而 out 则不会;
最早设置两个输出操作的目的是:
System.out是输出那些用户希望看见的信息;
System.err是输出那些用户不希望看见的信息。
如果有需要也可以修改输出内容的位置(不要随意去修改,仅供了解):
修改out的输出位置:public static void setOut(PrintStream out); 修改err的输出位置:public static void setErr(PrintStream err)。
import java.io.File; import java.io.FileOutputStream; import java.io.PrintStream; public class MAIN { public static void main(String[] args) throws Exception{ System.setErr(new PrintStream(new FileOutputStream(new File("D:" + File.separator + "Demo_2_15" + File.separator + "Copy.txt")))); // 改变err的输出位置 try{ Integer.parseInt("a"); }catch (Exception e){ System.out.println("out:" + e); System.err.println("err :" + e); // 输出到文件中 } } }
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.PrintStream; public class MAIN { public static void main(String[] args) throws Exception{ InputStream input = System.in; // 键盘输入流 System.out.print("请输入:"); byte[] data = new byte[1024]; int len = input.read(data); // 读取长度 System.out.println("内容显示:" + new String(data,0,len)); } }
这种输入方式是有很大的缺陷的:当数据输入的长度超出接收的长度,那么数据就会显示不全。
例如将接收数组data的1024变为6:
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.PrintStream; public class MAIN { public static void main(String[] args) throws Exception{ InputStream input = System.in; // 键盘输入流 System.out.print("请输入:"); byte[] data = new byte[6]; int len = input.read(data); // 读取长度 System.out.println("内容显示:" + new String(data,0,len)); } }
那么这个输入就可能进行重复的输入流数据接收,而且在接收的时候还有可能会有输入中文的情况,如果处理不当,还可能出现乱码的问题。
所以System.in 只是提供一个标准输入,但是在使用的时候建议还是使用成熟的输入方案。