2011-08-29 3 views
0

그냥 자바를 배우고 나는 이것이 어리석게 들릴지도 모르지만 나는 물어야한다는 것을 알고있다.인쇄에서 자바 새로운 날짜()

System.out.print(new Date()); 

나는 인수에 어떤 문자열, Date 객체로, new Date() 반환에 대한 참조입니다 최종 값으로 변환되는 것을 알고있다. 어떻게 인쇄합니까? 내가 생각할 수있는

Mon Aug 29 13:22:03 BST 2011 

있는 유일한 방법은 함수가 그 값은 문자열로 변환하고이를 인쇄 얻을 수있는 모든 데이터 멤버를 구문 분석 어떻게 든입니다.

어떻게 작동하나요?

감사합니다.

답변

4

무언가를 인쇄하면 해당 개체의 toString() 메서드가 호출됩니다. 따라서 의미있는 구현을 제공하는 것은 개별 클래스에 달려 있습니다. 참고로

Java Tutorial: The Object class

  • 을보고이 날짜의 toString() 방법 :

    public String toString() { 
    // "EEE MMM dd HH:mm:ss zzz yyyy"; 
    BaseCalendar.Date date = normalize(); 
    StringBuilder sb = new StringBuilder(28); 
    int index = date.getDayOfWeek(); 
    if (index == gcal.SUNDAY) { 
        index = 8; 
    } 
    convertToAbbr(sb, wtb[index]).append(' ');   // EEE 
    convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM 
    CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd 
    
    CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH 
    CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm 
    CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss 
    TimeZone zi = date.getZone(); 
    if (zi != null) { 
        sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz 
    } else { 
        sb.append("GMT"); 
    } 
    sb.append(' ').append(date.getYear()); // yyyy 
    return sb.toString(); 
    } 
    
+0

감사합니다. 이제 이해하십시오 :) –

0

Java의 각 객체는 객체에서 확장됩니다. Object는 toString 메서드를 정의합니다.이 메서드는 객체를 문자열 표현으로 변환합니다.

대부분의 JVM에서 Object의 기본 구현은 전체 클래스 이름 뒤에 "@"와 16 진수를 반환하며 JVM에서 해당 객체 인스턴스를 고유하게 나타냅니다.

Date 객체는 toString 메서드를 재정 의하여 인쇄 된 문자열을 반환합니다.

0

print 메서드는 암시 적으로 새 날짜 개체에 toString 메서드를 호출합니다. toStringObject에 정의되어 있지만 here과 같이 Date에 겹쳐 쓰여집니다.

일반적으로 : 문자열이 예상되는 곳에서 개체를 사용할 때마다 toString 메서드가 자동으로 호출됩니다.

1

기본적으로 개체의 toString() 메서드가 호출됩니다.

9

개체의 .toString() 메소드를 호출 System.out.print(obj); 방법. 원하는대로 해당 메서드를 정의하는 것은 클래스에 달려 있습니다. 객체가 null이면 "null"이 인쇄됩니다.

클래스가 자체적으로 .toString() 메서드를 정의하지 않으면 Object 클래스의 기본 구현이 적용됩니다. @ 다음에 해시 코드가 인쇄됩니다.

0

System.out.println은 객체를 인수로 사용합니다. 모든 자바 클래스가 Object ..에서 상속 받기 전에 말한 것처럼이 Object 클래스에는 'toString'메소드가 포함되어 있으며 println 메소드는 객체에서 toString 메소드를 호출하기 만합니다.모든 클래스는 Object를 상속하므로 모든 클래스에는 호출 할 수있는 toString 메서드가 있습니다.

2

ObjecttoString()이며, 이는 개체의 텍스트 표현입니다. 모든 Java 오브젝트는, 오브젝트를 암묵적으로 또는 명시 적으로 확장합니다. 일부 클래스는 과 같은 toString() 메소드를 재정의했습니다.

그래서, 당신이 할 때

System.out.println(new Date()); 

는 "느슨하게"자바의 기본 동작입니다

System.out.println(new Date().toString()); 

로 번역합니다.


사실, System에서 out.println()는 (내부적으로 코드), 수행하는 PrintStream.println(Object x) (return (x == null)? "null" : x.toString())를 호출합니다.

서브 클래 싱 된 객체가 toString() 메소드를 덮어 쓰지 않으면 모든 클래스가 암시 적으로 또는 명시 적으로 Object까지 확장되므로 Object.toString 메소드가 대신 호출됩니다.

+0

고마워요. 의미가있다 –

+0

나는 실제로 그 일이 어떻게되는지 언급하고 싶다. 그들은 초보자가 권유 할 질문을 예측할 수 있어야합니다. 귀하의 설명은 분명 감사합니다. –