자바 객체 지향 최종 수정자

王林
풀어 주다: 2019-11-26 14:43:17
앞으로
2567명이 탐색했습니다.

자바 객체 지향 최종 수정자

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);} }
로그인 후 복사

2. 생성자 또는 초기화 블록 초기화에서 최종 멤버 변수를 수정하려는 경우 초기화 전에 멤버 변수의 값에 액세스하지 마세요.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!