Static
- static을 붙이면 프로그램 실행시 메모리에 올라간다.
- 객체생성을 하지 않아도 사용할 수 있다.
- static을 붙인 변수는 객체간에 변수의 값을 공유한다.
- static이 붙은 멤버의 명칭 : 클래스 변수, 클래스 메서드
- static이 붙지 않은 멤버의 명칭 : 인스턴스 변수, 인스턴스 메서드
class Human {
int account;
void saveMoney(int money){
account += money;
System.out.println("통장 잔고 : " + account);
}
static int dateAccount;
void saveDateMoney(int money){
dateAccount += money;
System.out.println("데이트 통장 잔고 : " + dateAccount);
}
}
public class Static {
static int var;
public static void main(String[] args) {
Human 철수 = new Human();
Human 영희 = new Human();
철수.saveMoney(100000);
영희.saveMoney(200000);
철수.saveDateMoney(200000);
영희.saveDateMoney(200000);
}
}
유틸리티 성향의 메서드
- 유틸리티 성향의 메서드인 경우 static을 붙인다.
- Math.random() Math.round() System.out.println()
import java.util.Scanner;
public class ScanUtil {
private static Scanner s = new Scanner(System.in);
public static String nextLine(){
return s.nextLine();
}
public static int nextInt(){
return Integer.parseInt(s.nextLine());
}
}
public static void main(String[] args) {
System.out.println("문자열 입력>");
String str = ScanUtil.nextLine();
System.out.println(str);
System.out.println("숫자 입력>");
int num = ScanUtil.nextInt();
System.out.println(num);
}
JVM(Java Virtual Machine)
- 자바로 만들어진 프로그램이 실행되는 컴퓨터 안의 가상 컴퓨터
- 운영체제 -> JVM -> 자바 프로그램
- 장점 : 운영체제에 상관없이 실행할 수 있다.
- 단점 : 속도가 느리다.
JVM 메모리 구조
- Method Area(메서드 영역) : 클래스 멤버가 저장된다. (static이 붙은 것)
- Call Stack(호출 스택) : 현재 호출되어 있는 메서드가 저장된다. (출력 후 Call Stack에서 삭제된다.)
- Heap : 객체가 저장된다.
public class JVM {
int instanceVar;
static int classVar;
void instanceMethod(){
System.out.pritnln(instanceVar);
System.out.println(classVar);
}
static void classMethod(){
System.out.println(classVar);
}
public static void main(String[] args) {
System.out.println(classVar);
classMethod();
JVM jvm = new JVM();
System.out.println(jvm.instanceVar);
jvm.instanceMethod();
jvm = null;
}
}