>  기사  >  Java  >  정적 키워드: Java에서 정적 변수 디코딩

정적 키워드: Java에서 정적 변수 디코딩

Susan Sarandon
Susan Sarandon원래의
2024-10-21 20:12:02974검색

Static Keyword: Decoding Static Variables in Java

Java 키워드 필수 시리즈에 다시 오신 것을 환영합니다! 이 게시물은 동일한 클래스의 여러 객체 간에 데이터를 공유할 수 있게 해주는 Java의 강력한 기능인 정적 변수에 관한 것입니다.

실습 예제와 통찰력을 통해 정적 변수의 목적, 동작, 주요 사용 사례를 살펴보겠습니다. 너무 많은 콘텐츠로 인해 부담을 느끼지 않도록 별도의 게시물에서 정적 방법에 대해 자세히 알아보겠습니다.

이 게시물은 이전 게시물에서 논의한 개념을 바탕으로 작성되었습니다. 여기서 다루는 주제를 더 깊이 이해하려면 최종 키워드 및 정적 블록을 검토하는 것이 좋습니다.


정적 변수란 무엇인가요?

정적 변수는 개별 인스턴스가 아닌 클래스에 속합니다. 이는 클래스의 모든 개체에서 공유되며 이러한 개체 전체에서 동일한 값을 유지합니다.

주요특징

  1. 클래스 수준 변수: 클래스의 모든 인스턴스에서 공유됩니다.
  2. 한 번 초기화: 클래스가 JVM에 의해 로드될 때.
  3. 메모리 위치: 메서드 영역에 저장됩니다.
  4. 액세스: 클래스 이름객체 참조를 모두 사용하여 액세스할 수 있습니다(클래스 이름이 선호됨).

코드 예: 정적 변수의 작동

package keywords.static_keyword;

public class StaticVariables {

    // Static variable: Shared across all instances of the class
    // Automatically initialized to default value on class loading
    static int idCounter; // int default value -> 0

    // Static final variables
    // Must be initialized at declaration or in a static block
    static final String COMPANY_NAME = "TechCorp";
    static final String OFFICE_CODE;

    // Instance variables: Unique to each object
    int employeeId;
    String employeeName;

    // Static final variable Initialized in a static block
    static {
       // Default region: US
       String region = System.getProperty("user.region", "US");
        switch (region) {
            case "EU":
                regionalOfficeCode = "EU-01";
                break;
            case "APAC":
                regionalOfficeCode = "AP-11";
                break;
            default:
                regionalOfficeCode = "US-00";
        }
        System.out.println("Static Block Invoked: Office Code set to " +
        regionalOfficeCode);
    }

    // Constructor: Assigns a unique ID to each object
    public StaticVariables(String name) {
        this.employeeName = name;
        this.employeeId = ++idCounter; // Incrementing the shared counter
    }

    // Instance method
    // Displays instance details along with shared data(static variables)
    void displayEmployeeDetails() {
        System.out.println("Employee ID: " + employeeId + 
            ", Name: " + employeeName + 
            ", Company: " + COMPANY_NAME +
            ", Office Code: " + OFFICE_CODE);
    }

    public static void main(String[] args) {
        // Creating instances to observe static variable behavior
        StaticVariables emp1 = new StaticVariables("Alice");
        StaticVariables emp2 = new StaticVariables("Bob");

        emp1.displayEmployeeDetails();
        emp2.displayEmployeeDetails();

        // Accessing the static variable directly using the class name
        System.out.println("Total Employees: " + StaticVariables.idCounter);
    }
}

코드 설명

출력:

Static Block Invoked: Office Code set to US-00
Employee ID: 1, Name: Alice, Company: TechCorp, Office Code: US-00
Employee ID: 2, Name: Bob, Company: TechCorp, Office Code: US-00
Total Employees: 2

