선언위치에 따른 변수의 종류
lv는 메소드가 시작하고 끝날 때까지만 유효 = 메소드 종료 시 자동제거
클래스 변수와 인스턴스 변수
- 카드라는 객체 2개가 있다.
개별적인 속성(숫자, 무늬) = 인스턴스 변수 = iv
공통적인 속성(폭,높이) = 클래스 변수 = cv = static
class Card {
String kind; //무늬
int number; //숫자
static int width = 100; //폭
static int height = 200; //높이
}
//예제
Card c = new Card();
c.king = "HEART";
c.number = 5;
//참조변수로 가능하나 권장 안함
c.width = 200;
c.height = 300;
//권장
Card.width = 200;
Card.heihjt = 300;
return문
반환 타입이 void일때는 `return;` 가 생략된 거다.
컴파일러가 자동으로 추가해 줌
호출 스택
스택(stack) - 밑이 막힌 상자. 위에 차곡차곡 쌓인다.
- main()이 println()을 호출
→ main메서드는 대기상태가 되고 println메서드는 실행상태가 됨\
- println()이 종료됨
→ println() 메서드는 사라짐
→ main() 다시 실행
= 아래 있는 메서드가 위의 메서드를 호출한 것
호출 스택 예제
class Data { int x; }
class PrimitiveParamEx {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x);
change(d.x);
System.out.println("After change(d.x)");
System.out.println("main() : x = " + d.x);
}
static void change(int x) { // 기본형 매개변수
x = 1000;
System.out.println("change() : x = " + x);
}
}
class Data { int x; }
class PrimitiveParamEx {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x);
}
}
main메서드에서 객체 생성하면 d라는 객체가 생성됨
멤버변수 x주소 100번지로 생성됨
x에 10이 저장됨
class Data { int x; }
class PrimitiveParamEx {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x); //main() : x = 10
change(d.x);
System.out.println("After change(d.x)"); //After change(d.x)
System.out.println("main() : x = " + d.x); //main() : x = 10
}
static void change(int x) { // 기본형 매개변수
x = 1000;
System.out.println("change() : x = " + x); //change() : x = 1000
}
}
change메소드가 실행됐을때 d.x의 값 즉 10이 복사가 된다.
change 메소드의 x=1000;가 실행된다.
change메소드의 지역변수가 1000으로 바뀐다.
change 메소드를 다 끝내고 main으로 돌아오면 change스택이 사라짐
→change의 지역변수 x도 사라진다.
그리고 main메서드도 종료되고(main스택이 사라지고)
프로그램이 종료된다.
'📝 끄적끄적 > 🖥️ 자바의 정석' 카테고리의 다른 글
[자바의 정석] 제어자, 캡슐화 (0) | 2023.09.24 |
---|---|
[자바의 정석] 상속, 참조변수 super, 생성자 super() (0) | 2023.09.23 |
[자바의 정석] 생성자, 변수/멤버 변수의 초기화 (0) | 2023.09.22 |
[자바의 정석] static 메서드와 인스턴스 메서드, 오버로딩 (0) | 2023.09.21 |
[자바의 정석] 기본형/참조형 매개변수, 참조형 반환타입 (0) | 2023.09.20 |
[자바의 정석] 클래스와 객체 (0) | 2023.09.17 |