자바 입문 튜 토리 얼-4.7 자바 static 키워드 및 자바 정적 변수 와 정적 방법

static 수식 자 는 변수,방법 과 함께 사용 할 수 있 으 며'정적'임 을 나타 낸다.
정적 변수 와 정적 방법 은 클래스 이름 을 통 해 접근 할 수 있 습 니 다.클래스 의 대상 을 만들어 서 이 클래스 의 정적 구성원 에 접근 할 필요 가 없 기 때문에 static 수식 의 구성원 을 클래스 변수 와 클래스 방법 이 라 고도 합 니 다.정적 변 수 는 인 스 턴 스 변수 와 달리 인 스 턴 스 변 수 는 항상 대상 을 통 해 접근 합 니 다.왜냐하면 그들의 값 은 대상 과 대상 사이 에 다 르 기 때 문 입 니 다.
아래 의 예 를 보십시오.

    
    
    
    
  1. public class Demo {
  2. static int i = 10;
  3. int j;
  4. Demo() {
  5. this.j = 20;
  6. }
  7. public static void main(String[] args) {
  8. System.out.println(" i=" + Demo.i);
  9. Demo obj = new Demo();
  10. System.out.println(" j=" + obj.j);
  11. }
  12. }

실행 결과:
클래스 변수 i=10
실례 변수 j=20
static 메모리 할당
정적 변 수 는 클래스 에 속 하고 독립 된 대상 에 속 하지 않 기 때문에 클래스 의 인 스 턴 스 를 만 들 지 않 아 도 정적 변 수 를 방문 할 수 있 습 니 다.이러한 결과 가 발생 하 는 이 유 는 컴 파일 러 가 전체 클래스 에 만 정적 변수의 사본 을 만 들 었 기 때 문 입 니 다.즉,하나의 메모리 공간 만 할당 하 는 것 입 니 다.여러 개의 인 스 턴 스 가 있 지만 이 인 스 턴 스 는 이 메모 리 를 공유 합 니 다.인 스 턴 스 변 수 는 다 릅 니 다.대상 을 만 들 때마다 메모리 공간 을 한 번 분배 합 니 다.서로 다른 변수의 메모리 가 서로 독립 되 고 서로 영향 을 주지 않 습 니 다.a 대상 의 인 스 턴 스 변 수 를 바 꾸 면 b 대상 에 영향 을 주지 않 습 니 다.
아래 코드 를 보십시오.

    
    
    
    
  1. public class Demo {
  2. static int i;
  3. int j;
  4. public static void main(String[] args) {
  5. Demo obj1 = new Demo();
  6. obj1.i = 10;
  7. obj1.j = 20;
  8. Demo obj2 = new Demo();
  9. System.out.println("obj1.i=" + obj1.i + ", obj1.j=" + obj1.j);
  10. System.out.println("obj2.i=" + obj2.i + ", obj2.j=" + obj2.j);
  11. }
  12. }