시연된 주요 개념:

  1. 정적 변수:

    • 모든 인스턴스에서 공유되며 인스턴스 간에 가치를 유지합니다.
    • 예: idCounter는 생성된 직원 수를 추적합니다.
  2. 정적 최종 변수:

    • 값이 한 번 할당되고 절대 변경되지 않는 상수입니다.
    • 예: COMPANY_NAME 및 OFFICE_CODE.
  3. 정적 블록:

    • 클래스가 로드될 때 한 번 실행됩니다.
    • 환경 구성에 따라 OFFICE_CODE 등 복잡한 정적 변수를 초기화하는 데 사용됩니다.
  4. 인스턴스 변수 및 메소드:

    • 각 인스턴스에는 EmployeeId 및 EmployeeName에 대한 고유한 값이 있습니다.
  5. 정적 변수에 대한 클래스 수준 액세스:

    • idCounter는 클래스 이름을 사용하여 액세스됩니다.
    package keywords.static_keyword;
    
    public class StaticVariables {
    
        // Static variable: Shared across all instances of the class
        // Automatically initialized to default value on class loading
        static int idCounter; // int default value -> 0
    
        // Static final variables
        // Must be initialized at declaration or in a static block
        static final String COMPANY_NAME = "TechCorp";
        static final String OFFICE_CODE;
    
        // Instance variables: Unique to each object
        int employeeId;
        String employeeName;
    
        // Static final variable Initialized in a static block
        static {
           // Default region: US
           String region = System.getProperty("user.region", "US");
            switch (region) {
                case "EU":
                    regionalOfficeCode = "EU-01";
                    break;
                case "APAC":
                    regionalOfficeCode = "AP-11";
                    break;
                default:
                    regionalOfficeCode = "US-00";
            }
            System.out.println("Static Block Invoked: Office Code set to " +
            regionalOfficeCode);
        }
    
        // Constructor: Assigns a unique ID to each object
        public StaticVariables(String name) {
            this.employeeName = name;
            this.employeeId = ++idCounter; // Incrementing the shared counter
        }
    
        // Instance method
        // Displays instance details along with shared data(static variables)
        void displayEmployeeDetails() {
            System.out.println("Employee ID: " + employeeId + 
                ", Name: " + employeeName + 
                ", Company: " + COMPANY_NAME +
                ", Office Code: " + OFFICE_CODE);
        }
    
        public static void main(String[] args) {
            // Creating instances to observe static variable behavior
            StaticVariables emp1 = new StaticVariables("Alice");
            StaticVariables emp2 = new StaticVariables("Bob");
    
            emp1.displayEmployeeDetails();
            emp2.displayEmployeeDetails();
    
            // Accessing the static variable directly using the class name
            System.out.println("Total Employees: " + StaticVariables.idCounter);
        }
    }
    

정적 변수는 언제 사용하나요?

  1. 전역 카운터: ID 생성기 또는 카운터와 같은 일반적인 상태를 추적하는 데 유용합니다.
  2. 구성 설정: 애플리케이션 수준 구성과 같이 일정하게 유지되는 값을 저장합니다.
  3. 캐싱: 정적 변수를 사용하여 자주 사용하는 데이터를 캐시합니다(메모리를 적절하게 관리하도록 주의).

결론

이번 게시물에서는 인스턴스 전체에서 상태 공유를 가능하게 하는 기본 기능인 정적 변수를 살펴보았습니다. 정적 변수를 이해하면 특히 여러 개체에서 일관성을 유지해야 하는 데이터를 관리할 때 더 효율적인 코드를 작성하는 데 도움이 됩니다.

다음 게시물에서는 정적 메서드에 대해 자세히 알아보고 해당 동작, 제한 사항 및 모범 사례를 살펴보겠습니다.


관련 게시물

  • Java 기초

  • 어레이 인터뷰 필수

  • Java 메모리 필수

  • 컬렉션 프레임워크 필수

즐거운 코딩하세요!

위 내용은 정적 키워드: Java에서 정적 변수 디코딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.