Java에서 static 키워드의 역할 및 사용법 상세 설명

6277 단어 Javastatic
static은'전역'또는'정적'이라는 뜻을 나타내며 구성원 변수와 구성원을 수식하는 방법으로도 정적 static 코드 블록을 형성할 수 있지만 자바 언어에는 전역 변수의 개념이 없다.
static에 의해 수식된 구성원 변수와 구성원 방법은 이 종류의 모든 대상에 독립적입니다.즉, 그것은 클래스의 특정한 실례에 의존하지 않고 클래스의 모든 실례에 의해 공유된다.
이 클래스가 불러오기만 하면 자바 가상 머신은 클래스 이름이 실행될 때 데이터 구역의 방법 구역에 따라 그들을 찾을 수 있습니다.따라서static 대상은 그 대상이 만들어지기 전에 접근할 수 있으며, 그 대상을 인용할 필요가 없습니다.
public로 수식된 static 구성원 변수와 구성원 방법의 본질은 전역 변수와 전역 방법이다. 클래스의 대상 시를 설명하면 static 변수의 사본을 생성하지 않고 클래스의 모든 실례가 같은 static 변수를 공유한다.
static 변수 앞에private 수식이 있을 수 있습니다. 이 변수는 클래스의 정적 코드 블록이나 클래스의 다른 정적 구성원 방법에서 사용할 수 있지만 (물론 비정적 구성원 방법에서 C 쓸데없는 말을 사용할 수도 있습니다.) 다른 클래스에서 클래스 이름을 통해 직접 사용할 수 없다는 점이 중요합니다.실제적으로private는 접근 권한이 한정되어 있으며,static는 실례화하지 않으면 사용할 수 있다는 것을 알아야 한다. 그러면 훨씬 이해하기 쉽다.static 앞에 다른 접근 권한 키워드를 추가하는 효과도 이와 같다.
static 수식의 구성원 변수와 구성원 방법은 습관적으로 정적 변수와 정적 방법이라고 하는데 클래스 이름을 통해 직접 접근할 수 있고 접근 문법은 다음과 같다.
유명정적 메서드 이름(매개변수 목록...)
유명정적 변수 이름
static로 수식된 코드 블록은 정적 코드 블록을 나타내고 자바 가상 머신(JVM)이 클래스를 불러올 때 이 코드 블록을 실행합니다.
1. static 변수
정적 여부에 따라 클래스 구성원 변수를 분류하면 두 가지로 나눌 수 있다. 하나는static에 의해 수식된 변수로 정적 변수나 클래스 변수라고 한다.다른 하나는static에 수식되지 않은 변수입니다. 실례 변수라고 합니다.
두 가지 차이점은 다음과 같습니다.
정적 변수가 메모리에 하나의 복사본만 있는 경우, JVM은 정적 변수에 한 번만 메모리를 할당하고, 클래스를 불러오는 과정에서 정적 변수의 메모리 할당을 완료하며, 클래스 이름으로 직접 접근할 수 있으며, 물론 대상을 통해 접근할 수도 있다(단, 이것은 추천하지 않는다).
실례 변수에 대해 실례를 만들지 않으면 실례 변수에 메모리를 한 번 분배하고 실례 변수는 메모리에 여러 개의 복사본을 가지고 서로 영향을 주지 않는다(유연성).
따라서 일반적으로 다음 두 가지 기능이 필요할 때 정적 변수를 사용합니다.
1).객체 간에 값을 공유할 때
2).변수에 쉽게 접근할 수 있는 경우
2. 정적 방법
정적 방법은 클래스 이름을 통해 직접 호출할 수 있고 어떤 실례도 호출할 수 있다.
따라서 정적 방법에서this와 슈퍼 키워드를 사용할 수 없고 소속 클래스의 실례 변수와 실례 방법(바로static의 구성원 변수와 구성원 방법이 없는 것)에 직접 접근할 수 없으며 소속 클래스의 정적 구성원 변수와 구성원 방법에만 접근할 수 있다.
인스턴스 멤버가 특정 객체와 연관되어 있기 때문입니다!이것은 이해해야 한다. 그 속의 이치를 이해하려면 기억이 아니다!!!
static 방법은 어떠한 실례에도 독립되어 있기 때문에static 방법은 반드시 실현되어야 하며 추상적인 abstract가 될 수 없다.
예를 들어 방법의 호출을 편리하게 하기 위해 Java API의 Math 클래스의 모든 방법은 정적이며 일반 클래스 내부의 static 방법도 다른 클래스가 이 방법에 대한 호출을 편리하게 한다.
정태 방법은 유형 내부의 특수한 방법으로 필요할 때만 대응하는 방법을 정태로 성명한다. 유형 내부의 방법은 일반적으로 모두 비정태적이다
3. static 코드 블록
static 코드 블록은 정적 코드 블록이라고도 부른다. 클래스에서 클래스 구성원과 독립된 static 문장 블록이다. 여러 개가 있고 위치는 마음대로 놓을 수 있다. 그 어떠한 방법에도 없다. JVM이 클래스를 불러올 때 이런 정적 코드 블록을 실행한다. 만약에 static 코드 블록이 여러 개가 있다면 JVM은 클래스에 나타난 선후 순서에 따라 순서대로 실행할 것이다. 각 코드 블록은 한 번만 실행된다.예:

public class Test5 {  
private static int a;  
private int b;  

static{  
Test5.a=3;  
System.out.println(a);  
Test5 t=new Test5();  
t.f();  
t.b=1000;  
System.out.println(t.b);  
}  
static{  
Test5.a=4;  
System.out.println(a);  
}  
public static void main(String[] args) {  
// TODO    
}  
static{  
Test5.a=5;  
System.out.println(a);  
}  
public void f(){  
System.out.println("hhahhahah");  
}  
}
실행 결과:

