java 대상 및 인용

먼저 간단한 클래스를 정의합니다:class Vehicle {int passengers; int fuelcap; int mpg;}이 템플릿이 있으면 대상을 만들 수 있습니다: - 대상과 클래스 개념이 모호하면 볼 수 있습니다: 대상과 클래스 상해Vehicle veh1 = new Vehicle ();일반적으로 이 문장의 동작을 하나의 대상을 만드는 것이라고 하는데, 사실은 네 가지 동작을 포함한다.1. 오른쪽 new Vehicle();Vehicle 클래스를 모델로 하고 퇴적 공간에서 Vehicle 클래스 대상을 만든다(약칭 Vehicle 대상) - 자바 퇴적 개념이 모호하면 JAVA에서 퇴적과 메모리 분배를 볼 수 있다(여기서 첫 번째 부분의 퇴적 소개만 보고 다음에 퇴적 나머지는 보는 것이 좋다).끝의 ()는 대상이 생성된 후에 Vehicle 클래스의 구조 함수를 호출하여 새로 생성된 대상을 초기화하는 것을 의미합니다.없으면 자바는 기본 구조 함수를 추가합니다.3. 왼쪽에 있는 Vehicle veh1은 창고 공간에 Vehicle 클래스의 인용 변수를 만들었습니다. 이름은veh1이고 앞으로 Vehicle 대상을 가리키는 인용입니다.4.중간의 = 조작부호는veh1이 새로 만든 Vehicle 대상을 인용하도록 합니다. 이때veh1에 저장된 주소는Vehicle 대상의 주소입니다.이 문장은 두 부분으로 나누어 쓸 수 있다: Vehicle veh1;veh1 = new Vehicle(); 이렇게 보면 하나는 대상 인용 변수이고 다른 하나는 대상 주소를 인용에 부여하는 것이다.하나의 Vehicle 클래스는 이것에 따라 무수한 대상을 만들 수 있으며, 이 대상을 모두 'Vehicle' 이라고 할 수는 없다.대상은 이름도 없어서 직접 방문할 수 없다.우리는 대상 인용을 통해서만 간접적으로 대상에 접근할 수 있다.대상, 인용과 그들 사이의 관계를 형상적으로 설명하기 위해서는 어쩌면 타당하지 않을지도 모르는 비유를 할 수 있다.대상은 우리가 그것을 잡을 수 없을 정도로 큰 풍선과 같다.인용 변수는 밧줄로 풍선을 묶는 데 쓸 수 있다.첫 번째 문(Vehicle veh1;)만 실행된 경우두 번째 조항(veh1 = new Vehicle();)을 실행하지 않았습니다.이 때 만든 인용 변수veh1은 대상을 가리키지 않았습니다. 그 값은null입니다.인용 변수는 어떤 대상을 가리키거나,null을 가리킬 수 있습니다.그것은 밧줄로, 아직 어떤 풍선도 매지 않은 밧줄이다.두 번째 문장을 집행한 후, 새 풍선 한 마리가 만들어졌고,veh1이라는 밧줄에 묶였다.우리가 이 밧줄을 잡는 것은 그 풍선을 잡는 것과 같다.다시 한 마디: Vehicle veh2;밧줄을 하나 더 만들었는데 아직 풍선을 매지 못했다.한마디만 더 하면:veh2 =veh1;묶었어.여기, 복제 행위가 발생했습니다.그러나 대상 자체가 복제되지 않고 복제된 것은 대상 주소일 뿐이라는 것을 설명하고자 한다.결과적으로veh2도veh1이 가리키는 대상을 가리킨다.두 밧줄을 묶은 것은 같은 풍선이다.다음 문장으로 대상을 만들면:veh2 = new Vehicle ()인용 변수veh2는 두 번째 대상을 가리킨다.이때veh1은 변하지 않았습니다. 물론 가리키는 것은 첫 번째 대상입니다.이상의 서술을 다시 추론해 보면 우리는 다음과 같은 결론을 얻을 수 있다. (1) 한 대상의 인용은 0개 또는 1개의 대상을 가리킬 수 있다(밧줄 하나는 풍선을 매지 않아도 되고 풍선을 매지 않아도 된다).(2) 하나의 대상은 N개의 인용이 그것을 가리킬 수 있다(N개의 밧줄이 풍선을 묶을 수 있다). -주의: 한 대상은 인용 지향이 없을 수 있습니다. (풍선은 밧줄로 묶지 않아도 됩니다.) 일반적으로 출력에 사용됩니다. 예를 들어 시스템입니다.out.println(new Vehicle());다음 문장을 다시 쓰면:veh1 =veh2;위의 추정에 따르면veh1도 두 번째 대상을 가리킨다.이거 괜찮아요.첫 번째 상대가 문제인가요?밧줄이 그것을 묶지 않아서, 그것은 날아갔다.대부분의 책에서 자바의 쓰레기 회수 메커니즘에 의해 회수되었다고 한다.이것은 확실하지 않다.정확히 말하면 그것은 이미 쓰레기 회수 메커니즘의 처리 대상이 되었다.언제 진정으로 회수되는지는 쓰레기 회수 메커니즘의 심정에 달려 있다.이로부터 보면 아래의 문장은 합법적이지 않겠지?적어도 쓸모없는 거지?new Vehicle();아니야.그것은 합법적이며 사용할 수 있다.예를 들어, 만약 우리가 단지 인쇄를 위해 대상을 생성한다면, 인용 변수로 그것을 묶을 필요가 없다.가장 일반적인 인쇄 문자열: System.out.println(“I am Java!”);문자열 객체 "I am Java!"인쇄한 후에 버려집니다.어떤 사람들은 이런 대상을 임시 대상이라고 부른다.객체와 참조의 관계는 객체 재활용 위에 있는 대부분의 JAVA 객체 참조에서 발췌되고 객체 할당 값까지 지속됩니다.
여기 보면 대충 알겠죠?다음은 코드를 보고 검증해 보겠습니다.
public class TestC {
 private int id;
 private String name;

 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 @Override
 public String toString() {
  return "TestC [id=" + id + ", name=" + name + "]";
 }
 public TestC(){};
 public TestC(int id,String name){
  this.id=id;
  this.name=name;
 };
 public static void main(String[] args){ 
  TestC t1=new TestC(1," ");// , 
  TestC t2=t1;// ( ) 
  System.out.println("t1:"+t1.toString()+"--t2:"+t2.toString());
  t2.setId(2);// 
  t2.setName(" ");
  System.out.println("t1:"+t1.toString()+"--t2:"+t2.toString());
 }
}

