컴퓨터/Java

생성자, 소멸자

수제녹차 2019. 9. 3. 08:20
728x90
반응형

- 디폴트 생성자

객체가 생성될 때(변수에 할당 말고 new로 생성시) 가장 먼저 호출되는 생성자로, 만약 개발자가 명시하지 않아도 컴파일 시점에 자동 생성된다. 

package lec11Pjt001;

public class ChildClass {
	
	public String name;
	public String gender;
	public int age;
	
    // 디폴트 생성자
	public ChildClass() {
		System.out.println(" --- ChildClass constructor --- ");
	}
    // 디폴트 생성자가 없는 경우 실행되는 생성자
    public ObjectEx() {
    
    }
}

 

- 사용자 정의 생성자

디폴트 생성자 외에 특정 목적에 의해서 개발자가 만든 생성자, 매개변수에 차이가 있다.

// 1. ObjectEx obj2 = new ObjectEx(10);로 호출시

// 사용자 정의 생성자 예시
public ObjectEx(int i) {
	System.out.println("UserDefined constructor");
    num = i;
}

//int arr[] = {10,20,30};
// 2. ObjectEx obj2 = new ObjectEx("Java", arr);
// 사용자 정의 생성자 예시
public ObjectEx(String s, int i[]) {
	System.out.println("UserDefined constructor");
}

 

- 소멸자

객체가 GC에 의해서 메모리에서 제거될 때 finalize() 메서드가 호출된다.

모든 클래스에 명시하지 않아도 된다.

System.gc(); -> System에 garbage collector 행위 지시, 바로 작동하는 것이 아니라 가급적 빨리 작동하도록 요청하는 것, java는 기본적으로 메모리를 개발자가 직접 관리하지 않으므로 일반적으로 System.gc()를 사용하는 경우는 드물다.

@Override
protected void finalize() throws Throwable {
   System.out.println(" -- finalize() method --")
   super.finalize();
}

 

- this 키워드

지금 내가 작업을 하고 있는 해당 객체 this

class로부터 만들어지는 객체

package lec11Pjt001;

public class ObjectClass {
	public int x;
	public int y;
	
	public ObjectClass(String s, int[] iArr) {
		System.out.println("-- ObjectClass() --");
		System.out.println("s : " + s);
		System.out.println("iArr : " + iArr);		
	}
	public ObjectClass(int x, int y) {
		// 전역변수에 인자로 넣어준 값을 할당한다
		this.x = x;
		this.y = y;
	}
	
	public void getInfo() {
		System.out.println("x : " + x); // this.x 의미
		System.out.println("y : " + y); // this.y 의미
	}
	
}
반응형