首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在避免枚举的android标准类中使用静态的final int?

在避免枚举的Android标准类中使用静态的final int是为了提高代码的可读性、可维护性和性能。

  1. 可读性和可维护性:使用静态的final int可以为常量赋予有意义的名称,使代码更易读、理解和维护。通过使用常量名称,可以清晰地表达代码中使用的特定值的含义,而不是直接使用数字或字符串。这样可以减少代码中的魔法数字和魔法字符串,提高代码的可读性和可维护性。
  2. 性能:使用静态的final int可以避免在运行时进行计算或查找常量的值。由于静态的final int是在编译时确定的,编译器可以直接将常量的值嵌入到代码中,从而避免了在运行时的额外开销。这样可以提高代码的执行效率和性能。

应用场景:

  • 在Android开发中,常常会使用静态的final int来定义一些常量,如布局文件中的控件ID、Intent中的请求码和结果码等。这样可以避免在代码中使用魔法数字,提高代码的可读性和可维护性。
  • 在Android开发中,常常会使用静态的final int来定义一些状态标识,如网络请求的成功和失败状态、数据库操作的结果状态等。这样可以方便地在代码中判断和处理不同的状态,提高代码的可读性和可维护性。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动开发平台:https://cloud.tencent.com/product/mpp
  • 腾讯云数据库:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器:https://cloud.tencent.com/product/cvm
  • 腾讯云云原生应用平台:https://cloud.tencent.com/product/tke
  • 腾讯云音视频处理:https://cloud.tencent.com/product/mps
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/vr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java 枚举(enum) 全面解读

从反编译Color可以看出,enum关键字,第一行 (准确说是第一个分号前) 定义变量,都会生成一个 Color实例,且它是静态域中进行初始化, 而静态加载阶段cinit中进行初始化...加载时创建,保证线程安全 从Color可以看出, Color对象是静态域创建,由加载时初始化,JVM保证线程安全,这样就能确保Color对象不会因为并发同时请求而错误创建多个实例....它实现比其他方式需要更多内存空间,所以Android这种受资源约束设备尽量避免使用枚举单例,而选择 双重检查锁(DCL)和静态内部类方式实现单例....你应该严格避免Android使用枚举. 导致很多开发者把它当成了教条,禁止Android使用枚举....因此,不建议Android使用枚举常量,而更偏向于使用 static final来定义常量. 但是,枚举常量中有类型安全检查功能,使用常规实现,没有这种功能.

72110

关于Java枚举Enum深入剖析

Enum Enum之前我们使用类似如下代码实现枚举功能. public static final int COLOR_RED = 0; public static final int COLOR_GREEN...Enum转成了int值(通过调用Enum.oridinal()方法) 枚举与混淆 Android开发,进行混淆是我们发布前必不可少工作,混下后,我们能增强反编译难度,在一定程度上保护了增强了安全性...values()方法和valueOf()方法,请参考文章读懂 Android 代码混淆 关于枚举部分 使用proguard优化 使用Proguard进行优化,可以将枚举尽可能转换成int。...(Android)该不该用枚举 既然上面提到了枚举会转换成,这样理论上造成了下面的问题 增加了dex包大小,理论上dex包越大,加载速度越慢 同时使用枚举,运行时内存占用也会相对变大 关于上面两点验证...关于枚举是否使用结论,大家可以参考 如果你开发是Framework不建议使用enum 如果是简单enum,可以使用int很轻松代替,则不建议使用enum 另外,如果是Android,可以使用下面介绍枚举注解来实现

70030

关于Java枚举Enum深入剖析

