java的final变量浅析

final关键字详解
本文详细介绍了Java中final关键字的使用方式及注意事项,包括修饰类、方法和变量的不同应用场景,并通过实例展示了final修饰变量的具体效果。
final关键字可修饰类、方法、变量(包括成员变量和局部变量)。
1、修饰类

final修饰类,说明被修饰的类不可以被继承,同样final修饰的类里面的成员方法均为final方法。值得注意一下,String类就是一个final类。


2、修饰方法

final修饰方法,说明被修饰的方法不可以重载,防止被继承的类修改该方法。

注:private方法会隐式的指向final方法。

3、修饰变量

final修饰变量,所修饰的变量分为java8种基本类型和引用型变量。修饰基本变量,则变量的值不可改变,修饰引用型变量,则变量的引用地址不变,但是引用的地址所存储的值是可以改变的。

4、测试final修饰变量


/**
 * 测试类
 *
 */
public class FinalTest {

	public final int a=0;//基本类型初始值
	public final String b = "b";//String类型初始值
	
	public static void main(String[] args) {
		FinalTest test =new FinalTest();
		FinalTest3 finalTest3 = new FinalTest3();//引用型变量
		finalTest3.setA(test.a);
		finalTest3.setB(test.b);
		
		System.out.println("最初值:");
		System.out.print(test.a+"  "+test.b+"  "+finalTest3.getA()+"  "+finalTest3.getB());
		System.out.println();
		
		FinalTest2 finalTest2 = new FinalTest2();
		finalTest2.changeFinal(test.a);//修改基本类型变量
		finalTest2.changeFinal(test.b);//修改String类型变量
		finalTest2.changeFinal(finalTest3);//修改引用型变量
		
		System.out.println("更改后值:");
		System.out.print(test.a+"  "+test.b+"  "+finalTest3.getA()+"  "+finalTest3.getB());
		System.out.println();
	}
}

/**
 * 更改变量类
 *
 */
public class FinalTest2 {

	public void changeFinal(int a){
		a = a+1;
	}
	public void changeFinal(String a){
		a = a+"1";
	}
	public void changeFinal(FinalTest3 a){
		a.setB("change");
		a.setA(12345);
	}
	
}
/**
 * 引用型变量的类
 *
 */
public class FinalTest3 {

	public int a;
	public String b;
	public int getA() {
		return a;
	}
	public void setA(int a) {
		this.a = a;
	}
	public String getB() {
		return b;
	}
	public void setB(String b) {
		this.b = b;
	}
}

执行结果:

从结果可以印证final修饰变量。

<think>好的,我现在要详细回答用户关于Javafinal关键字的作用、使用场景和特性的问题。首先,我需要回顾一下已有的引用内容,确保回答准确且覆盖所有要点。 用户提供了四个引用,分别涉及final关键字的各个方面。引用1提到final提供了保护机制,应用于类、方法变量,提升安全性、效率和可维护性。引用2详细说明了final类、方法变量的具体用途,例如final类不可继承,final方法不可覆盖,final变量不可修改。引用3同样强调不可变性,并分三个层面展开,还提到final变量必须初始化。引用4补充了final方法防止子类重写的特性。 接下来,我需要将这些信息整理成一个结构清晰的回答,分点说明,每个部分结合引用内容。需要注意用户要求使用中文,同时遵循系统级指令,比如数学表达式的格式,但这个问题可能不涉及数学公式,所以可能不需要使用。但如果有示例代码,需要用正确格式。 用户的问题主要分为作用、使用场景和特性,可能需要将这三个部分分开阐述。比如,先讲作用,再讲使用场景,再讲特性,或者整合在一起。根据引用内容,final的作用主要是声明不可变的实体,具体在类、方法变量上。使用场景即这三个方面的应用情况,特性则包括不可继承、不可重写、不可修改等。 另外,用户要求生成相关问题,需要根据回答内容提出三个相关问题,确保问题相关且有价值。例如,可以问final变量初始化规则,final与不可变类的区别,final在多线程中的作用等。 需要确保回答正确,比如final修饰引用类型变量时,引用不可变但对象内容可能可变,这点需要明确说明。同时,代码示例可能有助于理解,比如展示final变量方法、类的用法。 最后,检查引用标识是否在适当的位置添加,比如在提到不可继承时引用[^2],在提到final变量初始化时引用[^3]等。确保每个引用只在相关部分末尾出现,并且自然衔接。 现在,按照这些思路组织回答,确保结构清晰,覆盖所有关键点,正确引用来源,并生成相关问题。</think>### Java final关键字的作用及用法详解 #### 一、final关键字的作用 1. **保护不可变性** final关键字用于声明不可改变的实体,确保类、方法变量在定义后不可被继承、重写或修改[^2]。 2. **提升代码稳定性** 通过限制修改,减少程序运行时因意外改动导致的错误[^1]。 3. **优化性能** 编译器可能对final变量进行内联优化,提高执行效率。 --- #### 二、final关键字的使用场景 1. **修饰类(final类)** - **特性**:final类不能被继承。 - **场景**:如Java标准库的`String`类,确保其行为不被子类篡改[^2]。 ```java final class ImmutableClass { /* 类定义 */ } ``` 2. **修饰方法final方法)** - **特性**:final方法不能被子类重写。 - **场景**:父类中关键算法需保持逻辑一致性时使用[^4]。 ```java class Parent { public final void criticalMethod() { /* 核心逻辑 */ } } ``` 3. **修饰变量final变量)** - **基本类型变量**:值不可修改,需初始化赋值。 - **引用类型变量**:引用地址不可变,但对象内部状态可能可变。 ```java final int MAX_VALUE = 100; final List<String> list = new ArrayList<>(); // list引用不可变,但可添加元素 ``` --- #### 三、final关键字的特性 | 修饰对象 | 特性 | 示例场景 | |----------|-------------------------------|------------------------------| | 类 | 不可继承 | 工具类、核心组件类[^2] | | 方法 | 不可重写 | 模板方法中的固定步骤 | | 变量 | 不可重新赋值(基本类型/引用) | 常量定义、配置参数 | --- #### 四、注意事项 1. **final变量的初始化** - 必须在声明时或构造方法中初始化。 2. **引用类型变量的限制** final仅保证引用地址不变,对象内容仍可能被修改(如集合类)[^3]。 3. **final与线程安全** final变量的可见性在多线程中是安全的,但需结合其他机制保证完全线程安全。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值