Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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中的错误消息是否会像Unix操作系统一样自动发送到标准错误流?_Java_Unix_Stream_Operating System_Outputstream - Fatal编程技术网

Java中的错误消息是否会像Unix操作系统一样自动发送到标准错误流?

Java中的错误消息是否会像Unix操作系统一样自动发送到标准错误流?,java,unix,stream,operating-system,outputstream,Java,Unix,Stream,Operating System,Outputstream,在类Unix操作系统中,标准错误是来自命令行程序的错误消息的目标,而标准错误的默认目标是显示屏。我假设,就像在类Unix操作系统中一样,Java中的每个命令都被分配了三个数据流(即通道):标准输入、标准输出和标准错误 在Java中也是这样吗?也就是说,在Java中,是来自命令的错误消息立即发送到标准错误流,还是来自命令的错误消息没有目的地(即,来自命令的错误消息不会去任何地方,除非我们在变量中捕获它,然后使用System.err.println(e);)将其发送到标准错误流) 以下面的代码为例:

在类Unix操作系统中,标准错误是来自命令行程序的错误消息的目标,而标准错误的默认目标是显示屏。我假设,就像在类Unix操作系统中一样,Java中的每个命令都被分配了三个数据流(即通道):标准输入、标准输出和标准错误

  • 在Java中也是这样吗?也就是说,在Java中,是来自命令的错误消息立即发送到标准错误流,还是来自命令的错误消息没有目的地(即,来自命令的错误消息不会去任何地方,除非我们在变量中捕获它,然后使用
    System.err.println(e);
    )将其发送到标准错误流)
  • 以下面的代码为例:

    ArrayList middleLine=new ArrayList();
    int beginIndex=0;
    int endIndex=list.size()-1;
    int middleIndex=(beginIndex+endIndex)/2;
    试一试{
    添加(行[中间索引]);
    }捕获(例外e){
    系统错误println(e);
    }
    
  • 命令
    middleLine.add(行[middleIndex])引发异常。由于Java非常惯用,Java关键字
    throws
    是否意味着异常不会自动发送到标准错误流,或者
    throws
    是否指示异常在标准错误输出数据流中的运动
  • 是命令middleLine.add(lines[middleIndex])引发的异常在到达标准错误流之前捕获
  • 或者是命令middleLine.add(lines[middleIndex])引发的异常已在标准错误流中时捕获
  • 静态变量
    err
    的javadoc表示:

    “标准”错误输出流。此流已打开并准备接受输出数据

  • 从javadoc中摘录的
    err
    是否意味着命令
    System.err.println(e)
    将使用
    catch
    命令捕获的异常e发送到标准错误流?然后,由于默认情况下标准错误流的目的地是显示屏,因此方法
    println
    将错误输出数据发送到标准错误流,并自动发送到显示屏

  • 当我们将错误消息作为标准错误PrintStream对象的方法
    println
    的参数时,我们是否必须捕获错误消息(即异常),以便将错误消息发送到标准错误输出流?这意味着,当我们使用
    System.err.println(e)
    打印发送到标准错误输出流的错误消息时,该消息会显示在计算机屏幕上,因为标准错误流的目标是显示屏

  • 如果
    catch
    命令捕捉到标准错误输出流中的错误,错误消息是否不再出现在错误流中
  • 如果
    catch
    命令在错误消息进入标准错误流之前捕获了错误消息,那么错误消息是否仍然发送到标准错误流
  • System.err.println(e)
    是指自动打印与发送到标准错误流的异常匹配的异常e,还是指打印我们通过方法
    println
    的参数发送到标准错误流的异常e

  • 只有在未捕获异常或对其调用printStackTrace()时,才会将异常打印到stderr。这里有一个小演示,可以演示一些事情:

    public class foo {
    
        public static void main(String[] args) {
            System.out.println("This prints to stdout");
            System.err.println("This prints to stderr");
            int x;
            try {
                x = 1 / 0;
            } catch (ArithmeticException e) {
                System.err.println("Printing stack trace to stderr");
                e.printStackTrace();
                System.err.println("Printing message to stderr");
                System.err.println(e.getMessage());
            }
            try {
                x = 1 / 0;
            } catch (ArithmeticException e) {
                // nothing sent to stderr
            }
            System.out.println("Un-caught exception will kill program and print stack trace to stderr");
            x = 1 / 0;
        }
    }
    


    每个问题你应该问一个问题,而不是9个或10个。你也有很多误解。当您调用println时,您实际上会打印e.toString(),并且该字符串只会发送到您发送到的任何控制台。当您不执行任何操作时,jvm会将异常消息和堆栈跟踪打印到system.err(也称为stderr)并停止。不,默认情况下,抛出和捕获不会打印任何内容。让我们。@Slaw您创建的聊天室似乎已被删除。有可能获得您在聊天室中提供的链接吗?| | | | |。你在回答他的哪一个问题?#1和7,8,9的程度较轻:旨在证明在明确告知打印或遇到未捕获的异常之前,不会向stderr发送任何内容。只是确认一下,当你说“打印到stdout”和“打印到stderr”时,你的意思是将数据写入stdout并将数据写入stderr,对吗?您可以更正,如果未捕获异常,则会将异常打印到stderr,这意味着捕获异常会截获异常,从而防止stderr将异常从程序写入显示器。再补充一点,我认为声明方法抛出异常也会阻止stderr将数据写入显示
    Erics-MacBook-Pro:tmp redekopp$ javac foo.java
    Erics-MacBook-Pro:tmp redekopp$ java foo > foo-stdout.txt 2> foo-stderr.txt
    Erics-MacBook-Pro:tmp redekopp$ cat foo-stderr.txt
    This prints to stderr
    Printing stack trace to stderr
    java.lang.ArithmeticException: / by zero
    at foo.main(foo.java:8)
    Printing message to stderr
    / by zero
    Exception in thread "main" java.lang.ArithmeticException: / by zero
    at foo.main(foo.java:16)
    Erics-MacBook-Pro:tmp redekopp$ cat foo-stdout.txt
    This prints to stdout
    Un-caught exception will kill program and print stack trace to stderr