Enum Enum之前我们使用类似如下代码实现枚举功能. public static final int COLOR_RED = 0;public static final int COLOR_GREEN...Enum转成了int值(通过调用Enum.oridinal()方法) 枚举与混淆 Android开发,进行混淆是我们发布前必不可少工作,混下后,我们能增强反编译难度,在一定程度上保护了增强了安全性...values()方法和valueOf()方法,请参考文章读懂 Android 代码混淆 关于枚举部分 使用proguard优化 使用Proguard进行优化,可以将枚举尽可能转换成int。...(Android)该不该用枚举 既然上面提到了枚举会转换成,这样理论上造成了下面的问题 增加了dex包大小,理论上dex包越大,加载速度越慢 同时使用枚举,运行时内存占用也会相对变大 关于上面两点验证...关于枚举是否使用结论,大家可以参考 如果你开发是Framework不建议使用enum 如果是简单enum,可以使用int很轻松代替,则不建议使用enum 另外,如果是Android,可以使用下面介绍枚举注解来实现

92730

单例模式六种写法

,线程安全(因为虚拟机保证只会装载一次,在装载时候是不会发生并发) 缺点:耗内存(若中有静态方法,调用静态方法时候就会被加载,加载时候就完成了单例初始化,拖慢速度) 1public...首先,枚举我们明确了构造方法限制为私有,我们访问枚举实例时会执行构造方法,同时每个枚举实例都是static final类型,也就表明只能被实例化一次。调用构造方法时,我们单例被实例化。...可以看出,会自动生成 ACC_STATIC, ACC_FINAL这两个修饰符 枚举类型为什么是线程安全?...4.6 使用容器实现单例模式 程序初始化,将多个单例类型注入到一个统一管理使用时通过key来获取对应类型对象,这种方式使得我们可以管理多种类型单例,并且使用时可以通过统一接口进行操作...) 避免对资源多重占用(一个写文件操作,只有一个实例存在内存避免对同一个资源文件同时写操作) 系统设置全局访问点,优化和共享资源访问(如:设计一个单例,负责所有数据表映射处理) 5.2 单例模式缺点

3.8K11

深入分析Java反射(二)-数组和枚举

本文主要介绍反射中可能用到两个比较特殊类型,数组和枚举,分别对应java.lang.reflect.Array和java.lang.Enum,后者其实并不是反射库包,但是反射基础库里面有使用枚举类型方法...数组是由Java虚拟机实现(这一点很重要,这就是为什么JDK没有数组对应类型原因,array也不是Java保留关键字,操作数组底层方法都是native方法),数组类型只有继承自java.lang.Object...2、所有的枚举成员属性都变成static final修饰第1步中提到Java实例,属性名称和原来枚举名字一致,实例静态代码块创建。...3、新增了一个static final修饰第1步中提到Java数组实例,名称为$VALUES,此数组静态代码块创建,基于此数组还新增了一个静态方法values(),此方法就是直接返回数组克隆...小结 数组和枚举Java使用频率也是比较高,特别是算法或者框架,本文尝试从反射角度介绍这两个类型使用方式,掌握它们对数组或者枚举使用有很大帮助。

58130

走进 JDK 之 Enum

什么是枚举 什么是枚举?说实话,我这些年开发生涯,用过枚举次数大概两只手都可以数过来。当然你不能说枚举一无是处,只能说是我对 Java 理解还不够深刻,可以使用枚举时候并没有去使用。...字段 private final String name; // 枚举实例名称,就是枚举声明名称 private final int ordinal; // 枚举声明次序,从 0 开始 枚举就只有这两个字段...ordinal 就是声明次序,之所以 switch 可以使用枚举,就是因为编译器会自动调用枚举 ordinal() 方法。...站在 Android 开发者角度,实际上官方是不建议我们使用枚举枚举占用空间通常是静态常量两倍。你应该严格避免 Android使用枚举。 其实我并不是完全赞同。...MVP 多了那么多接口和,我们应该使用吗?如今手机内存下,如果你应用发生了 OOM,我想枚举应该不是罪魁祸首吧。

64130

Java基础重构-面向对象