실행 결과:
obj1.i=10, obj1.j=20
obj2.i=10, obj2.j=0
메모:정적 변 수 는 대상 을 통 해 접근 할 수 있 지만 권장 되 지 않 고 컴 파일 러 도 경 고 를 할 수 있 습 니 다.
위의 코드 에서 i 는 정적 변수 로 obj 1 을 통 해 i 의 값 을 바 꾸 면 obj 2 에 영향 을 줄 수 있 습 니 다.j 는 실례 변수 로 obj 1 을 통 해 j 의 값 을 바 꾸 면 obj 2 에 영향 을 주지 않 습 니 다.이것 은 obj 1.i 와 obj 2.i 가 같은 메모리 공간 을 가리 키 고,obj 1.j 와 obj 2.j 는 서로 다른 메모리 공간 을 가리 키 기 때 문 입 니 다.다음 그림 을 보십시오.
그림 1 정적 변수 메모리 할당
메모:static 의 변 수 는 클래스 가 불 러 올 때 초기 화 됩 니 다.클래스 가 불 러 오 면 이 static 변 수 를 사 용 했 든 안 했 든 초기 화 된다 는 것 이다.
소결:클래스 변수(class variables)는 키워드 static 로 수식 합 니 다.클래스 를 불 러 올 때 클래스 변수의 메모 리 를 할당 하고 나중에 클래스 의 인 스 턴 스 대상 을 생 성 할 때 이 메모리(클래스 변수)를 공유 합 니 다.모든 대상 이 클래스 변수 에 대한 수정 은 다른 대상 에 게 영향 을 줄 수 있 습 니 다.외부 에는 두 가지 접근 방식 이 있 습 니 다.대상 을 통 해 접근 하거나 유사 한 이름 으로 접근 합 니 다.
정적 방법
정적 방법 은 대상 에 게 조작 을 실시 할 수 없 는 방법 이다.예 를 들 어 Math 류 의 pow()방법 은 정적 인 방법 입 니 다.문법 은 Math.pow(x,a)이 고 x 의 a 차 멱 을 계산 하 는 데 사 용 됩 니 다.사용 할 때 어떠한 Math 대상 도 만 들 필요 가 없습니다.
정적 방법 은 대상 을 조작 할 수 없 기 때문에 정적 방법 에서 인 스 턴 스 변 수 를 방문 할 수 없고 자신의 정적 변수 만 방문 할 수 있 습 니 다.
다음 상황 에 서 는 정적 방법 을 사용 할 수 있 습 니 다.
4.567917.한 가지 방법 은 대상 상태 에 접근 할 필요 가 없고 필요 한 매개 변 수 는 모두 명시 적 매개 변 수 를 통 해 제공 된다(예 를 들 어 Math.pow()
4.567917.한 가지 방법 은 클래스 의 정적 변수 에 만 접근 할 수 있 습 니 다
독자 들 은 main()도 정태 적 인 방법 으로 그 어떠한 대상 도 조작 하지 않 는 다 는 것 을 알 게 될 것 이다.실제로 프로그램 이 시 작 될 때 대상 이 없습니다.main()방법 은 프로그램의 입구 이 며 실행 되 고 프로그램 을 만 드 는 데 필요 한 대상 입 니 다.
정적 변수 와 정적 방법 에 대한 정리:
  • 하나의 정적 방법 은 정적 변수 에 만 접근 할 수 있 습 니 다

  • 4.567917.하나의 정적 방법 은 비 정적 방법 을 직접 호출 할 수 없다
    4.567917.예 를 들 어 방문 제어 권한 이 허용 되면 정적 변수 와 정적 방법 도 대상 을 통 해 방문 할 수 있 지만 추천 되 지 않 습 니 다
    4.567917.정적 방법 에 현재 대상 이 존재 하지 않 기 때문에 사용 할 수 없습니다. this,물론 사용 할 수 없습니다. super;
  • 정적 방법 은 비 정적 방법 으로 덮어 쓸 수 없습니다
  • 구조 방법 은 static 로 성명 하 는 것 을 허락 하지 않 는 다

  • 부분 변 수 는 static 수식 을 사용 할 수 없습니다
    정적 방법 예:
    
        
        
        
        
    1. public class Demo {
    2. static int sum(int x, int y){
    3. return x + y;
    4. }
    5. public static void main(String[] args) {
    6. int sum = Demo.sum(10, 10);
    7. System.out.println("10+10=" + sum);
    8. }
    9. }

    실행 결과:
    10+10=20
    static 방법 은 소속 클래스 의 인 스 턴 스 가 필요 하지 않 아 도 호출 됩 니 다.따라서 this 값 이 없 으 면 인 스 턴 스 변 수 를 방문 할 수 없습니다.그렇지 않 으 면 컴 파일 오류 가 발생 할 수 있 습 니 다.
    메모:인 스 턴 스 변 수 는 대상 을 통 해 만 접근 할 수 있 고 클래스 를 통 해 접근 할 수 없습니다.
    정적 초기 장치(정적 블록)
    블록 은 대괄호 로 둘러싸 인 코드 입 니 다.정적 초기 기(Static Initializer)는 클래스,방법 밖 에 존재 하 는 정적 블록 입 니 다.정적 초기 기 는 클래스 가 불 러 올 때(클래스 를 처음 사용 할 때)한 번 만 실행 되 며 정적 변 수 를 초기 화 하 는 데 사 용 됩 니 다.
    예제 코드:
    
        
        
        
        
    1. public class Demo {
    2. public static int i;
    3. static{
    4. i = 10;
    5. System.out.println("Now in static block.");
    6. }
    7. public void test() {
    8. System.out.println("test method: i=" + i);
    9. }
    10. public static void main(String[] args) {
    11. System.out.println("Demo.i=" + Demo.i);
    12. new Demo().test();
    13. }
    14. }

    실행 결 과 는:
    Now in static block.
    Demo.i=10
    test method: i=10
    정적 가 져 오기
    정적 가 져 오기 는 자바 5 의 새로운 기능 으로 클래스 의 정적 변수 와 정적 방법 을 가 져 옵 니 다.
    일반적으로 우 리 는 가 져 오기 클래스 를 이렇게 쓴다.
    
        
        
        
        
    1. import packageName.className; //

    혹시
    
        
        
        
        
    1. import packageName.*; //

    정적 가 져 오기 는 이렇게 쓸 수 있 습 니 다:
    
        
        
        
        
    1. import static packageName.className.methonName; //

    혹시
    
        
        
        
        
    1. import static packageName.className.*; //

    가 져 오 면 현재 클래스 에서 방법 명 으로 정적 방법 을 직접 호출 할 수 있 습 니 다.className.methodName 으로 접근 할 필요 가 없습니다.
    잦 은 정적 변수 와 정적 방법 을 사용 하면 정적 가 져 올 수 있 습 니 다.정적 가 져 오기 의 장점 은 출력 문 System.out.println()과 같은 조작 을 간소화 할 수 있다 는 것 이다.아웃 은 System 류 의 정적 변수 입 니 다.import static java.lang.System.*를 통 해 가능 합 니 다.가 져 오 면 다음 에 out.println()을 직접 호출 하면 됩 니 다.
    아래 코드 를 보십시오.
    
        
        
        
        
    1. import static java.lang.System.*;
    2. import static java.lang.Math.random;
    3. public class Demo {
    4. public static void main(String[] args) {
    5. out.println(" :" + random());
    6. }
    7. }

    실행 결과:
    생 성 된 난수:0.05800891549018705

    좋은 웹페이지 즐겨찾기