그만큼 정적 키워드 Java에서는 주로 메모리 관리에 사용됩니다. Java의 static 키워드는 특정 클래스의 동일한 변수나 메소드를 공유하는 데 사용됩니다. 사용자는 변수, 메소드, 블록 및 중첩 클래스를 사용하여 정적 키워드를 적용할 수 있습니다. static 키워드는 클래스의 인스턴스가 아닌 클래스에 속합니다. static 키워드는 클래스의 모든 인스턴스에 대해 동일한 상수 변수 또는 메서드에 사용됩니다.
그만큼 공전 키워드는 다음에 적용할 수 있는 Java의 비액세스 한정자입니다.
- 블록
- 변수
- 행동 양식
- 클래스
메모: 정적 멤버(블록, 변수, 메서드, 중첩 클래스)를 생성하려면 해당 선언 앞에 키워드를 붙입니다. 공전 .
정적 키워드의 특징:
다음은 Java의 static 키워드의 몇 가지 특징입니다.
- 공유 메모리 할당 : 정적 변수와 메소드에는 프로그램 실행 중에 한 번만 메모리 공간이 할당됩니다. 이 메모리 공간은 클래스의 모든 인스턴스에서 공유되므로 전역 상태 또는 공유 기능을 유지하는 데 정적 멤버가 유용합니다. 개체 인스턴스화 없이 액세스 가능: 클래스의 인스턴스를 만들 필요 없이 정적 멤버에 액세스할 수 있습니다. 이는 전체 프로그램에서 사용할 수 있는 유틸리티 함수와 상수를 제공하는 데 유용합니다. 개체가 아닌 클래스와 연결됨: 정적 멤버는 개별 개체가 아닌 클래스와 연결됩니다. 즉, 정적 멤버에 대한 변경 사항은 클래스의 모든 인스턴스에 반영되며 개체 참조가 아닌 클래스 이름을 사용하여 정적 멤버에 액세스할 수 있습니다. 비정적 멤버에 액세스할 수 없음: 정적 메서드 및 변수는 클래스의 특정 인스턴스와 연결되어 있지 않으므로 클래스의 비정적 멤버에 액세스할 수 없습니다. 오버로드될 수 있지만 재정의되지는 않음: 정적 메서드는 오버로드될 수 있습니다. 즉, 이름은 같지만 매개 변수가 다른 여러 메서드를 정의할 수 있습니다. 그러나 클래스의 특정 인스턴스가 아닌 클래스와 연결되어 있으므로 재정의할 수 없습니다.
멤버가 정적으로 선언되면 해당 클래스의 개체가 생성되기 전에 개체를 참조하지 않고 액세스할 수 있습니다. 예를 들어, 아래 Java 프로그램에서는 정적 메소드에 액세스하고 있습니다. m1() 어떤 객체도 생성하지 않고 시험 수업.
자바
// Java program to demonstrate that a static member> // can be accessed before instantiating a class> class> Test> {> >// static method> >static> void> m1()> >{> >System.out.println(>'from m1'>);> >}> >public> static> void> main(String[] args)> >{> >// calling m1 without creating> >// any object of class Test> >m1();> >}> }> |
>
문자열을 json으로 자바
>산출
from m1>
정적 블록
초기화하기 위해 계산을 수행해야 하는 경우 정적 변수 , 클래스가 처음 로드될 때 정확히 한 번 실행되는 정적 블록을 선언할 수 있습니다.
정적 블록의 사용을 보여주는 다음 Java 프로그램을 고려하십시오.
자바
// Java program to demonstrate use of static blocks> class> Test> {> >// static variable> >static> int> a =>10>;> >static> int> b;> > >// static block> >static> {> >System.out.println(>'Static block initialized.'>);> >b = a *>4>;> >}> >public> static> void> main(String[] args)> >{> >System.out.println(>'from main'>);> >System.out.println(>'Value of a : '>+a);> >System.out.println(>'Value of b : '>+b);> >}> }> |
>
문자열 배열 C 프로그래밍
>산출
Static block initialized. from main Value of a : 10 Value of b : 40>
정적 블록에 대한 자세한 내용은 정적 블록을 참조하세요.
정적 변수
변수가 정적으로 선언되면 변수의 단일 복사본이 생성되어 클래스 수준의 모든 개체에서 공유됩니다. 정적 변수는 본질적으로 전역 변수입니다. 클래스의 모든 인스턴스는 동일한 정적 변수를 공유합니다.
정적 변수에 대한 중요 사항:
- 클래스 수준에서만 정적 변수를 만들 수 있습니다. 여기를 보아라
- 정적 블록과 정적 변수는 프로그램에 있는 순서대로 실행됩니다.
다음은 정적 블록과 정적 변수가 프로그램에 있는 순서대로 실행되는 것을 보여주는 Java 프로그램입니다.
자바
// Java program to demonstrate execution> // of static blocks and variables> class> Test> {> >// static variable> >static> int> a = m1();> > >// static block> >static> {> >System.out.println(>'Inside static block'>);> >}> > >// static method> >static> int> m1() {> >System.out.println(>'from m1'>);> >return> 20>;> >}> > >// static method(main !!)> >public> static> void> main(String[] args)> >{> >System.out.println(>'Value of a : '>+a);> >System.out.println(>'from main'>);> >}> }> |
>
>산출
from m1 Inside static block Value of a : 20 from main>
정적 방법
메서드가 선언된 경우 공전 키워드는 정적 메서드라고 합니다. 정적 메서드의 가장 일반적인 예는 다음과 같습니다. 기본( ) 방법. 위에서 설명한 것처럼 모든 정적 멤버는 해당 클래스의 개체가 생성되기 전에 개체를 참조하지 않고도 액세스할 수 있습니다. static으로 선언된 메서드에는 몇 가지 제한 사항이 있습니다.
다음은 정적 메소드에 대한 제한사항을 보여주는 Java 프로그램입니다.
자바
다음 자바
// Java program to demonstrate restriction on static methods> class> Test> {> >// static variable> >static> int> a =>10>;> > >// instance variable> >int> b =>20>;> > >// static method> >static> void> m1()> >{> >a =>20>;> >System.out.println(>'from m1'>);> > >// Cannot make a static reference to the non-static field b> >b =>10>;>// compilation error> > >// Cannot make a static reference to the> >// non-static method m2() from the type Test> >m2();>// compilation error> > >// Cannot use super in a static context> >System.out.println(>super>.a);>// compiler error> >}> > >// instance method> >void> m2()> >{> >System.out.println(>'from m2'>);> >}> > > > >public> static> void> main(String[] args)> >{> >// main method> >}> }> |
>
>
산출:
prog.java:18: error: non-static variable b cannot be referenced from a static context b = 10; // compilation error ^ prog.java:22: error: non-static method m2() cannot be referenced from a static context m2(); // compilation error ^ prog.java:25: error: non-static variable super cannot be referenced from a static context System.out.println(super.a); // compiler error ^ prog.java:25: error: cannot find symbol System.out.println(super.a); // compiler error ^ symbol: variable a 4 errors>
정적 변수와 메서드는 언제 사용합니까?
모든 개체에 공통되는 속성에는 정적 변수를 사용합니다. 예를 들어 Student 클래스에서는 모든 학생이 동일한 대학 이름을 공유합니다. 정적 변수를 변경하려면 정적 메서드를 사용하세요.
다음 Java 프로그램을 고려하십시오. 공전 변수와 메소드가 있는 키워드.
자바
// A java program to demonstrate use of> // static keyword with methods and variables> // Student class> class> Student {> >String name;> >int> rollNo;> >// static variable> >static> String cllgName;> >// static counter to set unique roll no> >static> int> counter =>0>;> >public> Student(String name)> >{> >this>.name = name;> >this>.rollNo = setRollNo();> >}> >// getting unique rollNo> >// through static variable(counter)> >static> int> setRollNo()> >{> >counter++;> >return> counter;> >}> >// static method> >static> void> setCllg(String name) { cllgName = name; }> >// instance method> >void> getStudentInfo()> >{> >System.out.println(>'name : '> +>this>.name);> >System.out.println(>'rollNo : '> +>this>.rollNo);> >// accessing static variable> >System.out.println(>'cllgName : '> + cllgName);> >}> }> // Driver class> public> class> StaticDemo {> >public> static> void> main(String[] args)> >{> >// calling static method> >// without instantiating Student class> >Student.setCllg(>'XYZ'>);> >Student s1 =>new> Student(>'Alice'>);> >Student s2 =>new> Student(>'Bob'>);> >s1.getStudentInfo();> >s2.getStudentInfo();> >}> }> |
C# 목록
>
>산출
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>

