-
자바 static 정의 및 예제!!Java(자바) 2014. 6. 17. 11:44반응형
정의)
static이 붙은 변술르 크래스 변수, 그렇지 않은 변수를 객체 변수라고 한다. 객체 변수는 클래스로부터 객체가 생성될 때마다 각 객체의 변수들이 생성되지만, 클래스 변수는 그 클래스로부터 생성된 모든 객체들이 하나의 클래스 변수를 공유 한다.
클래스 변수는 객체가 생성될 때 메모리 영역을 할당하는 것이 아니고 클래스가 로딩되는 과정에서 메모리에 한번만 할당 되는 멤버이다. 그러므로 클래스 변수는 하나의 클래스로부터 생성된 객체들 사이의 통신이나 객체들 사이의 공통되는 속성을 표현한는 데 사용될 수 있다.
1.클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통적으로 사용 해야하는 것에 static을 붙인다.
- 인스턴스를 생성하면, 각 인스턴스들은 서로 독립적이기 때문에 서로 다른 값을 유지한다.
경우에 따라서는 각 인스턴스들이 공통적으로 같은 값이 유지되어야 하는 경우 static을 붙인다.
2.static이 붙은 멤버변수는 인스턴스를 생성하지 않아도 사용할 수 있 다.
- static이 붙은 멤버변수(클래스변수)는 클래스가 메모리에 올라갈때 이미 자동적으로 생성되기 때문이다.
3.static이 붙은 메서드(함수)에서는 인스턴스 변수를 사용할 수 없다.
- static이 붙은 메서드는 인스턴스 생성 없이 호출가능한 반면, 인스턴스 변수는 인스턴스를
생성해야만 존재하기 때문에 static이 붙은 메서드를 호출할 때 인스턴스가 생성되어있을수도 그렇지 않을 수도 있어서 static이 붙은 메서드에서 인스턴스변수의 사용을 허용하지 않는다.
예제)
class Discount1 { // Discount은 main()이 없는 멤버 클래스이다.
static int month;
static int count; // static이 붙은 2개의 변수를 선언한다.
int price;
double dcRate;
int dcPrice; // static이 없는 3개의 변수를 선언한다
static void title() {
System.out.println("***" + month + "월 고객 감사 할인 행사***" + "\n");
}
void doCal() {
dcPrice = (int)(price - price * dcRate);
System.out.println("정가는" + price + "원 입니다.");
System.out.println("할인가는" + dcPrice + "원 입니다.");
count ++;
}
}
class PriceCal1 {
public static void main(String[] args) {
Discount1.month = 12; // Discount1 클래스의 인스턴스를 만들지도 않고 Discount1
클래스에 있는 변수와 메소드를 사용한다. Static 변수와
메소드 이기 때문이다.
Discount1.title();
Discount1 cal1 = new Discount1(); // Discount1 클래스의 인스턴스를 만들고 나서 Discount1 클래
스에 있는 변수와 메소드를 사용한다. static이 없는 변수와 메소드이기 때문이다.
cal1.price = 20000;
cal1.dcRace = 02;
cal.dcCall();
System.out.println("귀하는" + Discount1.count + "번째 손님입니다." + "\n");
Discount1 cal2 = new Discount1();
cal2.price = 40000;
}
}
실행결과
+++ 12월 고객 감사 할인 행사 ***
정가는 20000원 입니다.
할인가는 16000원 입니다.
귀하는 1번째 손님 입니다.
반응형'Java(자바)' 카테고리의 다른 글
자바 Statement 와 PreparedStatement의 차이점 (0) 2015.01.15 자바 StringTokenizer !! (0) 2014.09.26 자바 final 이해 (0) 2014.06.17 Enumeration vs leterator 정리 (0) 2014.03.27 해쉬 테이블(Hashtable) (0) 2014.03.17