class AAA{
int v1; // 인스턴스 변수
static int v2; // static을 쓰면 변수가 기울어진다 (= 클래스 변수)
int v3;
void test1() {
System.out.println("안녕" + v2); // 여기에 v2를 사용하면 0으로 출력되는군!!! ★
}
static void test1(int a) {
// this. ---> this는 인스턴수 변수에서 쓰는 아이. 클래스 변수에서 못쓰겠지?
System.out.println("반가워" + a + v2); // v2를 바로 사용할 수 있음 ★★★
}
}
# Main영역
1. 매소드 오버로딩 --> 내가 사용할 일은 거의 없겠지...
// 생성자 오버로딩처럼
-> 메소드명을 똑같이 선언할 수 있다 (파라메터를 어떻게 선언해주냐에 따라서 다르게 출력되겠지)
new AAA().test1(); // 안녕0
new AAA().test1(98); // 반가워980 ----> 이렇게 호출하면 v2는 아직 0이니까!!!!!
// 98+0 이렇게 나오는구나.
System.out.println(AAA.v2); // 0
2. static : 클래스 수준에서 공유되는 인스턴스 변수를 선언하는 것, 메소드 영역에 메모리가 생성된다 ★★★
// ---> 클래스의 모든 인스턴스가 이 변수를 공유하므로 한 인스턴스에서 값을 변경하면
다른 모든 인스턴스에서도 해당 값을 공유함!!!!
// 인스턴스 변수와 메소드에 적용할 수 있다 (생성자는 X)
// 처음부터 1개 생성되고, 프로그램 종료시까지 소멸X
// 문법적으로 global하다...
// 인스턴스 생성과는 무관하다. new AAA를 생성하든 안하든 상관없이!!!
클래스 시작과 동시에 메서드 영역에 저장되어있다.
// ---> 어떤 변수로 호출하든 다 마지막으로 업데이트 된 '같은 값'이 나온다는거임)
AAA a1 = new AAA();
AAA a2 = new AAA();
a1.v1 = 10;
a2.v1 = 20;
System.out.println(a1.v1); // 10
System.out.println(a2.v1); // 20
//a1.v2 = 10; // --> static 변수를 잘못된 방식으로 호출한거임. (쓰지마세요)
//a2.v2 = 20;
//
//System.out.println(a1.v2); // 20
//System.out.println(a2.v2); // 20
2-1. static변수를 선언하는 방법
: 처음부터 정의되어있는 변수니까, 인스턴스 생성코드가 없어도 (class명.static변수)로 선언하면 됨!
// AAA a1 = new AAA(); 이런거 필요없다는 거임!
AAA.v2 = 50;
AAA.v2 = 80;
System.out.println(AAA.v2); // 80
2-2. static메서드를 호출하는 방법 : 똑같다
AAA.test1(50); // 반가워5080 (static으로 선언된 메소드를 호출할때~!~!)
new AAA().test1(98); // 반가워9880 (이렇게 하지는 않는다구)
//AAA.test1(); --> 이건 안되겠지!! (static으로 선언되지 않은 다른 메소드를 호출하려고 하는 상황임)
'JAVA > DAY 13 _ 23.09.04' 카테고리의 다른 글
싱글톤 패턴 (0) | 2023.09.04 |
---|---|
final (0) | 2023.09.04 |
static 2 (0) | 2023.09.04 |
Star UML (0) | 2023.09.04 |
Class Review (0) | 2023.09.04 |