디폴트 생성자 : 개발자가 명시하지 않아도 컴파일 시점에 자동 생성된다.
public 클래스 이름() {
}
디폴트 생성자 외에 특정 목적에 의해서 개발자가 만든 생성자로, 매개변수에 차이가 있다.
childClass obj1 = new childClass(10); // 호출
// 사용자 정의 생성자
public childClass(int i){
System.out.println("User_Defined constructor")
num = i;
}
int arr[] = {10,20,30};
carClass obj2 = new carClass("Java", arr);
// 사용자 정의 생성자
public carClass(String s, int i[]){
System.out.println("USER_Defined constructor");
str = s;
nums = i;
}
객체가 GC 에 의해 메모리에서 제거될 때 finalize( ) 메소드가 호출된다.
시스템에게 GC 를 가급적 빨리 작동해서 객체를 처리하도록 요청하는 것
(주의 : GC 가 가급적 빨리 작동하도록 요청하는 것이지, System.gc() 를 사용한
다고 해서 GC가 바로 작동하는 것이 아니다. )
자바는 기본적으로 메모리를 개발자가 직접 관리하지 않으므로
일반적으로 System.gc(); 를 사용하는 경우는 드물다.
// 소멸자
carClass obj4;
obj4 = new carClass();
obj4 = new carClass(); // 기존에 생성했던 객체와의 연결을 끊어버리고
// 지금 이 객체와의 연결을 잇는다. 기존 객체는 GC 가 언젠가 적절한 시점에 소멸시킨다.
// 객체가 소멸될때 이 객체가 가지고 있는 finalize() 메소드가 호출된다.
System.gc() // 시스템에게 가급적으로 GC 가 작동하도록 요청하는 것 (바로 요철하는 것이 아님)
지금 내가 작업을 하고 있는 해당 객체 (나 자신) 를 가리키는 것
=> 밑에 있는 예시로 보면, 나 나신의 객체인 ObjectClass 의 객체 obj1를 가리키는 것이다.
public class ObjectClass {
// 전역변수 x,y
public int x;
public int y;
public ObjectClass(int x, int y) { // 지역변수 x,y
x = x; // 이렇게 지역변수 x,y 의 값을 클래스의 전역변수 x,y 에 할당시키고 싶을 때
y = y; // 두 변수명이 동일해서 햇갈릴 수가 있다. 이럴 때 this 키워드를 사용해서 혼동을 방지한다.
}
}
obj1 = ObjectClass(3,5)
이렇게 변수가 혼동되는 경우를 방지하기 위해 변수에 this 키워드를 아래처럼 적용할 수 있다.
public class ObjectClass {
// 전역변수 x,y
public int x;
public int y;
public ObjectClass(int x, int y){
this.x = x; // this 가 가리리는 것은 자기 자신인 obj1 객체이다.
this.y = y; // 즉, this 객체(obj1) 의 전역변수 x 와 y 를 지칭하는 것이다.
}
}
obj1 = ObjectClass(3,5)