1. 최종 수정자 정의:
최종 키워드는 클래스, 변수 및 메소드
final이 변수를 수정한다는 것은 초기값을 얻은 후에는 변수를 변경할 수 없다는 의미입니다(엄밀히 말하면 final로 수정한 변수는 변경할 수 없습니다. 초기값을 얻은 후에는 변수가 변경되지 않습니다). final 변수의 값은 변경할 수 없습니다.)
final은 멤버 변수(클래스 변수, 인스턴스 변수)뿐만 아니라 지역 변수, 형식 매개 변수도 수정할 수 있습니다.
관련 비디오 학습 튜토리얼: # #java재线learning
2. 최종 멤버 변수 문법 규정:
최종 수정 멤버 변수는 프로그래머가 표시해야 합니다. 초기 값을 공식적으로 지정하면 시스템은 최종 멤버를 암시적으로 초기화하지 않습니다. 1. 최종 수정된 클래스 변수와 인스턴스 변수가 초기값을 설정할 수 있는 곳은 다음과 같습니다. 클래스 변수: 초기값은 반드시 a에 지정해야 합니다. 정적 초기화 블록 또는 클래스를 선언해야 합니다. 변수 지정 시 초기값을 지정해야 하며, 두 곳 중 한 곳에서만 지정할 수 있습니다. 인스턴스 변수: 초기값은 a에 지정해야 합니다. 비정적 초기화 블록, 인스턴스 변수 선언 또는 생성자에서만 세 위치 중 하나에서 지정할 수 있습니다참고: 일반 초기화 블록이 지정된 경우 인스턴스 변수의 초기값은 생성자에서 인스턴스 변수를 지정할 수 없습니다. Setinitial value
다음 프로그램은 멤버 변수의 최종 수정 효과를 보여줍니다.package lextends; public class FinalVariableTest { //定义成员变量时指定默认值,合法 final int a = 6; //下面变量将在构造器或初始化块中分配初始值 final String str; final int c; final static double d; //既没有指定默认值,又没有在初始化块、构造器中指定初始值 //下面定义的ch实例是不合法的 //final char ch; //初始化块,可对没有指定默认值的实例变量指定初始值 { //在初始化块中为实例变量指定初始值,合法 str = "Hello"; //定义a实例变量时已经指定了默认值 //不能为a重新赋值,因此下面赋值语句非法 //a=9; } //静态初始化块,可对没有指定默认值的类变量指定初始值 static { //在静态初始化块中为类变量指定初始值,合法 d = 5.6; } //构造器,可以对既没有指定默认值,又没有在初始化块中,指定初始值的实例变量指定初始值 public FinalVariableTest() { //如果在初始化块中已经对str指定了初始值 //那么在构造器中不能对final变量重新赋值,下面赋值语句非法 //str="java" c = 5; } public void changeFinal() { //普通方法不能为final修饰的成员变量赋值 //d=1.2 //不能在普通方法中为final成员变量指定初始值 //ch = 'a'; } public static void mian(String[] args){ FinalVariableTest ft= new FinalVariableTest(); System.out.println(ft.a); System.out.println(ft.c); System.out.println(ft.d);} }
package lextends; public class FinalErrorTest { //定义一个final修饰的实例变量 //系统不会对final成员变量进行默认初始化 final int age; { //age没有初始化,所以此处代码将引起错误,因为它试图访问一个未初始化的变量 //只要把定义age时的final修饰符去掉,程序就正确了 System.out.println(age); age=6; System.out.println(age); } public static void main(String[] args){ new FinalErrorTest(); } }
3. 최종 지역 변수
1 정의: 시스템은 지역 변수를 초기화하지 않으며 지역 변수는 다음과 같이 표시되어야 합니다. 프로그래머 초기화. 따라서 final을 사용하여 지역변수를 수정하는 경우 정의할 때 기본값을 지정할 수도 있고, 기본값을 지정할 수 없을 수도 있다. 다음 프로그램은 지역 변수와 형식 매개변수의 최종 수정을 보여줍니다. (최종 수정 형식 매개변수의 경우, 메소드가 호출되면 시스템이 수정하기 때문입니다. 전달된 매개변수에 따라 형식 매개변수. 초기화를 완료하기 위해 최종 수정자를 할당할 수 없음)package lextends; public class FinalLocalVariable { public void test(final int a){ //不能对final修饰的形参赋值,下面语句非法 //a=5; } public static void mian(String[] args){ //定义final局部变量时指定默认值,则str变量无法重新赋值 final String str="hello"; //下面赋值语句非法 //str="Java"; //定义final局部变量时没有指定默认值,则d变量可被赋值一次 final double d; d=5.6; //对final变量重新赋值,下面语句非法 //d=6.4; } }
4 최종 수정 기본 유형 변수와 참조 유형 변수의 차이점# #final로 수정한 참조형 변수는 재할당할 수 없으나 참조형 변수가 참조하는 객체의 내용은 변경할 수 있다
예를 들어 배열 아래 iArr 변수가 참조하는 객체는 최종 수정 후 iArr 변수를 재할당할 수 없으나, iArr이 참조하는 배열의 요소는 변경할 수 있습니다. #1. 최종 변수의 경우 인스턴스인지 여부. 변수 또는 지역 변수는 변수가 세 가지 조건을 충족하는 한 최종 변수는 더 이상 변수가 아니지만 직접 수량과 동일합니다.
(1) 최종 수식자를 사용하여 수정
(2) 최종 변수 정의 시 초기값 지정(3) 초기값 값은 컴파일 시간
2에서 결정될 수 있습니다. 최종 수정자의 중요한 용도는 "매크로 변수"를 정의하는 것입니다. 최종 변수가 정의되면 해당 변수에 초기값이 할당되고 변수인 경우 이를 결정할 수 있습니다. 그러면 이 최종 변수는 본질적으로 "매크로 변수"이며 컴파일러는 프로그램의 모든 변수를 삭제합니다. 이 변수를 사용하는 위치는 변수 값으로 직접 대체됩니다.
3,
eg. //final修饰数组元素,iArr是一个引用变量 final int[] iArr={5,6,12,9}; System.out.println(Arrays.toString(iArr)); //对数组元素进行排序,合法 Arrays.sort(iArr); System.out.println(Arrays.toString(iArr)); //对数组进行元素赋值,合法 iArr[2]=-8; System.out.println(Arrays.toString(iArr)); //下面语句对iArr重新赋值,非法 //iArr=null;
s3의 경우 str1과 str2는 두 개의 일반 변수이므로 컴파일러는 "매크로 대체"를 수행하지 않습니다. 수행되므로 컴파일러는 s3의 값을 결정할 수 없으며 s3을 문자열 풀에 캐시된 "Crazy Java"로 가리킬 수 없습니다.
자바 관련 기사와 튜토리얼을 더 보려면 다음 사이트를 방문하세요.
java 입문 튜토리얼위 내용은 자바 객체 지향 최종 수정자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!