정적 변수

변수를 정적으로 선언하려면 static변수 선언에 keyword를 사용하십시오 정적 변수 구문은 다음과 같습니다.

예를 들어, 정수 유형의 공용 정적 변수는 이런 식으로 선언됩니다.

public static Integer staticVar;

정적 변수의 가장 중요한 점은 클래스 수준에 속한다는 것입니다. 이것이 의미하는 바는 런타임에 하나의 변수 복사본만 있을 수 있다는 것입니다. 클래스 정의에서 정적 변수를 정의하면 클래스의 각 인스턴스는 해당 단일 복사본에 액세스 할 수 있습니다. 클래스의 개별 인스턴스는 정적 변수가 아닌 것처럼 자체 로컬 복사본을 가지지 않습니다.

예를 들어 이해해 봅시다.


public class JavaStaticExample

{

    public static void main(String[] args)

    {

        DataObject objOne = new DataObject();

        objOne.staticVar = 10;

        objOne.nonStaticVar = 20;

         

        DataObject objTwo = new DataObject();

         

        System.out.println(objTwo.staticVar);       //10

        System.out.println(objTwo.nonStaticVar);    //null

         

        DataObject.staticVar = 30;  //Direct Access

         

        System.out.println(objOne.staticVar);       //30

        System.out.println(objTwo.staticVar);       //30

    }

}

 

class DataObject {

    public static Integer staticVar;

    public Integer nonStaticVar;

}

 

Output:

 

10

null

30

30 


값을 30으로 변경 한 방법에 주목하십시오. 그러면 두 객체 모두 30이라는 업데이트 된 값을 보게됩니다.

static변수 에 액세스하기 위해 인스턴스를 만들 필요가 없습니다 그것은 정적 변수가 클래스 범위에 속한다 는 것을 분명히 보여줍니다 .

정적 메서드

정적 메서드를 선언하려면 static메서드 선언에 keyword를 사용 합니다. 정적 메서드 구문은 다음과 같습니다.

예를 들어, 정수 유형의 공용 정적 변수는 이런 식으로 선언됩니다.

public static Integer getStaticVar(){

    return staticVar;

}


  1. 정적 메서드 내에서 정적 변수에만 액세스 할 수 있습니다 비 정적 변수에 액세스하려고하면 "비 정적 필드 nonStaticVar에 대한 정적 참조를 만들 수 없습니다 "라는 메시지와 함께 컴파일러 오류가 생성됩니다 .
  2. 정적 메서드는 클래스 참조를 통해 액세스 할 수 있으므로 클래스 인스턴스를 만들 필요가 없습니다. 인스턴스 참조를 사용하여 액세스 할 수 있지만 클래스 참조를 통한 액세스와 비교할 때 차이는 없습니다.
  3. 정적 메서드는 클래스 수준 범위에도 속합니다.

 public class JavaStaticExample

{

    public static void main(String[] args)

    {

        DataObject.staticVar = 30;  //Direct Access

         

        Integer value1 = DataObject.getStaticVar(); //access with class reference

 

        DataObject objOne = new DataObject();

        Integer value2 = objOne.getStaticVar();     //access with instance reference

         

        System.out.println(value1);

        System.out.println(value2);

    }

}

 

class DataObject

{

    public Integer nonStaticVar;

    public static Integer staticVar;    //static variable

     

    public static Integer getStaticVar(){

        return staticVar;

    }

}

 

Output:

 

30

30


정적 블록

정적 블록은 클래스 초기화 코드의 일부이며 static키워드로 둘러 쌉니다 일반 구문은 다음과 같습니다.

static {

    //initialize static members of class

} 

정적 블록은 클래스가 메모리에로드 될 때 실행됩니다. 클래스는 여러 정적 블록을 가질 수 있으며 클래스 정의에 나타나는 순서와 동일한 순서로 실행됩니다.

import static java.lang.System.out;

 

class DataObject

{

    public Integer nonStaticVar;

    public static Integer staticVar;    //static variable

     

    //It will be executed first

    static {

        staticVar = 40;

        //nonStaticVar = 20;    //Not possible to access non-static members

    }

     

    //It will be executed second

    static {

        out.println(staticVar);

    }

}

 

Output:

 

40 



'Java' 카테고리의 다른 글

이클립스(Eclipse)와 JDK 설치 및 다운로드 방법  (0) 2018.12.08
자바 - Continue문 사용하기  (0) 2018.07.23
자바 - 클래스 생성하는 방법  (0) 2018.07.23
자바 - 연산자  (0) 2018.07.23
자바 - 데이터 타입  (0) 2018.07.23
블로그 이미지

귀염둥이채원

,