static == 정적 -> 유지상태
-> 남발하면 메모리의 낭비로 주의해서 사용
-> 주로 프로그램의 흐름을 파악 할 때 사용
1. static 메소드
주 사용처:
위와 같은 코드->Member 클래스의 static메서드 안에 객체생성고 초기화까지 해서 절차를 줄임
//접근 못하는 요소
메소드 안에 this, super 접근 못함
메인----
MyClass.staticMethod();//instance를 생성하지 않아도 바로 사용 가능
//->MyClass staticMethod() 호출
Member mem = new Member();
mem.init();
mem.random();
mem.input();
//위와 같은 코드->Member 클래스의 static메서드 안에 객체생성고 초기화까지 해서 절차를 줄임
Member m2 = Member.getInstance();
--------------------------------------------
Member 클래스 ----
public static Member getInstance() {//많이사용
Member m = new Member();
m.init();
m.random();
m.input();
return m;
}
2. static 변수
메인----------
int i; //local변수(지역변수)
{
int j;//local변수 (지역변수) == auto
j = 12;
}
MyClass cls = new MyClass();
//cls도 메인 안에 있는 지역변수로서 stack에 올라감
//MyClass는 heap영역에 올라감
int m = cls.getMemNum();
System.out.println("m="+m); //객체가 생성되는 순간 멤버변수memNum도 생성됨
cls.method();
cls.method();
cls.method();
MyClass cls2 = new MyClass();
cls2.method();
//답: memNum =1
// staricVar=4
// ->memNum과 같이 초기화 되야하지만 static변수는 저장공간이 1개여서
// 객체가 아무리 많이생성되어도 고정되어있음
---------------------------------------
MyClass 클래스-------------
public class MyClass {
private int memNum;//멤버변수
//
static int staticVar;//static변수
//고정변수, 메모리 영역이 1개,객체가 아무리 많이 생성되어도 동일한 영역에서 고정(정적 변수)
public int getMemNum() {
return memNum;
}
public void setMemNum(int memNum) {
this.memNum = memNum;
}
public void method() {//instance method = 일반 method
int i = 0; //로컬변수-블록문 끝나면 사라짐
i = i + 1;
memNum = memNum +1; //멤버변수
System.out.println("memNum ="+memNum);
staticVar = staticVar + 1; //static변수 - 사라지지 않음.
System.out.println("staricVar="+staticVar);
'JAVA > 객체 코드' 카테고리의 다른 글
final Class (0) | 2020.06.03 |
---|---|
class 기초순서 문제 (0) | 2020.06.03 |
상속(4) instanceOf (0) | 2020.06.03 |
상속(3) 형변환, 배열// (다형성) (0) | 2020.06.03 |
상속(2) (0) | 2020.06.03 |