[계산] class Baby7 { static int baby = 0; public Baby7() { baby++; System.out.println("Baby 생성:" + baby); } } public class Test25 { public static void main(String[] args) { Baby7 cnt1 = new Baby7(); Baby7 cnt2 = new Baby7(); Baby7 cnt3 = new Baby7(); } }
[결과값] Baby 생성:1 Baby 생성:2 Baby 생성:3
[계산] class Baby7 { static int baby = 0; public Baby7() { baby++; System.out.println("Baby 생성:" + baby); } } public class Test25 { public static void main(String[] args) { Baby7 cnt1 = new Baby7(); Baby7 cnt2 = new Baby7(); Baby7 cnt3 = new Baby7(); } }
[결과값] Baby 생성:1 Baby 생성:2 Baby 생성:3
static변수(클래스변수)는 클래스로 접근하는 것이 더 좋다.
AccessWay.num++;
[계산] class AccessWay{ static int num = 0; AccessWay(){ num++; // 클래스 내부에서 이름을 통한 접근 } } class ClassVarAccess{ public sstatic void main(String[] args){ AccessWay way = new AccessWay(); way.num++; // 외부에서 인스턴스의 이름을 통한 접근 AccessWay.num++; //외부에서 클래스의 이름을 통한 접근* System.out.println("num = " + AccessWay.num);
static으로 선언된 변수를 컨트롤 하기 위해서 static을 사용함.
★static 함수에 인스턴스 라면(변수,함수)이 올 수 없는 이유.
메모리에 올라가는 순서가 다르기 때문
인스턴스 변수 = new 했을 때 메모리에 올라감
static = 변수 선언 때 메모리에 올라감
단순 기능 제공이 목적인 메소드들, 인스턴스 변수와 관련
지을 이유가 없는 메소드들은 static으로 선언하는 것이 옳다.
public static void main(String[] args){...}
static인 이유! 인스턴스 생성과 관계없이 제일 먼저 호출되는 메소드이다.
public인 이유! main 메소드의 호출 명령은 외부로부터 시작되는 명령이다.
단순히 일종의 약속으로 이해해도 괜찮다.
[계산] class NumberPrinter { private int myNum = 0;// 객체를 생성할 때 메모리 생성 (new ~) // static int myNum2 = 0; // 스캔할 때 메모리 생성 static void showInt(int n) { // System.out.println(myNum); // myNum은 메모리에 생성이 안 되어 있는데 static에 들어있으니 에러남. System.out.println(n); } static void showDouble(double n) { System.out.println(n); } void setMyNumber(int n) { myNum = n; } void showMyNumber() { showInt(myNum); // 일반 함수도 static 함수를 불러올 수 있다. } } public class Test25 { public static void main(String[] args) { NumberPrinter.showInt(20); // static으로 함수를 만들면 바로 호출 가능하다. | 대표적인 static 함수 : System.out.println // static을 사용하면 함수든 변수든 클래스 명으로 접근할 수 있다. NumberPrinter np = new NumberPrinter(); np.showDouble(3.15); // static이든 아니든 객체생성해서 접근 가능하다. np.setMyNumber(75); np.showMyNumber(); } }
[결과값] 20 3.15 75