basicJAVA/5. Oop

InterVari

unemo 2020. 10. 23. 08:54
반응형

이런 구조임

 

여기서 왜 먼저 써져있는 Data부터 시작하지 않을까?
여기선 클래스 파일 이 두개 만들어지는데, (컴파일) 
이 파일명이 InverVari이므로 동일한 InterVari를 먼저 실행하니까 (컴파일된 파일 기준 실행) InterVari.java파일 실행. 아예 다른파일인 Data클래스는 부르기 전까지 실행되지 않는다.
package e_oop;

class Data{
	int x;
}

public class InterVari {

	public static void main(String[] args) {
		
		//1. Data클래스의 객체를 만들어 주세요 변수명 d1
		Data d1 = new Data();
		
		//2. d1의x값을 10으로 변경해주세요
		d1.x = 10;
		
		//3. d1의 x값을 출력해주세요
		System.out.println("3번" + d1.x);
		
		//4. change메서드를 호출해 주세요, 인자값: d1의 x값
		change(d1.x);
		
		//4.5 d1의 x값을 출력해 주세요
		System.out.println("4.5번: " + d1.x);
		
		//5. Data클래스의 객체를 만들어 주세요 변수명은 d2
		Data d2 = new Data();
		
		//6. d2의 x값을 10으로 변경 해 주세요
		d2.x = 10;
		
		//7. d2의 x값을 출력해 주세요
		System.out.println("7번:" + d2.x);
		
		//8. change 메서드를 호출해 주세요. 인자값 : d2
		change(d2);
		
		//9. d2의 x값을 출력해주세요
		System.out.println("9번" + d2.x);
		
	}
	
	static void change(int x){
		x = 1000;
		System.out.println("change기본형 : "+x);
	}
	
	static void change(Data d1){
		d1.x = 1000;
		System.out.println("change참조형: "+d1.x);
	}
}
public class InterVari

메소드 아넬아에 인터버리 클래스가 로드되고, 인터버리의 클래스변수와 클래스 메소드 (main())이 함께 로드된다

	public static void main(String[] args) {

메인메소드가 콜스택에 로드된다

Data d1 = new Data();

대입연산자니까 왼쪽부터, 클래스가 일단 메소드아레아에 있는지 확인하는데 없다. 데이터클래스를 메소드아레아에 로드시키고 클래스변수나 메소드는 없다.

콜스택에 있는 메인메소드에 d1을 선언한다. 

new로 힙에 공간을 만들고, 데이터클래스의 인스턴스를 데려온다. , 인스턴스 변수인 x를 데려오면서 int형이니까 0으로 초기화시킨다. 이제 그 주소값을 콜스택의 메인메소드에 있는 d1에 담는다.

 

d1.x = 10;

d1을 힙영역에서 찾아서 그의 x값에 10을 대입한다. 0에서 10이 되었다.

 

System.out.println("3번" + d1.x);

출력문은 괄호먼저 하는데, 힙영역의 d1에 x값을 출력한다. 10으로 변경됐었기때문에 출력은 [3번 10] 이 된다

 

change(d1.x);

콜스택에 change(int x)를 쌓는다. 힙영역의 d1에 가서 x를 가져오는데, 10이 담겨있기때문에 10을 인자값으로 change()에 대입하고, x = 1000이기 때문에 x는 1000이 된다. 그 x를 출력하면 콘솔창에 [change기본형: 1000] 이 출력된다.

 

System.out.println("4.5번: " + d1.x);

출력문은 괄호 먼저니까 힙 영역의 d1 인스턴스에 찾아가서 x값을 출력한다. 

x에는 10이 있으므로 4.5번 : 10이 출력된다

 

Data d2 = new Data();

 

반응형

'basicJAVA > 5. Oop' 카테고리의 다른 글

201023 재귀호출, 매서드 오버로딩  (0) 2020.10.23
201023 매서드의 종류, 클래스멤버와 인스턴스 멤버간 참조호출  (0) 2020.10.23
201022 MyMathTest  (0) 2020.10.22
201022 METHOD  (0) 2020.10.22
20201022 CardTest  (0) 2020.10.22