JVM의 메모리 구조
1.메서드 영역
-프로그램 실행 중 어떤 클래스가 사용되면, jVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스,데이터)를 이곳에 저장한다.
-이때 그 클래스의 클래스 변수도 이 영역에 함께 생성된다.
2.힙
-인스턴스가 생성되는 공간
3.호출스택
-호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다.
기본형 매개변수
-변수의 값을 읽기만 할 수 있다.
참조형 매개변수
-변수의 값을 읽고 변경할 수 있다.
static void change(int x){}//기본형 매개변수
static void change(Date d){}//참조형 매개변수
클래스 메서드(static메서드)와 인스턴스 메서드
1.클래스를 설계할 때, 매개변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
2.클래스 변수(static 변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.
3.클래스 메서드(static 메서드)는 인스턴스 변수를 사용할 수 없다.
4.메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
오버로딩
1.메서드 이름이 같아야 한다.
2.매개변수의 개수 또는 타입이 달라야 한다.
가변인자
-가변인자는 "타입...변수명"과 같은 형식으로 선언한다.
-가변인자를 매개변수 중에서 제일 마지막에 선언해야한다. 그렇지 않으면 컴파일 에러가 발생한다.
public PrintStream Printf(String format,Object...args){...};
생성자
1.생성자의 이름은 클래스의 이름과 같아야한다.
2.생성자는 리턴 값이 없다.
생성자에서 다른 생성자 호출하기
-생성자의 이름으로 클래스이름 대신 this를 사용한다.
-한 생성자에서 다른 생성자를 호출할 때는 반드시 첫줄에서만 호출이 가능하다.
class Car{
String color;
String greaType;
int door;
Car(){
this("blue","auto",4);
}
Car(String color){
this(color,"auto",4);
}
Car(String color,String gearType,int door){
this.color=color;
this.gearType=gearType;
this.door=door;
}
}
멤버변수의 초기화 방법
1.명시적 초기화
-변수를 선언과 동시에 초기화하는 것을 명시적 초기화라고 한다.
2.생성자
3.초기화 블럭
static{...}//클래스 초기화 블럭
{}//인스턴스 초기화 블럭