java 221102

John·2022년 11월 2일
0

java

목록 보기
7/20
post-thumbnail

static

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
   }
}

따라서 위 문장도 에러가 난다

그 외 특징

  • 생성자 기반으로 초기화 해서는 안된다
    -인스턴스 생성시마다 리셋되기때문
  • 상수 ; 값의 참조/공유가 목적인 변수에 주로 활용된다
    - 최부에서도 참조할 필요가 있다면 public 으로 한다

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);
   }
}

위와같이

  • 단순한 기능제공이 목적인 메소드,
  • 인스턴스변수와 관련지을 이유가 없는 메소드
    도 static 으로 선언한다

호출방법

선언된 클래스의 모든 인스턴스가 공유하는 변수이기때문에
간단히 부를수있다.

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);
   }
}
//단, 생성자로 초기화하게되면 
인스턴스 생성시마다 초기화되므로 주의해야한다
profile
hello there

0개의 댓글