정적 변수
변수를 정적으로 선언하려면 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 |