자바 키워드 final,static 사용 총화
프로그램 컨 텍스트 환경 에 따라 자바 키워드 final 은'이것 은 바 꿀 수 없 는 것'이나'최종 적 인'의 미 를 가지 고 비 추상 적 인 유형,비 추상 적 인 구성원 방법 과 변 수 를 수식 할 수 있 습 니 다.디자인 이나 효율 이라는 두 가지 이해 때문에 변 화 를 막 아야 할 수도 있다.
final 클래스 는 계승 할 수 없습니다.하위 클래스 가 없 으 면 final 클래스 의 방법 은 기본적으로 final 입 니 다.
final 방법 은 하위 클래스 의 방법 으로 덮어 쓸 수 없 지만 계승 할 수 있 습 니 다.
final 구성원 변 수 는 상수 입 니 다.한 번 만 할당 할 수 있 고 할당 후 값 은 변 하지 않 습 니 다.
final 은 구조 방법 을 수식 하 는 데 사용 할 수 없다.
메모:부모 클래스 의 private 구성원 방법 은 하위 클래스 에 덮어 쓸 수 없 기 때문에 private 형식의 방법 은 기본적으로 final 형식 입 니 다.
1.final 클래스
final 클래스 는 계승 할 수 없 기 때문에 final 클래스 의 구성원 방법 은 덮어 쓸 기회 가 없고 기본 값 은 final 입 니 다.디자인 클래스 에서 만약 에 이런 클래스 가 하위 클래스 가 필요 하지 않 으 면 클래스 의 실현 디 테 일 은 변 하지 않 고 이 클래스 가 확장 되 지 않 을 것 이 라 고 확신 하면 final 클래스 로 디자인 합 니 다.
2.final 방법
하위 클래스 가 어떤 방법 을 덮어 쓰 는 것 을 허용 하지 않 는 다 면 이 방법 을 final 방법 으로 설명 할 수 있 습 니 다.
final 방법 을 사용 하 는 이 유 는 두 가지 가 있 습 니 다.
첫째,방법 을 잠 그 고 모든 계승 류 가 그 의 미 를 수정 하고 실현 하 는 것 을 방지한다.
둘째,효율 적 이다.컴 파 일 러 는 final 방법 을 호출 할 때 내장 메커니즘 으로 전환 되 어 실행 효율 을 크게 높 인 다.
예 를 들 면:
public class Test1 {
public static void main(String[] args) {
// TODO
}
public void f1() {
System.out.println("f1");
}
//
public final void f2() {
System.out.println("f2");
}
public void f3() {
System.out.println("f3");
}
private void f4() {
System.out.println("f4");
}
}
public class Test2 extends Test1 {
public void f1(){
System.out.println("Test1 f1 !");
}
public static void main(String[] args) {
Test2 t=new Test2();
t.f1();
t.f2(); // final
t.f3(); //
//t.f4(); // ,
}
}
3.final 변수(상수)final 로 장 식 된 구성원 변수 로 상수 를 표시 합 니 다.값 이 정 해 지면 바 꿀 수 없습니다!
final 수식 변 수 는 세 가지 가 있 습 니 다.정적 변수,인 스 턴 스 변수 와 부분 변 수 는 각각 세 가지 유형의 상수 입 니 다.
다음 의 예 에서 알 수 있 듯 이 final 변수 에 초기 값 을 주면 값 은 더 이상 바 꿀 수 없다.
또한 final 변 수 를 정의 할 때 초기 값 을 주지 않 고 먼저 설명 할 수 있 습 니 다.이 변 수 는 final 공백 이 라 고도 부 릅 니 다.어떤 경우 에 도 컴 파일 러 는 공백 final 이 사용 하기 전에 초기 화 되 어야 합 니 다.그러나 final 공백 은 final 키워드 final 의 사용 에 있어 더욱 큰 유연성 을 제공 하기 때문에 한 가지 유형의 final 데이터 구성원 은 대상 에 따라 다 르 지만 변 함 없 는 특징 을 유지 할 수 있다.
package org.leizhimin;
public class Test3 {
private final String S = "final S";
private final int A = 100;
public final int B = 90;
public static final int C = 80;
private static final int D = 70;
public final int E; //final ,
public Test3(int x) {
E = x;
}
/**
* @param args
*/
public static void main(String[] args) {
Test3 t = new Test3(2);
//t.A=101; // ,final
//t.B=91; // ,final
//t.C=81; // ,final
//t.D=71; // ,final
System.out.println(t.A);
System.out.println(t.B);
System.out.println(t.C); //
System.out.println(t.D); //
System.out.println(Test3.C);
System.out.println(Test3.D);
//System.out.println(Test3.E); // , E final , .
System.out.println(t.E);
Test3 t1 = new Test3(3);
System.out.println(t1.E); //final E
}
private void test() {
System.out.println(new Test3(1).A);
System.out.println(Test3.C);
System.out.println(Test3.D);
}
public void test2() {
final int a; //final ,
final int b = 4; // --final
final int c; //final , .
a = 3;
//a=4; , .
//b=2; , .
}
}
4.final 매개 변수함수 매개 변수 가 final 형식 일 때 이 매개 변 수 를 읽 을 수 있 지만 이 매개 변수의 값 을 바 꿀 수 없습니다.
public class Test4 {
public static void main(String[] args) {
new Test4().f1(2);
}
public void f1(final int i) {
//i++; //i final , .
System.out.print(i);
}
}
정적static 는'전역'또는'정적'이라는 뜻 으로 구성원 변수 와 구성원 방법 을 수식 하 는 데 도 정적 static 코드 블록 을 형성 할 수 있 지만 자바 언어 에는 전역 변수의 개념 이 없다.
static 에 의 해 수 식 된 구성원 변수 와 구성원 방법 은 이러한 종류의 모든 대상 에 독립 됩 니 다.즉,특정한 인 스 턴 스 에 의존 하지 않 고 모든 인 스 턴 스 에 의 해 공유 된다 는 것 이다.이 클래스 가 불 러 오기 만 하면 자바 가상 머 신 은 클래스 이름 이 실 행 될 때 데이터 구역 의 방법 구역 에 따라 그들 을 찾 을 수 있 습 니 다.따라서 static 대상 은 대상 이 생 성 되 기 전에 접근 할 수 있 으 며,대상 을 참조 하지 않 아 도 됩 니 다.
Public 로 수 식 된 static 구성원 변수 와 구성원 방법 은 본질 적 으로 전역 변수 와 전역 방법 입 니 다.이러한 대상 시 를 설명 할 때 static 변수의 사본 을 생 성하 지 않 고 클래스 의 모든 인 스 턴 스 가 같은 static 변 수 를 공유 합 니 다.
static 변수 앞 에 private 수식 이 있 을 수 있 습 니 다.이 변 수 는 클래스 의 정적 코드 블록 이나 클래스 의 다른 정적 구성원 방법 에서 사용 할 수 있 음 을 나타 냅 니 다(물론 비 정적 구성원 방법 에서 도 사용 할 수 있 습 니 다-쓸데없는 말).그러나 다른 클래스 에서 클래스 이름 을 통 해 직접 사용 할 수 없다 는 점 이 중요 합 니 다.실제로 private 는 방문 권한 이 한정 되 어 있 음 을 알 아야 합 니 다.static 는 예화 하지 않 으 면 사용 할 수 있다 고 말 합 니 다.그러면 훨씬 쉽게 이해 할 수 있 습 니 다.static 앞 에 다른 접근 권한 키 워드 를 추가 하 는 효과 도 이와 같다.
static 수식 의 구성원 변수 와 구성원 방법 은 습관 적 으로 정적 변수 와 정적 방법 이 라 고 부 릅 니 다.클래스 이름 을 통 해 직접 방문 할 수 있 습 니 다.방문 문법 은 다음 과 같 습 니 다.
클래스 이름.정적 방법 이름(매개 변수 목록...)
클래스 이름
static 로 장 식 된 코드 블록 으로 정적 코드 블록 을 표시 합 니 다.자바 가상 머 신(JVM)이 클래스 를 불 러 올 때 이 코드 블록 을 실행 합 니 다.
1.static 변수
클래스 구성원 변 수 를 정적 으로 분류 하 는 지 여부 에 따라 두 가지 로 나 눌 수 있 습 니 다.하 나 는 static 에 의 해 수 정 된 변수 로 정적 변수 나 클래스 변수 라 고 합 니 다.다른 하 나 는 static 에 의 해 수식 되 지 않 은 변수 로 인 스 턴 스 변수 라 고 합 니 다.둘 의 차 이 는:
정적 변 수 는 메모리 에 하나의 복사(메모리 절약)만 있 습 니 다.JVM 은 정적 으로 한 번 만 메모 리 를 할당 합 니 다.클래스 를 불 러 오 는 과정 에서 정적 변수의 메모리 분 배 를 완성 합 니 다.클래스 이름 으로 직접 접근 할 수 있 습 니 다(편리).물론 대상 을 통 해 접근 할 수 있 습 니 다(단,추천 하지 않 습 니 다).
인 스 턴 스 변수 에 대해 인 스 턴 스 를 만 들 지 않 으 면 인 스 턴 스 변수 에 메모리 가 한 번 분 배 됩 니 다.인 스 턴 스 변 수 는 메모리 에 여러 개의 복사 가 있 고 서로 영향 을 주지 않 습 니 다(유연).
2.정적 방법
정적 방법 은 클래스 이름 을 통 해 직접 호출 할 수 있 고 모든 인 스 턴 스 도 호출 할 수 있 습 니 다.따라서 정적 방법 에 서 는 this 와 슈퍼 키 워드 를 사용 할 수 없습니다.소속 클래스 의 인 스 턴 스 변수 와 인 스 턴 스 방법(즉,static 이 없 는 구성원 변수 와 구성원 방법)에 직접 접근 할 수 없고 소속 클래스 의 정적 구성원 변수 와 구성원 방법 에 만 접근 할 수 있 습 니 다.인 스 턴 스 멤버 가 특정 대상 과 연결 되 어 있 기 때 문 입 니 다!이것 은 이해 해 야 합 니 다.그 이 치 를 알 고 싶 습 니 다.기억 이 아 닙 니 다!!
static 방법 은 모든 인 스 턴 스 에 독립 되 어 있 기 때문에 static 방법 은 추상 적 인 abstract 가 아니 라 실현 되 어야 합 니 다.
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");
}
}
실행 결과:3
hhahhahah
1000
정적 코드 블록 을 이용 하여 일부 static 변 수 를 할당 할 수 있 습 니 다.마지막 으로 이 예 들 을 다시 한 번 보 세 요.모두 static 의 main 방법 입 니 다.그러면 JVM 은 main 방법 을 실행 할 때 인 스 턴 스 를 만 들 지 않 고 직접 호출 할 수 있 습 니 다.
4.static 와 final 은 무엇 을 표시 합 니까?
static final 은 구성원 변수 와 구성원 방법 을 수식 하 는 데 사용 되 며'전역 상수'로 간단하게 이해 할 수 있 습 니 다!
변수 에 대해 서 는 값 을 주면 수정 할 수 없고 클래스 이름 을 통 해 접근 할 수 있 음 을 나타 낸다.
방법 에 대해 서 는 덮어 쓸 수 없 음 을 표시 하 며,유사 이름 을 통 해 직접 방문 할 수 있 습 니 다.
특히 한 가지 문 제 를 주의해 야 한다.
static 과 final 에 의 해 수 정 된 인 스 턴 스 상수 에 대해 인 스 턴 스 자 체 는 더 이상 바 꿀 수 없 지만 일부 용기 유형(예 를 들 어 Array List,HashMap)의 인 스 턴 스 변 수 는 용기 변수 자 체 를 바 꿀 수 없 지만 용기 에 저 장 된 대상 을 수정 할 수 있다 는 점 은 편집 과정 에서 많이 사용 된다.
이렇게 많은 말 을 했 는 지 오히려 너 를 어 지 럽 혔 으 니 예 를 들 어 보 자.
public class TestStaticFinal {
private static final String strStaticFinalVar = "aaa";
private static String strStaticVar = null;
private final String strFinalVar = null;
private static final int intStaticFinalVar = 0;
private static final Integer integerStaticFinalVar = new Integer(8);
private static final ArrayList<String> alStaticFinalVar = new ArrayList<String>();
private void test() {
System.out.println("------------- ----------\r
");
System.out.println("strStaticFinalVar=" + strStaticFinalVar + "\r
");
System.out.println("strStaticVar=" + strStaticVar + "\r
");
System.out.println("strFinalVar=" + strFinalVar + "\r
");
System.out.println("intStaticFinalVar=" + intStaticFinalVar + "\r
");
System.out.println("integerStaticFinalVar=" + integerStaticFinalVar + "\r
");
System.out.println("alStaticFinalVar=" + alStaticFinalVar + "\r
");
//strStaticFinalVar=" "; // ,final , .
strStaticVar = " "; // ,static , .
//strFinalVar=" "; // , final , ( null), 。
//intStaticFinalVar=2; // , final , ( null), 。
//integerStaticFinalVar=new Integer(8); // , final , ( null), 。
alStaticFinalVar.add("aaa"); // , , 。 , 。
alStaticFinalVar.add("bbb"); // , , 。 , 。
System.out.println("------------- ----------\r
");
System.out.println("strStaticFinalVar=" + strStaticFinalVar + "\r
");
System.out.println("strStaticVar=" + strStaticVar + "\r
");
System.out.println("strFinalVar=" + strFinalVar + "\r
");
System.out.println("intStaticFinalVar=" + intStaticFinalVar + "\r
");
System.out.println("integerStaticFinalVar=" + integerStaticFinalVar + "\r
");
System.out.println("alStaticFinalVar=" + alStaticFinalVar + "\r
");
}
public static void main(String args[]) {
new TestStaticFinal().test();
}
}
실행 결 과 는 다음 과 같 습 니 다.
------------- ----------
strStaticFinalVar=aaa
strStaticVar=null
strFinalVar=null
intStaticFinalVar=0
integerStaticFinalVar=8
alStaticFinalVar=[]
------------- ----------
strStaticFinalVar=aaa
strStaticVar=
strFinalVar=null
intStaticFinalVar=0
integerStaticFinalVar=8
alStaticFinalVar=[aaa, bbb]
Process finished with exit code 0
위의 예 를 보면 많이 알 수 있 지만 static final 을 통 해 수 정 된 용기 유형 변수 에서'장 착'대상 은 바 꿀 수 있다 는 것 을 알 아야 합 니 다.이것 은 일반적인 기본 유형 과 유형 변수 와 차이 가 매우 큰 부분 이다.위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 자바 키워드 final,static 사용 총화 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.