클래스 앞에는 static으로 선언할 수 없다. 그러나 inner class에는 사용가능하다.
전역변수 앞에 static으로 선언하게 되면, 별도의 공간이 생성된다.
Test t = new Test();
Test t2 = new Test();
Test t3 = new Test();
로 여러개의 객체를 선언해도 모든 객체들이 한 공간을 가리키므로 static으로 선언한 t2.aaa 의 값을 수정하면,
t3.aaa에도 해당 값이 반영된다.
메소드를 static으로 선언하면 일반 method는 호출이 안된다.
static 메소드 안에서 this 키워드 사용 안됨.
class Test { int a = 3; static int b = 5; public static void cc () { // a 호출 안됨. // this.a 호출 안됨. // b 호출 가능!! // this.b 호출 안됨.
static은 static 끼리만 노는가.. 왜?
static으로 생성되지 않은 객체나 그 내부에서 안의 내용이 실행되기 위해서는 해당 내용을 포함한 객체가 생성이 된 상태여야 한다.
따라서 위의 소스의 예로볼때 Test 안의 것들이 new 키워드로 생성이 되고난 후에야.. 접근이 가능한 것이다.
그러나 static 은 이미 생성되어진 상태이기 때문에 다른 static이 아닌 객체들이 생성되어 있는지 아닌지 보장되어 있지 않다. 이러한 이유로 static은 static끼리만 접근 가능하게 되는 것이다.
또한 메인 밖에 메소드를 생성해서 main() 안에서 실행하려면 객체 생성해서 호출하는 방법과 메소드 앞에 static을 붙혀 호출하는 방법이 있다.
아항! 그렇구나!! 라는 생각이 들것이다..^--------^
Inner Class는 클래스 내부에 클래스!!
A$B.class
Static 블럭
static {
기능구현;
}
요건 Main 메소드보다 먼저 실행된다.static으로 생성되지 않은 객체나 그 내부에서 안의 내용이 실행되기 위해서는 해당 내용을 포함한 객체가 생성이 된 상태여야 한다.
따라서 위의 소스의 예로볼때 Test 안의 것들이 new 키워드로 생성이 되고난 후에야.. 접근이 가능한 것이다.
그러나 static 은 이미 생성되어진 상태이기 때문에 다른 static이 아닌 객체들이 생성되어 있는지 아닌지 보장되어 있지 않다. 이러한 이유로 static은 static끼리만 접근 가능하게 되는 것이다.
또한 메인 밖에 메소드를 생성해서 main() 안에서 실행하려면 객체 생성해서 호출하는 방법과 메소드 앞에 static을 붙혀 호출하는 방법이 있다.
아항! 그렇구나!! 라는 생각이 들것이다..^--------^
Inner Class는 클래스 내부에 클래스!!
A$B.class
Static 블럭
static {
기능구현;
}
실제 실행 전에 점검 등의 목적으로 사용됨.
클래스 아래에 있어야 한다. (메소드 내부 안됨!!)