hhahhahah



정적 코드 블록을 이용하여 일부 static 변수에 값을 부여할 수 있다. 마지막으로 이 예들을 다시 한 번 보면 모두 static의main 방법이다. 이렇게 하면 JVM은main 방법을 실행할 때 실례를 만들지 않고 직접 호출할 수 있다.
4. static과final을 함께 사용하여 무엇을 나타냅니까
staticfinal은 구성원 변수와 구성원을 수식하는 방법으로'전역 상량'으로 간단하게 이해할 수 있습니다!
변수에 대해서는 값을 주면 수정할 수 없고 클래스 이름을 통해 접근할 수 있음을 나타낸다.
방법에 대해 덮어쓸 수 없고 클래스 이름을 통해 직접 접근할 수 있음을 나타낸다.
때때로 클래스 구성원을 정의해서 그 클래스의 모든 대상에 완전히 독립시키기를 원합니다.일반적인 경우, 클래스 구성원은 클래스의 대상을 통해 접근해야 하지만, 특정한 실례를 인용하지 않고 스스로 사용할 수 있는 구성원을 만들 수 있다.구성원의 성명 앞에 키워드static (정적) 를 넣으면 이런 구성원을 만들 수 있습니다.구성원이static로 성명되면, 클래스의 모든 대상이 만들어지기 전에 접근할 수 있으며, 인용할 필요가 없습니다.너는 방법과 변수를 모두static로 성명할 수 있다.static 구성원의 가장 흔히 볼 수 있는 예는main () 이다.프로그램이 실행되기 시작할 때main () 을 호출해야 하기 때문에static로 표시됩니다.
static로 성명된 변수는 실질적으로 전역 변수이다.하나의 대상을 설명할 때, static 변수의 복사가 발생하지 않고, 이 종류의 모든 실례 변수는 같은 static 변수를 공용합니다.static으로 선언하는 방법에는 다음과 같은 몇 가지 제한이 있습니다.
1).그것들은 다른static 방법만 호출할 수 있다.
2).그것들은 static 데이터에만 접근할 수 있습니다.
3).그것들은this나 슈퍼를 어떤 방식으로든 인용할 수 없습니다. (키워드 슈퍼는 계승과 관련이 있습니다. 다음 장에서 설명합니다.)
만약 계산을 통해 static 변수를 초기화할 필요가 있다면, static 블록을 설명할 수 있습니다. Static 블록은 이 클래스가 불러올 때만 실행됩니다.다음 예에서 보여준 클래스는 static 방법, static 변수, 그리고 static 초기화 블록이 있습니다.

// Demonstrate static variables,methods,and blocks.  

class UseStatic {  
static int a = 3;  
static int b;  

static void meth(int x) {  
System.out.println("x = " + x);  
System.out.println("a = " + a);  
System.out.println("b = " + b);  
}  

static {  
System.out.println("Static block initialized.");  
b = a * 4;  
}  

public static void main(String args[]) {  
meth(42);  
}  
}
UseStatic 클래스가 불러오면 모든 static 문장이 실행됩니다.우선, a는 3으로 설정되고, 이어서 static 블록이 실행되며, 마지막으로, b는 a*4 또는 12로 초기화됩니다.그리고main (),main () 을 호출하여meth () 를 호출하여 값 42를 x에 전달합니다.3개의 println () 문장은 두 개의 static 변수 a와 b, 그리고 국부 변수 x를 인용한다.
주의: static 방법에서 모든 실례 변수를 인용하는 것은 불법입니다.
다음은 프로그램의 출력입니다.

Static block initialized.
x = 42
a = 3
b = 12
그것들의 종류를 정의하는 바깥에서, static 방법과 변수는 모든 대상에 독립되어 사용될 수 있다.이렇게 하면, 너는 클래스의 이름 뒤에 점호 연산자를 붙이기만 하면 된다.예를 들어 클래스 밖에서 static 방법을 사용하려면 다음과 같은 일반적인 형식을 사용할 수 있습니다.

classname.method( )
여기,classname는 클래스의 이름입니다. 이 클래스에서static 방법을 정의합니다.이러한 형식은 대상 인용 변수를 통해 비static 방법을 호출하는 형식과 유사하다는 것을 알 수 있다.static 변수는 같은 형식으로 접근할 수 있습니다. 클래스 이름 가점호 연산자입니다.이것이 바로 Java가 어떻게 전역 기능과 전역 변수를 실현하는지를 제어하는 버전이다.
다음은 하나의 예다.main () 에서static 방법callme () 과static 변수 b는 클래스 밖으로 접근합니다.

class StaticDemo {  
static int a = 42;  
static int b = 99;  
static void callme() {  

System.out.println("a = " + a);  
}  
}  

class StaticByName {  

public static void main(String args[]) {  
StaticDemo.callme();  
System.out.println("b = " + StaticDemo.b);  
}  
}
다음은 프로그램의 출력입니다.

a = 42
b = 99
static 구성원은class에서 만든 실례에 접근할 수 없습니다.
만약 static 수식을 하지 않은 구성원이 대상 구성원이라면, 즉 모든 대상의 소유이다.
static 수식을 추가한 구성원은 클래스 구성원입니다. 한 클래스에서 직접 호출할 수 있으며 모든 대상을 공유할 수 있습니다.

좋은 웹페이지 즐겨찾기