从多个具有相同特征抽象出了一个抽象,以这个抽象作为其子类模板,从而避免了子类设计随意性。...当一个程序中使用接口时,接口时多个模块间耦合标准。 从某种程度上来看,接口类似于整个系统 总纲 ,它制定了系统各模块应该遵循标准,因此一个系统接口不应该经常改变。...非静态内部类不能拥有静态成员。 为什么静态内部实例方法也不能访问外部类实例属性? 因为静态内部类是外部类相关,而不是外部类对象相关。...使用Enum 定义,非抽象枚举默认会使用 final 修饰,因此枚举不能派生子类。...SeasonEnum MALE=new SeasonEnum("男"); public static final SeasonEnum FEmale=new SeasonEnum("女"); 枚举列出枚举值是

63130

每个C++开发者都应该学习和使用C++11特性

unsetunset4、override和finalunsetunset C++11 ,override 和 final 是两个关键字,用于派生重写(override)和禁止重写(final...}; 派生使用 override 关键字,如果没有正确地重写基虚函数,编译器会产生错误。...这样可以避免一些常见错误,如函数签名不匹配等。 2. final 关键字 final 关键字用于修饰和虚函数,表示禁止派生继续派生或者禁止派生重写该虚函数。...value, "int is not the same as int"); 类型特征可以帮助我们模板编程编写更加通用和健壮代码,根据类型属性进行编译时分支选择和静态断言,从而提高代码可读性和可维护性...移动语义使用场景: 容器插入临时对象: 通过移动语义,可以避免容器插入临时对象时进行深拷贝,提高了插入效率。

4910

Java枚举线程安全性及序列化问题

当我们使用enmu来定义一个枚举类型时候,编译器会自动帮我们创建一个final类型继承Enum,所以枚举类型不能被继承,我们看到这个中有几个属性和方法。...因为static类型属性会在被加载之后被初始化,我们深度分析JavaClassLoader机制(源码级别)和Java加载、链接和初始化两个文章中分别介绍过,当一个Java第一次被真正使用时候静态资源被初始化...单例模式七种写法,我们看到一共有七种实现单例方式,其中,Effective Java作者Josh Bloch 提倡使用枚举方式,既然大神说这种方式好,那我们就要知道它为什么好?...,有一种解决办法就是使用readResolve()方法来避免此事发生。...3.枚举实例创建是thread-safe(线程安全) 我们深度分析JavaClassLoader机制(源码级别)和Java加载、链接和初始化两个文章中分别介绍过,当一个Java第一次被真正使用时候静态资源被初始化

1.2K10

java | 深入理解Java枚举类型(二)

