Java 키워드 필수 시리즈에 다시 오신 것을 환영합니다! 이 게시물은 동일한 클래스의 여러 객체 간에 데이터를 공유할 수 있게 해주는 Java의 강력한 기능인 정적 변수에 관한 것입니다.
실습 예제와 통찰력을 통해 정적 변수의 목적, 동작, 주요 사용 사례를 살펴보겠습니다. 너무 많은 콘텐츠로 인해 부담을 느끼지 않도록 별도의 게시물에서 정적 방법에 대해 자세히 알아보겠습니다.
이 게시물은 이전 게시물에서 논의한 개념을 바탕으로 작성되었습니다. 여기서 다루는 주제를 더 깊이 이해하려면 최종 키워드 및 정적 블록을 검토하는 것이 좋습니다.
정적 변수란 무엇인가요?
정적 변수는 개별 인스턴스가 아닌 클래스에 속합니다. 이는 클래스의 모든 개체에서 공유되며 이러한 개체 전체에서 동일한 값을 유지합니다.
주요특징
- 클래스 수준 변수: 클래스의 모든 인스턴스에서 공유됩니다.
- 한 번 초기화: 클래스가 JVM에 의해 로드될 때.
- 메모리 위치: 메서드 영역에 저장됩니다.
- 액세스: 클래스 이름과 객체 참조를 모두 사용하여 액세스할 수 있습니다(클래스 이름이 선호됨).
코드 예: 정적 변수의 작동
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
시연된 주요 개념:
-
정적 변수:
- 모든 인스턴스에서 공유되며 인스턴스 간에 가치를 유지합니다.
- 예: idCounter는 생성된 직원 수를 추적합니다.
-
정적 최종 변수:
- 값이 한 번 할당되고 절대 변경되지 않는 상수입니다.
- 예: COMPANY_NAME 및 OFFICE_CODE.
-
정적 블록:
- 클래스가 로드될 때 한 번 실행됩니다.
- 환경 구성에 따라 OFFICE_CODE 등 복잡한 정적 변수를 초기화하는 데 사용됩니다.
-
인스턴스 변수 및 메소드:
- 각 인스턴스에는 EmployeeId 및 EmployeeName에 대한 고유한 값이 있습니다.
-
정적 변수에 대한 클래스 수준 액세스:
- 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); } }
정적 변수는 언제 사용하나요?
- 전역 카운터: ID 생성기 또는 카운터와 같은 일반적인 상태를 추적하는 데 유용합니다.
- 구성 설정: 애플리케이션 수준 구성과 같이 일정하게 유지되는 값을 저장합니다.
- 캐싱: 정적 변수를 사용하여 자주 사용하는 데이터를 캐시합니다(메모리를 적절하게 관리하도록 주의).
결론
이번 게시물에서는 인스턴스 전체에서 상태 공유를 가능하게 하는 기본 기능인 정적 변수를 살펴보았습니다. 정적 변수를 이해하면 특히 여러 개체에서 일관성을 유지해야 하는 데이터를 관리할 때 더 효율적인 코드를 작성하는 데 도움이 됩니다.
다음 게시물에서는 정적 메서드에 대해 자세히 알아보고 해당 동작, 제한 사항 및 모범 사례를 살펴보겠습니다.
관련 게시물
Java 기초
어레이 인터뷰 필수
Java 메모리 필수
컬렉션 프레임워크 필수
즐거운 코딩하세요!
위 내용은 정적 키워드: Java에서 정적 변수 디코딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

javaispopularforcross-platformdesktopapplicationsduetoits "writeonce, runanywhere"철학

Java에서 플랫폼 별 코드를 작성하는 이유에는 특정 운영 체제 기능에 대한 액세스, 특정 하드웨어와 상호 작용하고 성능 최적화가 포함됩니다. 1) JNA 또는 JNI를 사용하여 Windows 레지스트리에 액세스하십시오. 2) JNI를 통한 Linux 특이 적 하드웨어 드라이버와 상호 작용; 3) 금속을 사용하여 JNI를 통해 MacOS의 게임 성능을 최적화하십시오. 그럼에도 불구하고 플랫폼 별 코드를 작성하면 코드의 이식성에 영향을 미치고 복잡성을 높이며 잠재적으로 성능 오버 헤드 및 보안 위험을 초래할 수 있습니다.

Java는 Cloud-Native Applications, Multi-Platform 배포 및 교차 운용성을 통해 플랫폼 독립성을 더욱 향상시킬 것입니다. 1) Cloud Native Applications는 Graalvm 및 Quarkus를 사용하여 시작 속도를 높입니다. 2) Java는 임베디드 장치, 모바일 장치 및 양자 컴퓨터로 확장됩니다. 3) Graalvm을 통해 Java는 Python 및 JavaScript와 같은 언어와 완벽하게 통합되어 언어 교차 수용 가능성을 향상시킵니다.

Java의 강력한 유형 시스템은 유형 안전, 통합 유형 변환 및 다형성을 통해 플랫폼 독립성을 보장합니다. 1) 유형 안전성 런타임 오류를 피하기 위해 컴파일 시간에 유형 검사를 수행합니다. 2) 통합 유형 변환 규칙은 모든 플랫폼에서 일관성이 있습니다. 3) 다형성 및 인터페이스 메커니즘은 코드가 다른 플랫폼에서 일관되게 행동하게 만듭니다.

JNI는 Java의 플랫폼 독립성을 파괴 할 것입니다. 1) JNI는 특정 플랫폼에 대한 로컬 라이브러리를 요구합니다. 2) 대상 플랫폼에서 로컬 코드를 컴파일하고 연결해야합니다. 3) 운영 체제 또는 JVM의 다른 버전은 다른 로컬 라이브러리 버전을 필요로 할 수 있습니다.

신흥 기술은 위협을 일으키고 Java의 플랫폼 독립성을 향상시킵니다. 1) Docker와 같은 클라우드 컴퓨팅 및 컨테이너화 기술은 Java의 플랫폼 독립성을 향상 시키지만 다양한 클라우드 환경에 적응하도록 최적화되어야합니다. 2) WebAssembly는 Graalvm을 통해 Java 코드를 컴파일하여 플랫폼 독립성을 확장하지만 성능을 위해 다른 언어와 경쟁해야합니다.

다른 JVM 구현은 플랫폼 독립성을 제공 할 수 있지만 성능은 약간 다릅니다. 1. OracleHotspot 및 OpenJDKJVM 플랫폼 독립성에서 유사하게 수행되지만 OpenJDK에는 추가 구성이 필요할 수 있습니다. 2. IBMJ9JVM은 특정 운영 체제에서 최적화를 수행합니다. 3. Graalvm은 여러 언어를 지원하며 추가 구성이 필요합니다. 4. AzulzingJVM에는 특정 플랫폼 조정이 필요합니다.

플랫폼 독립성은 여러 운영 체제에서 동일한 코드 세트를 실행하여 개발 비용을 줄이고 개발 시간을 단축시킵니다. 구체적으로, 그것은 다음과 같이 나타납니다. 1. 개발 시간을 줄이면 하나의 코드 세트 만 필요합니다. 2. 유지 보수 비용을 줄이고 테스트 프로세스를 통합합니다. 3. 배포 프로세스를 단순화하기위한 빠른 반복 및 팀 협업.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

드림위버 CS6
시각적 웹 개발 도구
