static 변수 = 클래스변수 = 공유변수 = 전역변수
먼저 한번 메모리에 올려서 공유한다
class num(){ int a = 1; } class test{ public static void main(String[] args){ System.out.print(a); } }
위와같은경우 a 가 나오지않는다
a 에 1 이 대입되기 전에 메모리에 할당되었기 때문이다.
class AAA { int num = 0; static void addNum(int n) { //static 이라 먼저 메모리에 가지만, //아직 num 에는 0이 들어가지 않았다 num += n; //에러!!!1 } }
따라서 위 문장도 에러가 난다
그 외 특징
class SimpleCalculator { static final double PI = 3.1415; static double add(double n1, double n2) { return n1 + n2; } static double min(double n1, double n2) { return n1 - n2; } static double calCircleArea(double r) { return PI * r * r; } static double calCirclePeri(double r) { return PI * (r * 2); } }
위와같이
선언된 클래스의 모든 인스턴스가 공유하는 변수이기때문에
간단히 부를수있다.
class AccessWay { static int num = 0; AccessWay() { incrCnt(); } void incrCnt() { num++; // 클래스 내부에서 이름을 통한 접근 } }
//static 변수가 선언된 클래스 내에서는 이름만으로 호출이 가능하다!
class ClassVarAccess { public static void main(String[] args) { AccessWay way = new AccessWay(); way.num++; // 외부에서 인스턴스의 이름을 통한 접근 AccessWay.num++; // 외부에서 클래스의 이름을 통한 접근 System.out.println("num = " + AccessWay.num); } }
//단, 생성자로 초기화하게되면 인스턴스 생성시마다 초기화되므로 주의해야한다