안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
정적 메서드와 정적 블록을 선언할 때 주의할 점은 객체가 없어도 실행된다는 특징 때문에,
이들 내부의 인스턴스 필드나, 인스턴스 메서드를 사용할 수 없습니다.
객체 자신의 참조인 this 키워드를 사용할 수 없습니다.
그래서 아래 코드는 컴파일 오류가 발생합니다.
public class ClassName{
//인스턴스 필드와 메서드
int feild1;
void method1() { ... }
//정적 필드와 메서드
static int feild2;
void method2() { ... }
//정적 블록
static {
feild1 = 10; // (X) 컴파일 에러
method1(); // (X) 컴파일 에러
feild2 = 10; // (O)
method2(); // (O)
}
//정적 메서드
static void method3() {
this.feild1 = 10; // (X) 컴파일 에러
this.method1(); // (X) 컴파일 에러
feild2 = 10; // (O)
method2(); // (O)
}
}
정적 메서드와 정적 블록에서 인스턴스 멤버를 사용하고 싶다면
아래와 같이 객체를 먼저 생성하고 참조 변수로 접근함.
static void method3() {
ClassName obj = new ClassName();
obj.feild = 10;
obj.method1();
}
main()메서드도 동일한 규칙이 적용됩니다.
main()메서드도 정적 메서드이므로 객체 생성 없이 인스턴스 필드와 인스턴스 메서드를
main() 메서드에서 바로 사용할 수 없습니다.
예제)
public class Car {
int speed;
void run() {
System.out.println(speed + "으로 달립니다.");
}
public static void main(String[] args) {
Car myCar = new Car();
myCar.speed = 60;
myCar.run();
}
}
싱글톤(Singleton)
http://blog.naver.com/rain483/220508219047
싱글톤 예제)
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {}
static Singleton getInstance() {
return singleton;
}
}
public class SingletonExample {
public static void main(String[] args) {
/*
Singleton obj1 = new Singleton(); //컴파일 에러
Singleton obj2 = new Singleton(); //컴파일 에러
*/
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if(obj1 == obj2) {
System.out.println("같은 Singleton 객체 입니다.");
} else {
System.out.println("다른 Singleton 객체 입니다.");
}
}
}
'자바' 카테고리의 다른 글
JAVA 자바 패키지 선언, import 문 , 이클립스에서 패키지 생성과 클래스 생성 (0) | 2017.03.12 |
---|---|
JAVA 자바 final 필드와 상수 (0) | 2017.03.12 |
JAVA 자바 정적 멤버와 static - 정적 멤버 선언, 정적 멤버 사용, 정적 초기화 블록 (0) | 2017.03.12 |
JAVA 자바 인스턴스 멤버와 this (0) | 2017.03.12 |
JAVA 자바 메서드 - 자바 메서드 오버로딩 (0) | 2017.03.12 |