2012-11-06 2 views
2

저는 C++에 대한 지식과 System.out.println()에 대해 Java를 배우는 초보자입니다. 지금 당장 혼란 스럽네. 그래서 System은 클래스이고, out은 메소드를 호출 할 수있는 변수입니다. ?? 에 따라 : http://journals.ecs.soton.ac.uk/java/tutorial/getStarted/application/objects.html out 변수는 변수이며 변수는 컴퓨터 메모리의 저장 위치이며 형식 이름과 내용이 있습니다. .getLength()와 같은 메서드를 사용할 수있는 문자열과 같은 객체는 아닙니다. 웹 사이트에서 설명하는 방법은 Out이 PrintStream 클래스의 인스턴스를 참조하지만 그 방법은 무엇입니까?Java에서 System.out은 PrintStream 클래스를 어떻게 참조합니까?

+0

모든 변수는 그 의미에서 "객체"입니다. ** 편집 : ** 정의에 따라 - 메소드를 호출 할 수 있음 - 이는 모든 변수에 해당합니다 (엄격히 말하면 모든 변수가 @delnan에 의해 지적 된 바와 같이 객체는 아닙니다). – mellamokb

+2

@mellamokb Primitives ('int'와 friends)는 대부분의 "object"정의에 의한 객체가 아닙니다 (모든 유용한 것들을 포함합니다, 나는 논쟁 할 것입니다). 그리고 (참조 형의) 변수 *는 객체 *를 가리키며, 그것들은 객체 자체가 아닙니다. – delnan

+0

@mellamokb 이것은 나를 혼란스럽게합니다 ... –

답변

5

이 객체

당신의 추론은 잘못된 것입니다 곳이 아니다. System.out (참조)입니다.

참조 유형은 Javadoc에 설명 된대로 PrintStream입니다. out 당신이 메소드를 호출 할 수있는 객체 (PrintStream의 인스턴스)를 들고 변수 :

System.out.println(); 
1

out이 메서드를 호출하지 않습니다 이것은 예를 들어, System.outPrintStream의 메소드를 호출 할 수 있음을 의미 . 예를 들어

: 또한

void print(PrintStream ps, Object o) { 
    ps.println(o); 
} 
... 
print(System.out, "hey!"); 
1

아웃을 할 수

System.out.println("hey!"); 

시스템라는 클래스의 공공 정적 필드입니다.

공개이므로 메서드를 호출 할 수 있습니다.

해당 유형은 입니다. PrintStream입니다.

배울 수있는 가장 좋은 방법은 설명서를 참조하는 것입니다

주의가 밖으로에 , 설명 상단 부분 및 ERR.

0

System.out으로는 그 출력 C++ 표준 출력의 등가물에 링크의 PrintStream의 특정 인스턴스이다

+0

그래서 System의 변수이지만 PrintStream System() {PrintStream out = new PrintStream;}을 참조합니까? –

+0

"속성"이 올바른 용어입니다. 그것은 클래스 시스템 {static PrintStream out = ...;}과 비슷하지만 Java 가상 머신에 의해 생성되고 초기화됩니다 – thedayofcondor

+0

System.out은 객체이며 print()와 같은 메소드를 호출 할 수 있습니다 – thedayofcondor

1

더 엄격 그렇게 입력 PrintStream의 객체를 참조 공용 정적 필드는 예이다 , 당신은 그것에 메서드를 호출 할 수 있습니다.

Java 참조는 C 포인터와 유사합니다 (적어도 사용되는 방식에는 분명히 상당한 차이가 있습니다).

0

시스템은 println() 메소드를 호출 할 수있는 PrintStream 클래스의 객체를 보유하는 최종 변수가있는 최종 클래스입니다.

0

실제로 System.out.println(String args[])의 out 매개 변수는 System 클래스의 정적 필드입니다. 필드가 선언 될 때마다 특정 데이터 유형이 있어야합니다. 이 클래스에서 out 필드는 static PrintStream out;으로 정의됩니다.

이것은 out의 데이터 유형이 PrintStream 클래스임을 의미합니다. 이런 식으로 System.out은 실제로 PrintStream 클래스의 객체를 나타냅니다. 이 개체를 사용하여 메서드를 PrintStream 클래스라고합니다. 대략이 같은 시스템 클래스의

0

생각해 : 여기

package java.lang; 
public final class System { 

    public final static PrintStream out; 
} 

는 "유형"의 PrintStream의 정적 최종 변수입니다. 정적 변수이므로 System 클래스의 객체를 만들지 않고 "ClassName.variableName"을 호출하여 System.out을 수행 할 수 있습니다.

이제 Out은 "PrintStream"클래스의 참조 변수입니다. 지금까지이 참조 변수 만 만들어졌으며 Printstream 클래스의 "개체"를 참조하지 않습니다. 그러나 System 클래스는 메모리에로드 될 때 PrintStream의 객체를 만듭니다. 시스템 클래스의 완전한 소스 코드 인 아래의 링크 initializeSystemClass()setOut0()을 참조하십시오. (이 엄청난 코드에 압도 당하지 말고, System 내부에서 호출되는 "PrintStream()"(여기 1095 행)이 있음을 확인하십시오). 우리의 PrintStream 클래스의 객체가있을 때

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/System.java

그래서, 우리 밖으로 참조 변수는 쉽게 바로, 그것의 메소드를 호출 할 수 있습니다? 이것은 우리가 System.out.println()을 호출하는 방법입니다.

관련 문제