우리는 결과를 볼 수 있다.
t1:TestClone [id=1,name=장3] - t2:TestClone [id=1,name=장3] t1:TestClone [id=2,name=이사] - t2:TestClone [id=2,name=이사]
우리는 이 두 인용의 결과가 똑같다는 것을 알 수 있다. 왜냐하면 두 번째 인용과 첫 번째 인용이 대응하는 것은 같은 대상이기 때문이다.대상이 모두 하나이기 때문에 그가 어떻게 변화하든지 간에 두 인용의 결과는 모두 같다.(위의 풍선 이론으로 같은 풍선을 묶은 것이다. 이 풍선이 납작하든 둥글든 모두 이것이다)
이때 인용이 다르면 달라지지 않을까?다음에 코드를 추가합니다.
System.out.println("======= =======");
  t2=new TestC(3," ");
  System.out.println("t1:"+t1.toString()+"--t2:"+t2.toString());

t1:Testc[id=1,name=장삼]--t2:Testc[id=1,name=장삼]t1:Testc[id=2,name=이사]--t2:Testc[id=2,name=이사]===============t1:Testc[id=2,name=이사]--t2:Testc[id=3,name=왕오]
이 두 인용은 다르다.두 번째 인용은 두 번째 새 대상을 가리키기 때문이다(두 번째 인용은 두 번째 대상의 주소를 저장한다). 첫 번째 인용은 변화가 없다(위의 풍선 예: 두 번째 풍선은 현재 두 번째 풍선을 묶고 첫 번째 풍선은 아직 첫 번째 풍선에 있다. 현재 모든 밧줄에 각각 풍선이 하나씩 있고 서로 연락이 없다)
자, 대상에 대한 관계를 인용하면 대개 이렇다. 위에서 언급한 JAVA의 창고와 메모리 분배를 보면 더욱 깊이 이해할 수 있다.
단, 대상의 값만 복제하고 대상의 주소를 원하지 않는다면clone 인터페이스를 실현하거나 서열화할 수 있다. 다음 소개-대상의 복제

좋은 웹페이지 즐겨찾기