# STATIC
l Static 변수란
1. 인스턴스 생성과 상관없이 초기화 되는 변수
2. public으로 선언되면 어디서든 접근 가능
3. staitc 변수는 모든 인스턴스(클래스로 인해서 생성된 객체)가 공유해서 사용하는 변수
4. 여러 클래스들이 이 변수를 공유해서 사용할 수 있다
- 새로운 변수를 클래스내에서 따로 선언하지 않아서 메모리 사용율이 좋아진다(메모리를 적게 사용하는 프로그램 생성)
- 코딩을 쉽게 할 수 있다
캡슐화 예제 | |
class InstCnt { static int instNum=0;
public InstCnt() { instNum++; System.out.println("인스턴스 생성: "+instNum); //생성자, 객체가 생성되는 순간 println이 수행된다 //생성자는 변수초기화를 위해서 이용하기도 하고 //객체가 생성되자마자 바로 수행되도록 하는데 이용하기도 한다 }
}
class ClassVar { public static void main(String[] args) { InstCnt cnt1=new InstCnt(); InstCnt cnt2=new InstCnt(); InstCnt cnt3=new InstCnt(); //생성자 코드안에 println이 있기 때문에 결과가 바로 출력 } }
| |
결과값 | 인스턴스 생성: 1 인스턴스 생성: 2 인스턴스 생성: 3
|
l Static 변수에 접근하는 방법 3가지
static 변수를 사용하는 경우와 사용하지 않는 경우 | |
class AccessWay { static int num=0;
AccessWay() { incrCnt(); } public void incrCnt(){num++;} //클래스 내에서 자리를 빌려줬으므로 클래스내에서 직접 접근 가능 }
class ClassVarAccess { public static void main(String[] args) { AccessWay way=new AccessWay(); way.num++; //way라는 참조변수를 통해 접근 AccessWay.num++; // 클래스 이름을 통해서 접근 System.out.println("num="+AccessWay.num);
} }
| |
class AAA { static int num1; // default 인스턴스 변수 static int num2; }
class BBB extends AAA { public static void main(String[] args) { num1 = 10; // default 변수는 동일 패키지 내에서 접근가능하다. num2 = 20;
int num3 = num1 + num2;
System.out.println(num3);
} }
| |
결과값 | num=3 인스턴스 생성: 2 인스턴스 생성: 3
|
l static 변수가 초기화되는 시점
- 자바는 메인 메소드를 실행할 때 필요한 클래스만 실행
- 자바가 아닌 다른 하나의 실행 파일로 만든 프로그램은 실행파일 전부가 메모리에 올라간다
- 그러나 자바는 필요한 클래스만 메모리에 올려 필요한 메모리 공간만을 이용한다
- static 변수가 초기화 되는 시점은 메인 메소드가 실행될 때 즉 static 변수가 있는 클래스가 JVM에 의해서 실행될 때 메모리 공간으로 올라온다
- 그러므로 static 변수를 생성자를 통해서 초기화 하는 실수를 저질러선 안된다
static 변수를 사용하는 경우와 사용하지 않는 경우 | |
class InstCnt { static int instNum=100; }
class StaticValNoInst2 { public static void main(String[] args) { InstCnt.instNum-=15; System.out.println(InstCnt.instNum); } } | |
결과값 | 85 |
class InstCnt { static int instNum;
public InstCnt() { instNum = 100; } }
class StaticValNoInst { public static void main(String[] args) {
InstCnt.instNum -= 15; System.out.println(InstCnt.instNum); } }
| |
결과값 | 15 |
'빅데이터과정 > JAVA' 카테고리의 다른 글
#55_140829_JAVA_THIS (0) | 2014.08.29 |
---|---|
#54_140828_JAVA_OVERLOADING (0) | 2014.08.28 |
#54_140828_접근제어 지시자 (0) | 2014.08.28 |
#54_140828_JAVA_클래스 패스 (0) | 2014.08.28 |
#52_140827_JAVA_상속 (0) | 2014.08.27 |