수색…


통사론

  • 공공 정적 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 메소드는 항상 정적입니다. 즉, 키워드 thismain() 내부에서 사용될 수 없음을 의미합니다.

정적 컨텍스트의 비 정적 멤버에 대한 참조

정적 변수 및 메서드는 인스턴스의 일부가 아닙니다. 특정 클래스에 대해 몇 개의 객체를 만들지에 관계없이 항상 해당 변수의 복사본이 하나 있습니다.

예를 들어 불변의 상수 목록을 원할 수 있습니다. 정적으로 유지하고 정적 방법으로 한 번만 초기화하는 것이 좋습니다. 정기적으로 특정 클래스의 인스턴스를 여러 개 만들면 상당한 성능 향상을 얻을 수 있습니다.

또한 클래스에서 정적 블록을 사용할 수도 있습니다. 이 변수를 사용하여 정적 변수에 기본값을 할당 할 수 있습니다. 이 클래스는 클래스가 메모리에로드 될 때 한 번만 실행됩니다.

제안 된 이름으로서의 인스턴스 변수는 특정 객체의 인스턴스에 의존하며, 그것들의 변덕을 위해 살고있다. 개체의 특정 수명주기 동안 그들과 함께 놀 수 있습니다.

해당 클래스의 정적 메서드 내에서 사용되는 클래스의 모든 필드와 메서드는 정적 또는 로컬이어야합니다. 인스턴스 (비 정적) 변수 또는 메서드를 사용하려고하면 코드가 컴파일되지 않습니다.

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
    }
    
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow