static (정적)
- static이 붙은 변수, 메소드, 구역 등은 프로그램 실행시 가장 먼저 메모리에 올라간다.
- static 이 붙은 전역변수, 메소드는 모든 객체가 공유한다.
- static 이 붙은 변수는 가장 먼저 메모리에 static 영역으로 이동한다.
- 객체 안의 static 변수일 경우, 객체가 선언될때 객체 안에서 제외된채 생성되고, 메모리의 static 영역에 저장되며, 그것을 공유한다.
- static 이 붙은 메소드는 내부에서 각 객체의 필드에 올라오는 일반 전역변수와 일반 메소드는 사용할 수 없다.(아직 메모리에 올라오지 않았기 때문에 - static 은 가장 먼저 올라오기 때문에)
public static void main(String[] args){}'
메인은 가장 먼저 메모리에 올라가고, 실행한다.
static이 붙은 전역변수, static이 붙은 메소드, 자기 자신 안에 선언된 지역변수만 사용할 수 있다.
실제로 프로그램 내에서 각 객체가 공유해야 하는 값, 메소드에는 static을 붙여서 사용한다.
공유하지 않아야 하는 값들에는 무조건 static을 붙이면 안된다.
객체 생성을 하지 않고, 클래스 이름으로 바로 static 변수에 접근 가능
class Test {
int data1; //전역변수 (객체의 필드에 생성)
static String data2;
}
public class Main {
public static void main(String[] args) {
Test obj1 = new Test();
obj1.data1 = 10;
obj1.data2 = "\"static 은 모든 객체가 공유합니다.\"";
Test obj2 = new Test();
obj2.data1 = 20;
System.out.println("obj1.data1 = "+ obj1.data1 + "\nobj2.data2 = " + obj2.data1);
//static에 접근하기 위해 클래스명을 직접 사용할 수 있음(객체사용 불필요)
System.out.println("static data2 = " + Test.data2);
}
}
'Java > Java(base)' 카테고리의 다른 글
[Java]접근 권한 제어자 public, private, protected, default / getter, setter (0) | 2021.11.30 |
---|---|
[Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof (0) | 2021.11.30 |
[Java] 다형성 Polymorphism : Overloading(오버로딩), Overriding(오버라이딩) (0) | 2021.11.29 |
[Java] 상속(inheritance), 자식클래스 생성자, super() (0) | 2021.11.29 |
[Java] 클래스의 개념, 선언, 사용, 생성자, this (0) | 2021.11.29 |