为什么final定义的成员变量,必须赋值?final;成员变量和局部变量的区别

您所在的位置:网站首页 final关键字不可以用来修饰 为什么final定义的成员变量,必须赋值?final;成员变量和局部变量的区别

为什么final定义的成员变量,必须赋值?final;成员变量和局部变量的区别

2024-06-24 17:50| 来源: 网络整理| 查看: 265

final 修饰变量的意义 就是常量化,一旦赋值就不能再修改,如果是局部变量,可以先定义,因为编译器可以做到对 局部变量的第一次赋值的识别; 成员变量的话, 如果只定义,不赋值,这个变量必然得在方法中赋值,那么编译器就无法识别那一次是第一次赋值。

成员变量和局部变量的区别

成员变量和局部变量的区别 (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 (4)初始化值不同 成员变量:有默认值 局部变量:没有默认值,必须定义,赋值,然后才能使用

一、final变量

final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常,由final定义的变量为常量。例如,在类中定义PI值,可以使用如下语句:

final double PI=3.14;

在Java中定义全局常量,通常使用public static final修饰,这样的常量只能在定义是被赋值。static的数据保存在公共数据区,所以此处的常量就是一个公共常量。

public static final double PI_VAULE = 3.14;

规范:被定义为final的常量定义时需要使用大写字母命名,并且中间使用下划线进行连接。

常量示例:

import java.util.Random; class Test { int i = 0; } /** * 常量示例 * * @author pan_junbiao * */ public class FinalData { static Random rand = new Random(); private final int VALUE_1 = 9; // 声明一个final常量 private static final int VALUE_2 = 10; // 声明一个final、static常量 private final Test test = new Test(); // 声明一个final引用 private Test test2 = new Test(); // 声明一个不是final的引用 private final int[] a = { 1, 2, 3, 4, 5, 6 }; // 声明一个定义为final的数组 private final int i4 = rand.nextInt(20); private static final int i5 = rand.nextInt(20); public String toString() { return "i4值:" + i4 + " i5值:" + i5 + " "; } public static void main(String[] args) { FinalData data = new FinalData(); // 报错:不能改变定义为final的常量值 // data.VALUE_1 = 8; // 报错:不能改变定义为final的常量值 // data.VALUE_2 = 9; // 报错:不能将定义为final的引用指向其他引用 // data.test = new Test(); // 正确: 可以对指定为final的引用中的成员变量赋值 data.test.i = 1; // 正确: 可以将没有定义为final的引用指向其他引用 data.test2 = new Test(); // 报错:不能对定义为final的数组赋值 // int b[] = { 7, 8, 9 }; // data.a = b; // 但是final的数组中的每一项内容是可以改变的 for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3