자바 대상 및 인용(전재-작성 자 및 출처 확인 불가)
설명 하기 편리 하도록 우 리 는 먼저 간단 한 종 류 를 정의 한다.
class Vehicle {
int passengers;
int fuelcap;
int mpg;
}
이 템 플 릿 이 있 으 면 대상 을 만 들 수 있 습 니 다.
Vehicle veh1 = new Vehicle();
보통 이 문장의 동작 을 하나의 대상 을 만 드 는 것 이 라 고 부 르 는데 사실은 네 가지 동작 을 포함한다.
1)오른쪽 에 있 는'new Vehicle'은 Vehicle 클래스 를 템 플 릿 으로 하여 쌓 인 공간 에 Vehicle 클래스 대상(Vehicle 대상 이 라 고도 약칭)을 만 듭 니 다.
2)끝의()는 대상 이 생 성 된 즉시 Vehicle 류 의 구조 함 수 를 호출 하여 생 성 된 대상 을 초기 화 하 는 것 을 의미한다.구조 함 수 는 틀림없이 있 을 것 이다.만약 당신 이 쓰 지 않 았 다 면,자바 는 당신 에 게 기본 구조 함 수 를 보충 해 줄 것 입 니 다.
3)왼쪽 에 있 는"Vehicle veh 1"은 Vehicle 클래스 참조 변 수 를 만 들 었 습 니 다.Vehicle 클래스 인용 이란 앞으로 Vehicle 대상 을 가리 키 는 대상 인용 으로 사용 할 수 있 는 것 이다.
4)"="연산 자 는 대상 이 새로 만 든 그 Vehicle 대상 을 참조 하도록 합 니 다.
우 리 는 이 문장 을 두 부분 으로 나 눌 수 있다.
Vehicle veh1;
veh1 = new Vehicle();
효 과 는 같다.이렇게 쓰 면 비교적 명확 하 다.두 개의 실체 가 있다.하 나 는 대상 인용 변수 이 고 하 나 는 대상 자체 이다.
쌓 인 공간 에서 만 든 실 체 는 데이터 세그먼트 와 스 택 공간 에서 만 든 실체 와 다르다.비록 그것들 도 확실히 존재 하 는 실체 이지 만 우 리 는 볼 수도 만 질 수도 없다.뿐만 아니 라 두 번 째 문장 을 자세히 살 펴 보고 새로 만 든 대상 의 이름 을 찾 아 보 자.어떤 사람 은 그것 을'Vehicle'이 라 고 부른다.아 닙 니 다."Vehicle"은 클래스(대상 의 생 성 템 플 릿)의 이름 입 니 다.하나의 Vehicle 류 는 이에 따라 수많은 대상 을 만 들 수 있 으 며,이 대상 들 을 모두'Vehicle'이 라 고 부 를 수 는 없다.
대상 은 이름 도 없어 직접 방문 할 수 없다.우 리 는 대상 인용 을 통 해 간접 적 으로 대상 을 방문 할 수 밖 에 없다.
대상 을 구체 적 으로 설명 하고 인용 하 며 그들의 관 계 를 설명 하기 위해 서 는 적절 하지 않 을 수도 있 는 비 유 를 할 수 있다.대상 은 마치 우리 가 그것 을 잡 을 수 없 을 정도 로 큰 풍선 과 같다.인용 변 수 는 줄 로 풍선 을 묶 을 수 있다.
첫 번 째 문장 만 실 행 했 을 때 두 번 째 문장 이 실행 되 지 않 았 다 면,이 때 만 든 인용 변수 veh 1 은 대상 을 가리 키 지 않 았 고,값 은 null 입 니 다.인용 변 수 는 대상 을 가리 키 거나 null 을 가리 킬 수 있 습 니 다.그것 은 밧줄 로 아직 어떤 고무공 도 묶 지 않 은 밧줄 이다.두 번 째 문장 을 실행 한 후 새 풍선 한 마리 가 만들어 져 veh 1 줄 에 묶 였 다.우리 가 이 밧줄 을 잡 은 것 은 그 풍선 을 잡 은 것 과 같다.
한 마디 더:
Vehicle veh2;
줄 을 하나 더 만 들 었 는데 아직 풍선 을 묶 지 못 했다.한 마디 만 더 하면:
veh2 = veh1;
묶 었 어.이곳 에서 복제 행위 가 발생 했다.그러나 대상 자 체 는 복제 되 지 않 았 고 복 제 된 것 은 대상 인용 에 불과 하 다 는 것 을 설명 한다.결 과 는 veh 2 도 veh 1 이 가리 키 는 대상 을 가 리 켰 다.두 밧줄 이 묶 인 것 은 같은 고무공 이다.
다음 문장 으로 대상 을 만 들 면:
veh2 = new Vehicle();
변 수 를 참조 하여 veh 2 를 두 번 째 대상 으로 바 꿉 니 다.
상기 서술 에서 추론 해 보면 우 리 는 다음 과 같은 결론 을 얻 을 수 있다.(1)한 대상 의 인용 은 0 개 또는 1 개 대상 을 가리 킬 수 있다.(한 밧줄 은 풍선 을 묶 지 않 아 도 되 고 풍선 을 묶 을 수도 있다)(2)한 대상 은 N 개의 인용 이 그것 을 가리 킬 수 있다.
다음 문장 을 다시 쓰 면:
veh1 = veh2;
위의 추정 에 따 르 면 veh 1 도 두 번 째 대상 을 가리 키 고 있다.이 건 문제 없어 요.문 제 는 첫 번 째 대상 인가요?밧줄 하나 가 그것 을 묶 지 않 고 날 아 갔다.대부분의 책 에 서 는 자바 의 쓰레기 회수 메커니즘 에 의 해 회수 되 었 다 고 말한다.이것 은 확실 하지 않다.정확히 말 하면,그것 은 이미 쓰레기 회수 메커니즘 의 처리 대상 이 되 었 다.언제 진정 으로 회수 되 는 지 는 쓰레기 회수 메커니즘 의 심정 에 달 려 있다.
이로부터 보면 아래 의 문장 은 합 법 적 이지 않 겠 지?적어도 소 용 없 는 거 죠?
new Vehicle();
아니 야.그것 은 합 법 적 이 고 사용 할 수 있다.예 를 들 어 우리 가 인쇄 를 위해 대상 을 만 들 면 인용 변수 로 묶 을 필요 가 없다.가장 흔히 볼 수 있 는 것 은 인쇄 문자열 입 니 다:
System.out.println(“I am Java!”);
문자열 대상"I am Java!"인쇄 후 버 려 집 니 다.어떤 사람 은 이런 대상 을 임시 대상 이 라 고 부른다.
대상 과 인용 관 계 는 대상 이 회수 할 때 까지 계 속 됩 니 다.그러나 이 점 에 대해 서 는 다음 글 에서 자바 회수 체 제 를 약술 하고 다시 이야기 할 계획 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.