2017-10-02 1 views
-1

Java의 전체 초보자. 나는 몇 번 아래 줄을 보았고 그것을 이해할 수 없다 ... new TestCode() - 그것은 instatiation 인 것으로 보이지만 아무 것도 지정되지 않았다. 그래서 어떻게 참조 될 수 있는가?Java에서 클래스의 새 인스턴스가 변수에 할당되지 않은 이유

class TestCode 
{ 
    public TestCode() 
    { 
     System.out.println(); 
     System.out.println("Welcome to the Program"); 
    } 

    public static void main(String args[]){new TestCode();} 

} 
+0

https://stackoverflow.com/questions/46396647/what-is-calling-class-method- : 또 다른 예로서

는 여기에 코드가 공식화 될 수있는 다른, 기능적으로 동일 방법입니다 on-constructor –

+1

* 어떻게 참조 할 수 있습니까? * 할 수는 없습니다. 그것이 바로 변수입니다. – shmosel

+0

이것을 확인하십시오 https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html –

답변

0

참조 할 수 없습니다. 새 인스턴스가 만들어져 즉시 삭제됩니다.

그러나 생성자 코드가 호출되므로 부작용이 발생합니다 (예를 들어 stdout에 인쇄중인 경우). 이런 일을하는 것은 나쁜 습관입니다.

변수에 할당하는 것에 대한 Zaki의 답변을 참조하십시오. 그럼 당신은 그것을 참조하고, 할 수 있습니다.

+0

감사합니다 아담 .............. 나는 당신에게 모든 링크를 보낼 수 있습니다. 여기에서 규칙을 어기면 튜토리얼을 보았습니다. – user3511553

0

new 코드 워드를 통해 개체를 인스턴스화하면 힙 (개체 및 필드를 저장하는 데 사용되는 시스템 메모리 부분)의 공간이 할당되고 생성자가 실행됩니다. 이 경우 생성자는 표준 출력에 쓰고 객체에 대한 참조가 만들어 지는지 여부에 관계없이 실행됩니다.

그 후에, 당신 말이 맞습니다. 개체에 대한 참조가 없으므로 개체에 액세스 할 수 없습니다. 따라서 가비지 수집기는 결국 메모리 공간을 할당 해제합니다.

아담이 말했듯이, 이것은 일반적으로 생성자가 객체를 초기화해야한다는 기대를 망쳐 놓기 때문에 일반적으로 권장하지 않으며 외부 세계와의 상호 작용은 해당 메소드를 통해 가능해야합니다. 그것은 조금 더하더라도 그래서

, 잘 구조화 된 코드는 예를 들어 다음과 같이 수 :

class TestCode { 
    public TestCode() {} 

    public void welcome() { 
     System.out.println(); 
     System.out.println("Welcome to the Program"); 
    } 

    public static void main(String args[]){ 
     TestCode tc = new TestCode(); 
     tc.welcome(); 
    } 
} 

P.S. 물론 모든 인스턴스 인스턴스에 대해 인스턴스 외부에서 작업을 수행하려는 경우가 있습니다. 예를 들어 클래스의 모든 인스턴스에 대한 정적 목록을 유지하는 것과 같이 인스턴스가 생성 될 때마다 특정 인스턴스를 추가하는 경우와 같은 경우가 있습니다. 그럼에도 불구하고 개인 init() 메소드를 생성하고 생성자에서 호출하여 다른 기능을 가진 요소를 더 잘 분리하는 것이 가장 좋습니다.

class TestCode { 
    public TestCode() { 
     init(); 
    } 

    private void init() { 
     System.out.println(); 
     System.out.println("Welcome to the Program"); 
    } 

    public static void main(String args[]){ 
     TestCode tc = new TestCode(); 
     // Or simply: new TestCode(); 
    } 
} 
관련 문제