정적 클래스
수업이 가능해요 공전 중첩 클래스인 경우에만 가능합니다. static 수정자를 사용하여 최상위 클래스를 선언할 수는 없지만 중첩 클래스를 정적으로 선언할 수는 있습니다. 이러한 유형의 클래스를 중첩된 정적 클래스라고 합니다. 중첩된 정적 클래스에는 외부 클래스의 참조가 필요하지 않습니다. 이 경우 정적 클래스는 Outer 클래스의 비정적 멤버에 액세스할 수 없습니다.
메모: 정적 중첩 클래스의 경우 Java의 정적 중첩 클래스
구현:
자바
// A java program to demonstrate use> // of static keyword with Classes> import> java.io.*;> public> class> GFG {> >private> static> String str =>'techcodeview.com'>;> >// Static class> >static> class> MyNestedClass {> > >// non-static method> >public> void> disp(){> >System.out.println(str);> >}> >}> > >public> static> void> main(String args[])> >{> >GFG.MyNestedClass obj> >=>new> GFG.MyNestedClass();> >obj.disp();> >}> }> |
>
>
b트리와 b트리산출
techcodeview.com>
다음은 static 키워드의 사용을 보여주는 Java 프로그램의 예입니다.
자바
public> class> ExampleClass {> >public> static> int> count =>0>;> >public> int> id;> >public> ExampleClass() {> >count++;> >id = count;> >}> >public> static> void> printCount() {> >System.out.println(>'Number of instances: '> + count);> >}> >public> void> printId() {> >System.out.println(>'Instance ID: '> + id);> >}> >public> static> void> main(String[] args) {> >ExampleClass e1 =>new> ExampleClass();> >ExampleClass e2 =>new> ExampleClass();> >ExampleClass e3 =>new> ExampleClass();> >e1.printId();> >e2.printId();> >e3.printId();> >ExampleClass.printCount();> >}> }> |
>
>산출
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
장점:
- 메모리 효율성: 정적 멤버에는 프로그램 실행 중에 한 번만 메모리가 할당되므로 대규모 프로그램의 경우 상당한 메모리 절약 효과를 얻을 수 있습니다. 향상된 성능: 정적 멤버는 개별 인스턴스가 아닌 클래스와 연결되므로 비정적 멤버보다 더 빠르고 효율적으로 액세스할 수 있습니다. 전역 접근성: 클래스 인스턴스 생성 여부에 관계없이 프로그램 어디에서나 정적 멤버에 액세스할 수 있습니다. 유틸리티 메소드 캡슐화: 정적 메소드는 객체의 상태 정보가 필요하지 않은 유틸리티 함수를 캡슐화하는 데 사용될 수 있습니다. 이를 통해 코드 구성이 향상되고 여러 클래스에서 유틸리티 기능을 더 쉽게 재사용할 수 있습니다. 상수: 정적 최종 변수를 사용하여 전체 프로그램에서 공유되는 상수를 정의할 수 있습니다. 클래스 수준 기능: 정적 메서드를 사용하면 팩토리 메서드나 도우미 함수와 같이 객체의 상태 정보가 필요하지 않은 클래스 수준 기능을 정의할 수 있습니다.
전반적으로 static 키워드는 Java 프로그램의 효율성과 구성을 향상시키는 데 도움이 되는 강력한 도구입니다.