System 한 접시를 장착하십시오.out.println()

11398 단어
System.out.println(Hello World)은 대부분의 프로그래머들이 입문하는 첫 번째 줄 코드이며, 프로그래머들이 가장 잘 아는 줄 코드라고 할 수 있다.모두들 정말 시스템을 깊이 연구한 적이 있다.out.println ()입니까?오늘은 시스템 한 접시만 주세요.out.println()!
 
System은 무엇입니까?
System은 Java로서lang 패키지 중 하나인final 클래스는 JDK1에 있습니다.0 중에 그 안에 존재하는 것은 초석이라고 할 수 있다.
 
아웃 한번 더.
out은 System의 정적 데이터 구성원이지만 이 구성원은 기본 클래스가 아니라java입니다.io.PrintStream 클래스의 객체입니다.out은 키워드 static로 수식되어 있으며, 우리는 직접 System을 통과할 수 있습니다.out에서 인용합니다. 대상을 먼저 만들 필요가 없습니다.
public final static PrintStream out = null;

 
out은 시스템 클래스를 초기화할 때 실례화되어 컨트롤러에 출력을 설정합니다.
private static void initializeSystemClass() {

    props = new Properties();
    initProperties(props);  // initialized by the VM

    sun.misc.VM.saveAndRemoveProperties(props);


    lineSeparator = props.getProperty("line.separator");
    sun.misc.Version.init();


    FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
    //    FileDescriptor       out           。out    FileDescriptor  ,  "    (  )"    。
    FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
    FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
    setIn0(new BufferedInputStream(fdIn));
    //      
    setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));
    setErr0(newPrintStream(fdErr, props.getProperty("sun.stderr.encoding")));

    loadLibrary("zip");

    Terminator.setup();

    sun.misc.VM.initializeOSEnvironment();

    Thread current = Thread.currentThread();
    current.getThreadGroup().add(current);


    setJavaLangAccess();


    sun.misc.VM.booted();
}

//native     
private static native void setOut0(PrintStream out);

 
out 대상은 사용자 정의가 가능합니다.개발자는 실행 기간 동안out 대상을 수정할 수 있습니다.
public static void setOut(PrintStream out) {
    checkIO();
    setOut0(out);
}

 
예: out 출력 경로를 수정하고 결과를 문서로 출력합니다
public class ModifyOut {
  public static void main(String args[]) {
       System.setOut(new PrintStream(new FileOutputStream("ModifyOut.txt")));
       System.out.println("out       !");
  }
}

 
마지막으로 printl ()
println () 의 입력 매개 변수는 다양한 매개 변수 유형을 포함하고 있습니다. 하나하나 열거해 보십시오.
java.io.PrintStream#println()
java.io.PrintStream#println(boolean)
java.io.PrintStream#println(char)
java.io.PrintStream#println(char[])
java.io.PrintStream#println(double)
java.io.PrintStream#println(float)
java.io.PrintStream#println(int)
java.io.PrintStream#println(long)
java.io.PrintStream#println(java.lang.Object)
java.io.PrintStream#println(java.lang.String)

 
각종 매개 변수의 println () 방법은 내용이 대동소이하다. 여기서 println (Object x) 을 예로 들면, println () 에서 무엇을 했는지 한 번 봅시다.
public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (this) {
        print(s);
        newLine();
    }
}

 
println () 방법의 대부분 파라미터를 사용하면 write (s) 방법을 실행하기 전에 모두 String 형식으로 변환됩니다.char[]만 String 유형으로 변환되지 않았습니다.왜?헤헤, 스트링 타입은 바로 차[]가 이룬 거야.
public void print(String s) {
    if (s == null) {
        s = "null";
    }
    //         write(s)   ,      String  。
    write(s);
}

 
여러 가지 유형으로 String 유형 전환을 하는 것은 바로 이 write 방법을 집중적으로 통일적으로 처리하기 위해서이다
private void write(String s) {
    try {
        synchronized (this) {    
            //           
            ensureOpen();
            //        
            textOut.write(s);
            //
            textOut.flushBuffer();
            charOut.flushBuffer();
            if (autoFlush && (s.indexOf('
') >= 0)) out.flush(); } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } }
/**
* writeBuffer       1024
*/
private static final int WRITE_BUFFER_SIZE = 1024;

public void write(String str) throws IOException {
    write(str, 0, str.length());
}

public void write(String str, int off, int len) throws IOException {
    synchronized (lock) {
        char cbuf[];
        if (len <= WRITE_BUFFER_SIZE) {
            if (writeBuffer == null) {
                writeBuffer = new char[WRITE_BUFFER_SIZE];
            }
            cbuf = writeBuffer;
        } else {    // Don't permanently allocate very large buffers.
            cbuf = new char[len];
        }
        str.getChars(off, (off + len), cbuf, 0);

        //       (     ,          )
        write(cbuf, 0, len);
    }
}

//       buffer       ,offset  buffer            ,len      。
abstract public void write(char cbuf[], int off, int len) throws IOException;

 
 
 

좋은 웹페이지 즐겨찾기