정적 메소드(Static Method) == 클래수 메소드
정적 메소드의 특징
- 인스턴스가 필요하지 않는 메소드
- static 키워드를 이용하여 메소드를 선언한다.
- 클래스명을 사용하여 정적 메소드를 호출한다.
- 정적 메소드와 정적 메소드가 아닌 메소드를 섞어서 클래스를 선언할 수 있지만,
정적 메소드가 아닌 메소드가 있다면 그 클래스의 인스턴스를 만들 수 있는 방법은 반드시 있어야 한다.
- 정적 메소드에서는 정적 변수가 아닌 변수(인스턴스 변수)를 쓸 수 없다.
- 정적 메소드에서는 정적 메소드가 아닌 메소드도 쓸 수 없다.
- 정적 메소드 안에서는 this 키워드를 사용할 수 없다.
- 클래스가 메모리에 로딩 될 때 자동으로 선언된다.
정적 메소드 예시
import java.util.*;
public class test {
public static void main(String[] args){
staticTest.test();
}
}
class staticTest{
static void test(){
System.out.println("정적 메소드 테스트");
}
}
정적 변수(Static Variable) == 클래수 변수
정적 변수의 특징
- 정적 변수는 한 클래스의 모든 인스턴스에서 공유 한다.
- 같은 클래스에 속하는 모든 인스턴스에서 그 정적 변수의 하나뿐인 복사본을 공유한다.
- 정적 변수는 클래스가 메모리에 로딩될 때 초기화 된다.
- 일반적으로 클래스의 새로운 인스턴스가 처음 만들어지거나, 정적 메소드가 실행될 때 JVM에서 해당 클래스를 불러와 로딩한다.
- 정적 변수도 인스턴스 변수와 마찬가지로 선언만 하고 초기화하지 않으면 기본값으로 초기화된다.
- static final로 선언된 변수는 상수이다. // static final인 경우 초기화해주지 않으면 에러가 발생한다.
(fianl로 지정한 변수는 초기화 후 값 변경이 불가능하다.)
- 정적 변수는 정적 메소드와 달리 일반 메소드에서도 접근이 가능하다.
정적 변수 예시
import java.util.*;
public class test {
public static void main(String[] args){
System.out.println(staticTest.a);
}
}
class staticTest{
static final int a=30;
static void test(){
System.out.println("정적 메소드 테스트");
}
}
정적 변수 초기화
- 정적 변수 초기화 블록을 이용하면 정적 필드를 초기화 시킬 수 있다.
- 클래스가 메모리에 로딩 될 때 자동으로 선언된다.
- 여러 정적 변수 블록이 선언되어 있는 경우, 순서대로 실행 된다.
- 정적 블록도 정적 메소드와 같이 인스턴스 멤버(필드, 메소드), this 키워드를 사용할 수 없다.
public class start {
public static void main(String[] args) {
System.out.println("saticNumber : "+staticTest.number);
System.out.println("saticName : "+staticTest.name);
}
}
class staticTest{
public static int number;
public static String name;
static{
number = 3;
name = "둘리";
System.out.println("static 변수 1 실행");
}
static{
number = 5;
name = "홍길동";
System.out.println("static 변수 2 실행");
}
}
정적 변수, 메소드 사용 예시
- 클래스 내에서 공통으로 사용하는 변수가 있는 경우, static을 붙여서 정적 변수로 선언한다.
- 메소드 내에서 객체 고유의 데이터를 사용하지 않는 경우, static을 사용한다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] Getter / Setter (0) | 2021.02.04 |
---|---|
[JAVA] 접근제한자, 정보은닉과 캡슐화 . (0) | 2021.02.04 |
[JAVA] String, StringBuilder, StringBuffer (0) | 2021.01.20 |
[JAVA] 스레드(Thread) (0) | 2021.01.20 |
[JAVA] 예외 처리 (0) | 2021.01.20 |
댓글