* class
package : statictest
Name : StaticTest
package : statictest
Name : CustomerDTO
ex :
package statictest;
public class StaticTest {
public static void main(String[] args) {
//CustomerDTO 객체 3개 생성
CustomerDTO c1 = new CustomerDTO("홍길동", 20);
CustomerDTO c2 = new CustomerDTO("이순신", 28);
CustomerDTO c3 = new CustomerDTO("길무스", 20);
System.out.println(c1.getName());
System.out.println(c2.getName());
//어떤 객체한테 일을 시켰느냐에 따라 결과가 다르게 나온다. 그래서 getter/setter는 객체껄로 한다. 구현은 class에 했어도 객체꺼다. 객체를 생성해야지만 사용가능하다.
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+c1.getTotalInstanceCount());
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+c2.getTotalInstanceCount());
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+c3.getTotalInstanceCount());
CustomerDTO c4 = new CustomerDTO();
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+CustomerDTO.getTotalInstanceCount());//static변수를 사용해서 class의 메소드로 만들고 class명.메소드이름 으로 count에 접근하게 한다.
}
}
-------------------------
package statictest;
public class CustomerDTO {
private String name;
private int age;
private static int totalInstanceCount=0; //클래스에서 생성된 객체의 개수를 저장.
//생성자, setter,getter, toString()
public CustomerDTO(){
totalInstanceCount++;
}
public CustomerDTO(String name, int age) {
this.name = name;
this.age = age;
totalInstanceCount++;
}
public static int getTotalInstanceCount(){
return totalInstanceCount;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "CustomerDTO [name=" + name + ", age=" + age + "]";
}
}
----------------------------
* 메소드 안에 선언되면 local변수로 스택에 저장된다. args,c1,c2,c3,c4
* class 변수 static붙은 변수 totalInstanceCount
* instance변수는 private로 class에 선언된 변수는 힙에 저장된다. name,age
* compile 시점
1. class Loading ->이 시점에 static변수나 static 메소드는 메모리에 올라온다.
2. 실행 -> main()
메소드 영역 static영역 Coastant Pool
->메소드 코드 ->static 멤버 -변수 ->final 변수
-메소드
CustomerDTO(){} int totalInstanceCount;
CustomerDTO(String name,int age){} getTotalInstanceCount(){}
getName(){}
setName(){}
getAge(){}
setAge(){}
gettotalInstanceCount(){}
class영역(Area)->class별로 구분
* static 변수는 메인 메소드 실행전에 class 로딩시에 하나만 만들어 지고(class에 만들어짐) Instance변수는 객체 생성시마다 여러개가 생성된다.
* static영역은 코드만 있고 직접 접근이 안되서 실행시 클래스로 접근해야 하고, Instance영역은 객체를 통해서 접근해야 한다.
* static변수의 묵시적인 초기화 예제
package statictest;
public class StaticTest {
public static void main(String[] args) {
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+CustomerDTO.getTotalInstanceCount());
//CustomerDTO 객체 3개 생성
CustomerDTO c1 = new CustomerDTO("홍길동", 20);
CustomerDTO c2 = new CustomerDTO("이순신", 28);
CustomerDTO c3 = new CustomerDTO("길무스", 20);
System.out.println(c1.getName());
System.out.println(c2.getName());
//어떤 객체한테 일을 시켰느냐에 따라 결과가 다르게 나온다. 그래서 getter/setter는 객체껄로 한다. 구현은 class에 했어도 객체꺼다. 객체를 생성해야지만 사용가능하다.
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+c1.getTotalInstanceCount());
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+c2.getTotalInstanceCount());
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+c3.getTotalInstanceCount());
CustomerDTO c4 = new CustomerDTO();
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+CustomerDTO.getTotalInstanceCount());//static변수를 사용해서 class의 메소드로 만들고 class명.메소드이름 으로 count에 접근하게 한다.
System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 : "+CustomerDTO.getTotalInstanceCount());
}
}
실행화면 :
지금까지 CustomerDTO class에서 생성된 객체의 개수 : 0
홍길동
이순신
지금까지 CustomerDTO class에서 생성된 객체의 개수 : 3
지금까지 CustomerDTO class에서 생성된 객체의 개수 : 3
지금까지 CustomerDTO class에서 생성된 객체의 개수 : 3
지금까지 CustomerDTO class에서 생성된 객체의 개수 : 4
지금까지 CustomerDTO class에서 생성된 객체의 개수 : 4
'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글
싱글턴 패턴 (0) | 2012.07.28 |
---|---|
static 예 (0) | 2012.07.28 |
package, import (0) | 2012.07.28 |
productManagerArray만들기 [실습] (0) | 2012.07.28 |
배열 (0) | 2012.07.28 |