일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Override
- 메소드 재정의
- 즉시 실행 함수
- package
- final
- 클래스
- node
- 라우터
- 자바의 특징
- 화살표 함수
- 디코딩
- 자바
- import
- 패키지
- 익명함수
- 인코딩
- 생성자
- annotation
- Arrow function
- Anonymous Functions
- final 메소드
- Super
- 기본 생성자
- 객체지향 #객체지향 특징
- final 클래스
- 유니코드
- 문자집합
- router
- 노드
- 어노테이션
- Today
- Total
개인 공부 블로그
정적 멤버와 static 본문
정적멤버
- 클래스에 고정된 멤버로 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.
- 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 때문에 클래스 멤버라고도 한다.
정적 멤버 선언 - static
- 필드와 메소드 선언 시 static 키워드를 붙인다.
- 정적 멤버는 클래스 로더가 클래스(바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리됨.
따라서 클래스의 로딩이 끝나면 바로 사용할 수 있다.
- 객체마다 가지고 있어야 할 데이터라면 인스턴스 필드로 선언, 그렇지 않은 공용적인 데이터라면 정적 필드로 선언하는 것이 좋다. 메소드는 인스턴스 필드를 이용해서 실행해야 하면 인스턴스 메소드로 선언하고 인스턴스 필드를 이용하지 않는다면 정적 메소드로 선언한다.
정적 멤버 사용
클래스 이름과 도트(.) 연산자로 접근한다.
클래스.필드;
클래스.메소드(매개값,...);
정적 초기화 블록
정적 필드는 선언과 동시에 초기값을 주는 것이 보통.
그러나 계산이 필요한 초기화 작업이 있을 수 있음. 인스턴스 필드는 생성자에서 초기화하지만, 정적 필드는 객체 생성 없이도 사용해야 하므로 초기화 작업을 위해 정적 블록(static block)을 제공한다.
static {
...
}
- 클래스가 메모리로 로딩될 때 자동적으로 실행됨
- 클래스 내부에 여러개가 선언될 수 있으며 메로리로 로딩될 때 선언된 순서로 실행.
정적 메소드와 블록 선언 시 주의할 점
- 객체가 없어도 실행되는 특징 때문에 이들 내부에 인스턴스 필드, 메소드를 사용할 수 없음.
this(객체 자신 참조) 키워드도 사용 불가
- 정적 메소드와 정적 블록에서 인스턴스 멤버를 사용하고 싶다면 객체를 먼저 생성하고 참조 변수로 접근해야 한다.
main() 메소드도 정적메소드이기 때문에 객체를 생성하여 인스턴스 멤버를 사용해야 한다.
public class Car {
int speed;
void run(){
System.out.println(speed + "으로 달립니다.");
}
public static void main(String[] args){
Car myCar = new Car();
myCar.speed = 60;
myCar.run();
}
}
'JAVA' 카테고리의 다른 글
패키지 (0) | 2023.09.18 |
---|---|
final 필드와 상수 (1) | 2023.09.18 |
인스턴스 멤버와 this (0) | 2023.09.16 |
생성자 (0) | 2023.09.16 |
클래스 (0) | 2023.09.16 |