Java Language
정적 키워드 사용
수색…
통사론
- 공공 정적 int myVariable; // 정적 변수 선언하기
- public static myMethod () {} // 정적 메소드 선언
- public static final double MY_CONSTANT; // 클래스의 모든 인스턴스간에 공유되는 상수 변수 선언
- public final double MY_CONSTANT; // 클래스의이 인스턴스에 고유 한 상수 변수 선언 (각 인스턴스마다 다른 상수를 생성하는 생성자에서 가장 잘 사용됨)
static을 사용하여 상수 선언하기
static
키워드는 인스턴스화 된 클래스가없는 필드 및 메소드에 액세스하는 데 사용되므로 다른 클래스에서 사용하기 위해 상수를 선언하는 데 사용할 수 있습니다. 이 변수는 클래스의 모든 인스턴스 생성 과정에서 일정하게 유지됩니다. 규칙에 따라 static
변수는 항상 ALL_CAPS
이며 낙타의 경우보다는 밑줄을 사용합니다. 전의:
static E STATIC_VARIABLE_NAME
상수를 변경할 수 없으므로 final
수정 자와 함께 static
사용할 수도 있습니다.
예를 들어, pi의 수학 상수를 정의하려면 다음과 같이하십시오.
public class MathUtilities {
static final double PI = 3.14159265358
}
어떤 클래스에서 상수로 사용할 수 있습니다 (예 :
public class MathCalculations {
//Calculates the circumference of a circle
public double calculateCircumference(double radius) {
return (2 * radius * MathUtilities.PI);
}
}
이것과 함께 정적 사용하기
Static은 클래스의 각 인스턴스에 할당 되지 않은 메소드 또는 변수 저장 영역을 제공합니다. 오히려 정적 변수는 모든 클래스 구성원간에 공유됩니다. 덧붙여 말하면, 클래스 인스턴스의 멤버처럼 정적 변수를 처리하려고하면 경고가 발생합니다.
public class Apple {
public static int test;
public int test2;
}
Apple a = new Apple();
a.test = 1; // Warning
Apple.test = 1; // OK
Apple.test2 = 1; // Illegal: test2 is not static
a.test2 = 1; // OK
정적으로 선언 된 메서드는 거의 동일한 방식으로 동작하지만 추가 제한이 있습니다.
this
키워드를 사용할 수 없습니다!
public class Pineapple {
private static int numberOfSpikes;
private int age;
public static getNumberOfSpikes() {
return this.numberOfSpikes; // This doesn't compile
}
public static getNumberOfSpikes() {
return numberOfSpikes; // This compiles
}
}
일반적으로 클래스의 다른 인스턴스 (예 : 복제 메서드)에 적용되는 제네릭 메서드를 static
으로 선언하고 equals()
와 같은 메서드는 비 정적으로 유지하는 것이 가장 좋습니다. Java 프로그램의 main
메소드는 항상 정적입니다. 즉, 키워드 this
가 main()
내부에서 사용될 수 없음을 의미합니다.
정적 컨텍스트의 비 정적 멤버에 대한 참조
정적 변수 및 메서드는 인스턴스의 일부가 아닙니다. 특정 클래스에 대해 몇 개의 객체를 만들지에 관계없이 항상 해당 변수의 복사본이 하나 있습니다.
예를 들어 불변의 상수 목록을 원할 수 있습니다. 정적으로 유지하고 정적 방법으로 한 번만 초기화하는 것이 좋습니다. 정기적으로 특정 클래스의 인스턴스를 여러 개 만들면 상당한 성능 향상을 얻을 수 있습니다.
또한 클래스에서 정적 블록을 사용할 수도 있습니다. 이 변수를 사용하여 정적 변수에 기본값을 할당 할 수 있습니다. 이 클래스는 클래스가 메모리에로드 될 때 한 번만 실행됩니다.
제안 된 이름으로서의 인스턴스 변수는 특정 객체의 인스턴스에 의존하며, 그것들의 변덕을 위해 살고있다. 개체의 특정 수명주기 동안 그들과 함께 놀 수 있습니다.
해당 클래스의 정적 메서드 내에서 사용되는 클래스의 모든 필드와 메서드는 정적 또는 로컬이어야합니다. 인스턴스 (비 정적) 변수 또는 메서드를 사용하려고하면 코드가 컴파일되지 않습니다.
public class Week {
static int daysOfTheWeek = 7; // static variable
int dayOfTheWeek; // instance variable
public static int getDaysLeftInWeek(){
return Week.daysOfTheWeek-dayOfTheWeek; // this will cause errors
}
public int getDaysLeftInWeek(){
return Week.daysOfTheWeek-dayOfTheWeek; // this is valid
}
public static int getDaysLeftInTheWeek(int today){
return Week.daysOfTheWeek-today; // this is valid
}
}