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