package ch02;
/*
* 정리
* Stack (지역변수 - 메소드가 실행될 때 메모리에 할당, 메서드가 종료될 때 메모리에서 사라짐)
* Heap(전역변수 - new 할 때 메모리에 할당, 더 이상 참조하지 않을 때 메모리에서 사라짐)
* Static (전역변수 - main 메서드가 실행되기 전에 메모리에 할당, main 메서드가 종료되면 메모리에서 사라짐)
*/
public class StackEx02 {
static int sum = 20; // 전역변수 (static), 자바프로그램이 시작 될 때 뜨다가 종료되기 전까지 존재
int value = 50; // 전역변수 (heap) ,new하는 순간 메모리에 뜸 , 더 이상 참조하지 않을 때 자동으로 사라진다.
//메서드 코드내부는 실행될 때 stack에 올라감
static void a() {
int n1 = 1; // a 메서드의 스택영역에 저장됨 (지역변수) , a메서드가 실행될 때 stack공간에 n1이 할당되고 a메서드가 종료되면 메모리에 사라짐
System.out.println(n1);
//실행되려고 할 때 static 공간에 할당해야 하는데 불가능함, static 공간 할당은 main 메서드 실행전에 해야함
//static int n2 = 2;
}
public static void main(String[] args) {
a();
System.out.println(sum);
StackEx02 s = new StackEx02(); // heap공간에 value가 할당
System.out.println(s.value);
System.out.println("test1 - 더이상 s 변수를 참조하지 않기 때문에 메모리에서 사라진다.");
}
}
메서드 : 어떤 클래스의 행위
package ch02;
public class MethodEx02 {
//void는 리턴하지 않겠다라는 의미
static int add() { // 호출이 되면 중괄호 내부가 실행된다. 이때 Stack공간이 메모리에 만들어진다.
int sum = 5+6;
return sum;
}
public static void main(String[] args) {
int result = add(); // add() 메서드 호출
System.out.println(result);
}
}
package ch02;
public class MethodEx03 {
//매개변수와 인수의 타입이 다르면 안된다.
static void 자판기_음료_돌려주기(int coin) {
System.out.println("동전을 투입하였습니다.");
}
static void 자판기_음료_돌려주기2(double paper) {
System.out.println("지폐를 투입하였습니다.");
}
static void 자판기_음료_돌려주기3(String card) {
System.out.println("카드를 투입하였습니다.");
}
static void add(int n1, int n2) { //매개변수가 2개
System.out.println("더하기 메서드가 호출되었습니다.");
}
public static void main(String[] args) {
자판기_음료_돌려주기(0);
자판기_음료_돌려주기2(10.0);
자판기_음료_돌려주기3("삼성카드");
add(5,6);
}
}