`

慎重使用final数组

    博客分类:
  • java
阅读更多
具有公有地静态final数组域几乎总是错误的。比如:
public static final String[] CODES={ "A","B", "C", "D", "E};
初看这段代码有什么感想?因为CODES定义的是static final,"final"在java中定义为"不可变"(我想在其它语言中也是这样定义的),值得注意的是它只是说明指向该对象的指针不变,对于常量对象来说这点是成立的,但对于数组来说就不成立啦!因为上面只能保证CODES对象不变(意思是说final只能保证基本数据类型或原始数据类型不可变,比如:String,Double),但CODES引用的对象是可以改变的。
解决方案1:定义一个私有数组,以及编写一个公有的非可变列表:


private static final String[] CODES ={ "A","B", "C", "D", "E"};
public static final List VALUES= Collections.unmodifiableList(Arrays.asList(CODES)); 


解决方案2:要求在编译时(compile-time)类型检查,这样也就损失了性能


private static final String[] CODES = { "A","B", "C", "D", "E"};
public static final codes() {
	return (CODES[])CODES.clone();
}
解决方案3:死马当做活马医


public static final String CODES_A = "A";
public static final String CODES_B = "B";
public static final String CODES_C = "C";
public static final String CODES_D = "D";
public static final String CODES_E = "E";

我每个解决方案用
框起怎么显示不错代码编辑器的效果???????

  


  
分享到:
评论

相关推荐

    Static和Final修饰类属性变量及初始化

    1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.

    API的使用、数组的高级操作

    数组是Java中的基础数据结构,对于有序数组,我们可以使用二分查找算法提高查找效率。二分查找的前提是数组已经排序,它通过不断缩小搜索范围来快速定位目标元素。另一方面,冒泡排序是一种简单的排序算法,通过多次...

    二维数组排序

    - 使用两层循环遍历数组,第一层循环控制当前行,第二层循环负责比较并交换元素。 - 第一层循环中的条件判断用于控制是否需要交换元素,包括当前列以及后续列的比较。 - `swap`方法用于交换两个元素的位置,同时...

    Java实验-数组的定义、初始化方法 掌握数组的遍历方法 掌握Arryas类的使用

    Java实验-数组的定义、初始化方法 掌握数组的遍历方法 掌握Arryas类的使用 Java实验报告中,主要讨论了数组的定义、初始化方法、数组的遍历方法和Arryas类的使用。下面是详细的知识点总结: 一、数组的定义和初始...

    Java基于final修饰数据过程解析

    Java 基于 final 修饰数据过程解析 Java 中的 final 关键字可以修饰数据、方法和类,今天我们主要讨论 final 修饰数据的过程解析。final 修饰的数据代表着:永远不变。意思是,一旦你用 final 修饰一块数据,你之后...

    Final_Cut_Pro使用手册.pdf

    ### Final Cut Pro 使用手册知识点概览 #### 一、Final Cut Pro 概述 - **Final Cut Pro**:是一款由苹果公司开发的专业视频编辑软件,适用于macOS平台,被广泛应用于影视后期制作、广告制作等领域。 #### 二、...

    使用ClassFinal进行代码混淆

    使用ClassFinal进行代码混淆

    jni 调用对象以及数组

    对于基本类型数组,如int[],可以使用`GetIntArrayElements()`获取原始C数组,操作完成后,使用`ReleaseIntArrayElements()`释放。对于引用类型数组,如String[],可以使用`GetObjectArrayElement()`获取数组元素,...

    Intent传递对象、对象数组

    在接收端,使用getParcelableArrayListExtra()来获取数组。 五、注意事项 1. 虽然Parcelable效率高,但需要手动实现序列化和反序列化,增加了代码量。 2. 如果对象嵌套复杂,需要确保所有嵌套的对象都实现了...

    关于Final的用法

    - **代码安全性**:使用`final`可以避免无意中改变变量值或方法行为,增强代码的安全性和稳定性。 - **设计模式支持**:在某些设计模式中,如单例模式,`final`关键字是实现的关键之一,确保只有一个实例存在。 ###...

    Java基础-模拟HashMap集合(基于数组和链表) 数组和链表.pdf

    在本文中,我们将详细介绍如何模拟Java的HashMap集合,使用数组和链表来实现Hash表的存储。我们将从基本概念开始,逐步深入到HashMap的实现细节中。 什么是HashMap? HashMap是一种基于散列表的数据结构,用于存储...

    finalData 注册码

    1. **下载并安装finalData**:首先需要从官方网站或其他可信渠道下载finalData安装包,并按照提示完成安装过程。 2. **获取注册码**:通常情况下,用户购买finalData软件后会收到一封包含注册码的邮件。如果是在其他...

    编程技巧-哨兵在链表和数组中的使用及解析 数组和链表.pdf

    二、哨兵结点在数组中的使用 在数组中,哨兵结点可以用来简化查找操作,减少边界条件的判断。例如,在查找数组中的某个数值时,可以将该数值添加到数组的最后,然后进行查找。 1. 普通写法 ``` for (int i = 0; i...

    byte数组转化为hex

    private static final char[] hexArray = "0123456789ABCDEF".toCharArray(); ``` 在这个函数中,我们遍历每个字节,通过位操作(`&` 和 `>>`)来提取高位和低位的4位,并将它们转换为对应的16进制字符。`hexArray`...

    Final Effects汉化插件

    为了更好地使用Final Effects插件,建议用户阅读“汉化.txt”文件,里面可能包含了关于汉化过程的说明、使用技巧以及可能遇到的问题解决方案。同时,持续关注插件的更新,因为开发者会不断修复已知问题,增加新功能...

    final修饰类

    例如,一个`final`数组或集合的引用不能指向新的数组或集合,但数组或集合的内容可以改变。 2. **初始化要求**:`final`变量必须在声明时或者所有构造函数中初始化。这是因为编译器需要确保`final`变量在对象创建后...

    android bitmap通过byte数组以流的形式创建

    在处理大量数据时,如从网络获取的字节数组,我们通常会使用`BitmapFactory.Options`来优化内存使用。这个类允许我们设置解码参数,如缩放比例、解码格式等,以减少内存消耗。 创建Bitmap的步骤如下: 1. **读取...

    学习Java,你需要知道这些——Java数组

    目录数组的概念数组的创建数组的引用数组的创建数组元素的初始化数组的使用使用数组数组的复制多维数组 数组的概念 数组由同一类型的对象或者基本数据组成,并封装在同一一个标识符(数组名称)下。 数组是对象 动态...

    JAVA类与对象及数组习题.pdf

    解释:在 Java 中,常量需要使用 final 关键字来修饰,否则不能保证其值不被修改。 4. 正确的叙述是()A. 声明变量时必须指定一个类型 解释:在 Java 中,声明变量时必须指定一个类型,以便编译器可以检查变量的...

    JAVA类与对象及数组习题

    在JAVA中,变量声明需要指定类型,例如`public final int MAX_LENGTH=100`。 4. 变量的作用域: JAVA中的变量可以是实例变量或静态变量,实例变量属于对象,静态变量属于类。 5. 继承的关系: 在JAVA中,父类不能...

Global site tag (gtag.js) - Google Analytics