实际应用,线程池、缓存、日志对象、对话框对象常被设计成单例,总之,选择单例模式就是为了避免不一致状态,下面我们将会简单说明单例模式几种主要编写方式,从而对比出使用枚举实现单例模式优点。...我们把Singleton实例放到一个静态内部类,这样可以避免静态实例Singleton加载阶段(加载过程其中一个阶段,此时只创建了Class对象,关于Class对象可以看博主另外一篇博文...enum,为其添加变量和方法,访问方式也更简单,使用SingletonEnum.INSTANCE进行访问,这样也就避免调用getInstance方法,更重要使用枚举单例写法,我们完全不用考虑序列化和反射问题...但是这总不是万能,对于android平台这个可能未必是最好选择,android开发,内存优化是个大块头,而使用枚举时占用内存常常是静态变量两倍还多,因此android官方在内存优化方面给出建议是尽量避免...= " + keyType); } 接着通过int index = key.ordinal()方式获取到该枚举实例顺序值,利用此值作为下标,把值存储vals数组对应下标的元素即vals[index

1.2K10

看完这篇文章,解决 APP 90 % 内存异常问题

Android 我们写 .java 文件,最终会编译成 .class 文件, class 又由装载器加载后, JVM 中会形成一份描述 class 结构元信息对象,通过该元信息对象可以知道...线程共享区 方法区 ClassLoader 加载信息 常量、静态变量 编译后代码 会出现 OOM 运行时常量池 public static final 符号引用、接口全名、方法名 java 堆...解决方法: ``` 1.使用静态内部类 + 弱引用 2. Activity onDestoty() 处理 removeCallbacksAndMessages() @Override...枚举优化 缺点: 每一个枚举值都是一个单例对象,使用它时会增加额外内存消耗,所以枚举相比与 Integer 和 String 会占用更多内存 较多使用 Enum 会增加 DEX 文件大小,会造成运行时更多...static , static final 问题 static 会由编译器调用 clinit 方法进行初始化 static final 不需要进行初始化工作,打包在 dex 文件可以直接调用,并不会在初始化申请内存

72530

Kotlin Vocabulary | 枚举和 R8 编译器

使用 Kotlin 时,也仅仅是将其转换为 Java 编程语言中枚举而已,并没有多大开销。(我们曾经提到避免使用枚举,但那是很多年前事了,而且运行时也与今日不同。所以现在使用枚举没什么问题。)...这个数组是从哪来呢? 而且这个数组存储一个被生成文件。这个文件是从哪来? 这里究竟发生了什么呢?...生成代码就像下面这样: public final class BlendingKt$WhenMappings { public static final int[] $EnumSwitchMapping...这个里面有一个存储映射信息数组: $EnumSwitchMapping$0,接下来则是一些执行映射操作静态代码。 示例是只有一个 when 语句时情况。...比如,它能避免枚举映射造成开销: 它不需要那些映射信息,因为它知道这些代码只会以既定方式使用这些枚举,所以它可以直接调用序数值。

97850

Kotlin初探

声明类型 函数 操作符 数组遍历及控制语句 枚举 扩展 代理 伴生对象 单例模式 扩展学习 1 优势 简洁 它大大减少你需要写样板代码数量。 安全 避免空指针异常等整个错误。...通用 构建服务器端程序、Android 应用程序或者浏览器运行前端程序。 互操作性 通过 100% Java 互操作性,利用 JVM 既有框架和库。.../抽象标示 final //标示不可继承,默认属性 enum //标示枚举 open //可继承,默认是final annotation //注解 private /...上面使用了字符模板,Kotlin中有两种字符模板形式,\、 枚举 Kotlin枚举还支持方法。...10 扩展 使用 11 代理 12 伴生对象 伴生对象(companion object )类似于java静态关键字static。

1.6K20

如何成为Android高手

下面笔者为大家介绍几个通用,这些来自笔者平日收集,如果你能把它们加入到你自己,迟早你会发现自己进行Android 开发时候受益无穷: 1) 从输入流获取数据并以字节数组返回,...此类例子Android 随处可见,例如说数据库管理,例如说Android SAX Handler 调用等。...避免使用枚举 枚举变量非常方便,但不幸是它会牺牲执行速度和并大幅增加文件体积。...它被首次调用时,这个会调用初始化方法来准备每个枚举变量。每个枚举项都会被声明成一个静态变量,并被赋值。然后将这些静态变量放在一个名为”$VALUES”静态数组变量。...一方面说,使用枚举变量可以让你API 更出色,并能提供编译时检查。所以通常时候你毫无疑问应该为公共API 选择枚举变量。但是当性能方面有所限制时候,你就应该避免这种做法了。

86930

单例模式探究

单例模式五种写法: 懒汉 恶汉 静态内部类 枚举 双重校验锁 1.懒汉 class LazySingleton{ private static LazySingleton...虽然Effective Java推荐使用,但是Android平台上却是不被推荐。...指的是一个线程对该变量修改会马上由工作内存(Work Memory)写回主内存(Main Memory),所以会马上反应在其它线程读取操作。 第二层语义是禁止指令重排序优化。...(2)单例模式可以避免对资源多重占用,例如一个文件操作,由于只有一个实例存在内存避免对同一资源文件同时操作。...(3)单例模式可以系统设置全局访问点,优化和共享资源访问,例如,可以设计一个单例,负责所有数据表映射处理。

35420

JDK枚举底层实现

JDK枚举描述 国际惯例,先看一下JavaSE-8语言规范JLS-8.9对枚举类型定义和描述: ?...枚举类型不能使用abstract或者final修饰,否则会产生编译错误。 枚举类型直接超是java.lang.Enum。 枚举类型除了枚举常量定义之外没有其他实例,也就是枚举类型不能实例化。...枚举类型禁用反射操作进行实例化(这个特性就是Effetive Java推荐使用枚举实现单例原因)。...小结 JDK枚举底层实现就是使用了enum关键字声明枚举编译后最终会变成public final修饰同时实现了继承了泛型抽象java.lang.Enum并且指定泛型参数为自身普通Java,...而成员属性和方法实现相关都是在编译完成后就已经成型枚举类型成员变量都是通过静态代码块声明

81620

Java不可或缺50个小技巧,好用!

例如,只创建了对象,设置了标题,却没有尺寸,相当于创建了一个没有尺寸警告框。 Android,大量控件都使用了构造器Builder。... Elvis(){} } 另一种情况,序列化过程,反序列化得到对象已经不再是以前对象(破坏了Singleton),这种情况下,可以通过单元素枚举型处理。...22、优先考虑静态成员 嵌套目的应该只是为了他外围提供服务,如果以后还可能用于其他环境,则应该设计为顶层静态相当于一个普通外部类,只是恰好声明了一个内部。...通常用户是:Calculator.Operation.PLUS等。和普通区别只是,PLUS前,有了2个前缀,来表明其含义。而非静态必须存在于外部类对象。...{ NAVEL, TEMPLE, BLOOD } 枚举java中非常强大,当需要一组固定常量时,使用enum比int好很多。

53900

深入理解Enum(枚举)

为什么要引入枚举 一个小案例 你写了一个小程序,不过好久不用了,突然有一天,你想使用一下它。程序要想正确运行,需要将今天星期几存到数据库里。这个时候,你开始犯难了。...就是因为没有枚举时候,我们要定义一个有限序列,比如星期几,男人女人,春夏秋冬,一般会通过上面那种静态变量形式,但是使用那样形式如果需要一些其他功能,需要些很多奇奇怪怪代码。...在其他使用enum变量时候,只需要【名.变量名】就可以了,和使用静态变量一样。...学完了这些,大概枚举你也应该掌握了,但是,还有没有其他用法呢? 枚举抽象 如果我枚举定义一个抽象方法会怎么样? 你要知道,枚举不能继承其他,也不能被其他继承。...,如果需要扩展enum元素,一个接口内部,创建实现该接口枚举,以此将元素进行分组。

55130

Java接地气日常编码技巧

例如,只创建了对象,设置了标题,却没有尺寸,相当于创建了一个没有尺寸警告框。 Android,大量控件都使用了构造器Builder。...Elvis(){} } 另一种情况,序列化过程,反序列化得到对象已经不再是以前对象(破坏了Singleton),这种情况下,可以通过单元素枚举型处理。...静态相当于一个普通外部类,只是恰好声明了一个内部。通常用户是:Calculator.Operation.PLUS等。和普通区别只是,PLUS前,有了2个前缀,来表明其含义。...而非静态必须存在于外部类对象。不要手动在外部创建一个内部非静态对象,创建过程是:instance.New MemberClass()。这非常奇怪。...{ NAVEL, TEMPLE, BLOOD } 枚举java中非常强大,当需要一组固定常量时,使用enum比int好很多。

61930

重新认识java(十) —- Enum(枚举

就是因为没有枚举时候,我们要定义一个有限序列,比如星期几,男人女人,春夏秋冬,一般会通过上面那种静态变量形式,但是使用那样形式如果需要一些其他功能,需要些很多奇奇怪怪代码。...在其他使用enum变量时候,只需要【名.变量名】就可以了,和使用静态变量一样。...学完了这些,大概枚举你也应该掌握了,但是,还有没有其他用法呢? 枚举抽象 如果我枚举定义一个抽象方法会怎么样? 你要知道,枚举不能继承其他,也不能被其他继承。...使用枚举创建单例模式: public enum EasySingleton{ INSTANCE; } 代码就这么简单,你可以使用EasySingleton.INSTANCE调用它,比起你单例调用...enum元素,一个接口内部,创建实现该接口枚举,以此将元素进行分组。

55620
领券