static : 접근지정자 static final 자료형 - 함수 정의시 순서
객체생성없이 바로 멤버변수나 메소드에 접근 가능
static변수는 공유변수 역할
static메소드는 공유변수를 활용한 기능 표현.
-> static메소드 안에서는 non-static멤버는 사용못함
static 초기화 코드블록 또는 static 메소드 안에서는
this 또는 super 참조변수를 사용 못함!
왜냐하면 this 또는 super는 객체를 지정하는 용도이기 때문
package test;
class StaticTest {
// 클래스단위 멤버변수. 클래스변수. 정적변수. 클래스마다 한개씩 가짐 -> 공유
static int a;
static { // 클래스변수 초기화
a = 10;
}
// 클래스단위 메소드는 클래스영역에 로딩되고 즉시 사용가능해야함.
static void sPrn() {
// 클래스단위 메소드에서는 인스턴스 멤버(non-static)는 사용못함!
System.out.println("a=" + StaticTest.a);
//System.out.println("b=" + b); // 인스턴스변수는 사용못함!
// Prn(); // 불가능. 클래스단위 메소드안에서는 인스턴스 메소드 사용 불가능
// methodA(); // 불가능. 인스턴스 메소드이므로.
}
// 인스턴스단위 멤버변수. 인스턴스변수. 인스턴스마다 한개씩 가짐.
int b;
public StaticTest() { // 생성딘 객체의 인스턴스 변수 초기화
b = 20;
}
void prn() { // 인스턴스단위 메소드. 인스턴스 메소드.
// 인스턴스 메소드 안에서 클래스변수 사용이 가능함
// 이유 : 클래스가 인스턴스보다 먼저 메모리 할당이 되기 때문.
// System.out.println("a=" + a); // 클래스변수
System.out.println("a=" + StaticTest.a); // 클래스변수, 이렇게 쓰는 걸 권장
System.out.println("b=" + b); // 인스턴스변수
sPrn(); // 클래스단위 메소드 사용 가능
methodA(); // 가능
}
void methodA() {
System.out.println("methodA()");
}
} // StaticTest
public class Test1 {
public static void main(String[] args) {
// 연습1 : static 변수가 공유되는 것 확인예제. 주석 풀고 확인해보면 됨
// StaticTest st = new StaticTest(); // 객체 생성
// st.prn(); // 멤버 메소드 호출, a=10 b=20
//
// StaticTest st2 = new StaticTest();
// // st2.a = 100; // 이렇게 접근이 가능하지만 올바른 표현방법은 아니다
// StaticTest.a = 100; // 클래스변수 접근
// st2.b = 200; // 인스턴스변수 접근
// st2.prn(); // a=100 b=200
// st.prn(); // a=100 b=20
// 연습2
StaticTest.a = 100; // 객체 생성 없이 클래스변수 사용 가능
// StaticTest.b = 200; // 에러
StaticTest.sPrn(); // 객체 생성 없이 클래스단위 메소드 사용 가능
StaticTest st = new StaticTest();
st.b = 200;
// st.a = 100; // 스태틱 표현이 아님.
StaticTest.a = 100;
st.prn(); // a=100 b=200
st.sPrn(); // 스태틱 표현이 아님. 권장되지는 않지만 동작은 한다.
StaticTest.sPrn();
// Math m = new Math(); // 객체생성없이 바로사용, 자바 API를 확인해보면 static으로 되어있다
System.out.println("원의 면적: " + (5*5*Math.PI));
System.out.println("절대값: " + Math.abs(-5));
} // Test1
}
'IT > Java' 카테고리의 다른 글
자바 static, final (멤버변수, 메소드, 클래스) (0) | 2018.07.20 |
---|---|
자바 static, 클래스변수, 인스턴스변수 사용 예제 (0) | 2018.07.20 |
자바 다형성 예제 (ArrayList) (0) | 2018.07.20 |
자바 다형성, 도형 예제 (0) | 2018.07.18 |
자바 다형성, 정적바인딩, 동적바인딩, instanceof (0) | 2018.07.18 |