인스턴스를 만드는 설계도
클래스명은 대문자로 시작하는 것이 관례
class 클래스명 {클래스 정의}
속성변수, iv가 갖게될 속성
접근지정자 타입 변수명;
cv와 iv로 구성
클래스변수?
인스턴스가 생성과 관계없이 사용가능클래스병.클래스변수명
static, 즉 고정되어 같은 클래스의 인스턴스끼리 공유(클래스영역)
A class로 생성된 인스턴스1의 static 변수1값을 바꾸면 인스턴스2의 static 변수1값도 바뀌게 된다.인스턴스변수?
인스턴스 생성시 함께 생성
힙메모리의 각 인스턴스 내에 존재하여 고유한 개별성을 가짐
스텍메모리의 지역변수와 다르게 힙메모리의 필드변수는 직접 초기화하지 않아도 강제로 초기화 된다.
이는 클래스가 인스턴스화될 때, 각 필드는 해당 자료형의 기본값으로 자동 초기화된다는 말이다
접근제어자 반환타입 메서드명 (매개변수) {실행문};
public static void int add(int x, int y) { // 메서드 시그니처
int result = x + y; // 메서드 바디
System.out.println(result);
}
메서드 명은 관례적으로 소문자로 표기
lv로 구성되며 static메서드의 경우 인스턴스 변수나 인스턴스 메서드를 사용할 수 없다
실행문에 return이 없을경우 반환타입 대신 void를 적는다
return값은 반드시 반환타입이 일치하거나 자동형변환이 가능해야 한다
포인트연산자 .를 사용하여 호출하며
클래스 내부 메서드끼리는 객체생성 없이 호출할 수 있다
printHello();
multiply(4, 4.0); 요런식으로
지역변수?
메서드 내실행문{}에서만 사용가능
스텍메모리에 저장되어 메서드 종료와 함께 소멸
객체를 생성
클래스 내부의 클래스
필드, 메서드, 이너클래스를 클래스맴버라 부른다
포인트 연산자.로 맴버에 접근한다
클래스명 변수명 = new 클래스명();
new = 해당 객체를 힙 메모리에 넣어라
클래스명() = 생성자
하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
매개변수의 개수 또는 타입이 다른 경우 가능
Scanner s = new Scanner(System.in);
클래스 Scanner가 사용을 위해 import하여 class 영역(Method 영역)에 로드
참조변수 s가 스택 영역에 로드
Scanner 객체 생성을 위해 매개변수 System.in 전달, 이 때 참조변수 s가 스택 영역에 로드, s는 생성된 객체를 가리킴.
new가 heap 영역을 정리
new가 객체 생성을 위해 heap 영역에서 메모리 공간을 할당.
생성자 호출하여 힙 영역에 객체 생성
생성자를 호출하여 초기화, 객체의 상태를 설정
해당 객체의 주소값이 변수 s에 연결
요약
클래스가 클래스로 로드
참조변수가 스택으로 로드
new가 heap정리
생성자가 힙에 객체생성
스택의 참조변수가 힙 내의 객체 주소값을 가짐
참조변수가 없어 불러올수 없어진 객체를 저장하는 메모리 정리하는 녀석
🦀🦀🦀
과부하나서 뇌에 런타임 오류나겠다~~~!!