-
2021-02-26 21:29:08
常量(Constant):是一种标识符,它的值在运行期间恒定不变。并且常量在程序中只能被引用,而不能被重新赋值。
按类型可分为:
数据型:
整数型:用来存储整数 byte(占一字节 8 Bits) short(占二字节) int(占四字节) long(占八字节)
浮点型:用来存储小数 float(占四字节) double(占八字节)
非数值型:
字符型:Java使用16位的Unicode字符集。因此Java字符是一个16位的无符号整数,
字符型:用来存储单个字符 char (占二字节);
字符串:用来存储一串字符String 字符串是作为一个类的实例出现;
逻辑型:布尔型是一个独立的类型,Java中的布尔类型不代表0和1两个整数,不能转换成数字。
True:真
False:假
使用方法:
public class Math {
public static final double PI = 3.1415926; //定义一个全局常量PI
}
以上,我们在Math类中就定义了一个全局常量PI.(被final关键字修饰的变量名最好要大写。)
常量的优点:
如果在程序中直接填写数字,程序的可读性将会变差,程序员自己也会忘记那些数字或者字符串是什么意思,用户则更不知道它们从何处来,表示什么。另外,如果数值改变,则会在很多地方改变,既麻烦又容易出错,程序的可维护性增强。
JAVA常量的命名规则
(1)在JAVA中,在变量声明中加入final关键字代表常量,加入static关键字代表类变量。一般情况下,我们把static与final结合起来声明一个常量.
(2)尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。
在JAVA接口中声明变量:
由于JAVA接口中声明的变量在编译时会自动加上public static final的修饰符。也就是说,自动声明为全局常量。因而JAVA接口通常是存放常量的最佳地点。
以下两段代码中是等价的
public interface Student
{
public static final String name = "hamber";
public static final int age = 20;
}
*************************
public interface Student
{
String name = "hamber";
int age = 20;
}
更多相关内容 -
JAVA常量
2021-01-07 09:32:47Java 的整型常量值主要有如下 3 种形式。 十进制数形式【……】 54、-67、0 八进制数形式【0……】 Java 中的八进制常数的表示以 0 开头 0125 表示十进制数 85 -013 表示十进制数 -11 十六进制数形式【0x…… / 0X... -
java中定义常量方法介绍
2020-09-04 23:10:03java中只有static和非static变量,这个属于每个类的,如果需要全局变量比如PI(3.14...),可以写一个类Math,定义static变量PI,调用Math.PI就可以使用了,这样就达到我们使用全局变量的目的了 -
java中常量以及常量池
2020-12-22 19:39:531、举例说明 变量 常量 字面量 1 int a=10; 2 float b=1.234f; 3 String c="abc"; 4 final long d=10L; a,b,c为变量,d为常量 两者都是左值;10,1.234f,"abc",10L都是字面量; 2、常量池: ... -
十分钟读懂java常量池优化技术
2019-03-14 15:48:43面试中经常问道的常量池优化技术,Java中的常量值技术是为了方便快捷的创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果没有则创建一个,创建一个比引用一个要耗时),则在需要重复创建相等... -
Java变量常量声明和定义原理解析
2020-08-25 04:44:10主要介绍了Java变量常量声明和定义原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
JavaConstants:测试Java中常量的各种定义和使用方法
2021-01-29 19:52:35Java常量接口反模式 这篇文章最初发布在我的博客上: : 您如何在Java中定义和使用常量? Internet上的大多数建议具有以下意见: 为类中的常量声明public static final 不要将接口用于常量 定义常量的最常见方法... -
一种基于Spring的java程序常量管理思路
2019-03-17 01:09:48NULL 博文链接:https://karlhell.iteye.com/blog/463841 -
深入探索Java常量池
2020-08-28 17:02:26主要介绍了深入探索Java常量池,涉及静态常量池和运行时常量池的介绍,常量池的好处,8种基本数据类型的包装类和常量池等相关内容,具有一定参考价值,需要的朋友可以了解下。 -
java常量类
2022-03-29 20:13:35接口实现java常量类系统里有很多比如订单状态、审核状态;性别、结算方式、交易类型等属性,这些属性只有几个值,一般用0、1、2、3等的数字标识存入数据库,每次对这些属性所属对象的增删改操作,都会在代码里给状态设置值,由于项目是多人开发的,如果每次设置值的时候都直接set 0、1、2,容易出错,而且状态假设不用0、1、2表示了,用1、2、3表示,这时候所有set状态的地方都得改变,维护麻烦。所以用常量表示状态值,甚好。
目前系统里实现常量的方式有三种:
1, 接口常量
2, 类常量
3, 枚举我个人比较喜欢用接口编写常量,下面是一个响应常量示例,包含响应码和响应消息
/** * 响应常量 */ public interface ResponseConstant { /** * 响应码 */ interface code { //成功 int success = 200; //失败 int failure = 400; //错误 int error = 500; //登录状态异常 int loginStatusError = 999; } String success = "请求成功!"; String failure = "请求错误!!!"; String unknownException = "响应异常!!!";//未知异常 String loginSuccess ="登录成功"; String loginFailure ="登录失败"; String operationSuccess ="操作成功"; String operationFailure ="操作失败"; String findSuccess ="查询成功"; String findFailure ="查询失败"; String addSuccess ="新增成功"; String addFailure ="新增失败"; String editSuccess ="编辑成功"; String editFailure ="编辑失败"; String deleteSuccess ="删除成功"; String deleteFailure ="删除失败"; String checkSuccess ="校验成功"; String checkFailure ="校验失败"; String illegal ="不合法数据"; String illegalUser ="不合法用户"; }
-
Java中的字符串常量池详细介绍
2020-09-03 23:28:04主要介绍了Java中的字符串常量池详细介绍,JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池,需要的朋友可以参考下 -
Java字符常量详解
2021-02-12 09:47:42在Java程序中经常会遇到类似于"Hello"这样地字符串,那么这种类型的字符串是Java中是如何存储,下面就来讨论一下字符串常量在内存中的存储方式Java程序在编译时会将程序中出现的常量(包括:char、byte、short、int、...在Java程序中经常会遇到类似于"Hello"这样地字符串,那么这种类型的字符串是Java中是如何存储,下面就来讨论一下字符串常量在内存中的存储方式
Java程序在编译时会将程序中出现的常量(包括:char、byte、short、int、long、boolean和String类型)放到一个叫做常量池的地方。常量池也称为对象池,顾名思义 常量池中存储的是对象。
那么在源程序中检测到"Hello"这样地常量字符串之后,编译器都干了些什么:
首先,在常量池中创建一个String对象,该对象的内存分布如下图:
这里就需要提一下String定义的两个变量:
private final char value[]; //The value is used for character storage
private int hash; //Cache the hash code for the string
其中第一个就是实际存储字符串的数组,所有字符串最终的存储形式都是字符数组。从上图中可以很清晰的看出,实际的字符数组还是存储在堆中,常量池中存储的是String对象。
当执行String str = "Hello",只是将常量池中"Hello"对象的地址赋给了str。
除了上面这个字符串常量的内存模型需要理清之外,String类还有几个很常用的构造函数,也需要对内存模型非常熟悉:
1. public String() {
this.value = "".value;
}
这是默认的构造函数,它将一个空串的字符数组引用赋给了本类的数组数组引用,所以这个String对象中什么也没有当然这样做并没有什么好处,因为String对象一但创建便不可更改其内容(从value的修饰关键字final可以看出)。
2. public String(String original) {
this.value = original.value;
this.hash = original.value;
}
这里只是简单的复制了引用的值,并没有复制引用的内容,它们仍然指向同一个对象。
3. public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}。
Array.copyOf()会将value中的值重新拷贝一份出来,所以this.value和参数中的value完全是两个对象,只不过它们的值相同而已
其余的构造函数也基本类似,大家可自行分析
-
探究Java常量本质及三种常量池(小结)
2020-08-25 14:13:51主要介绍了探究Java常量本质及三种常量池(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
Java中的常量和变量概念及定义.docx
2019-11-20 10:28:38初步整理的java常量变量的概念,十分粗浅,只是将简单的概念整理了出来,在使用过程中还需要慢慢累积和理解其中的更深含义 -
Java中常量定义的几种方式
2021-02-12 09:18:04编程中使用常量的优点:常量提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制并且提高代码的复用率,方便修改,直接通过常量类就能得到。不过我觉得提取出来并不会有利于代码性能提升,因为常量分配在...编程中使用常量的优点:
常量提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制并且提高代码的复用率,方便修改,直接通过常量类就能得到。不过我觉得提取出来并不会有利于代码性能提升,因为常量分配在内存的常亮池中,所以内存不会出现多个相同常量字符串。总的来说提取常量主要是为了避免魔法数字和硬编码等,提高代码的可读性。
1、Interface定义常量
接口常量,写起来方便,看着简洁。 在接口中可以通过内部类来实现接口分类,这样代码就显得更简洁。
/*** @program: java_demo
* @description:
*@author: Mr.Walloce
* @create: 2019/06/18 15:14
**/
public interfaceinConstants {//响应状态成功
public static final Integer REP_STATUS_SUCCESS = 200;//响应状态错误
public static final Integer REP_STATUS_ERROR = 500;public classtestConstanA {public static final String TEST_CONSTANT_A = "a";
}
}
2、Class定义常量
采用“类.常量名”方法进行调用。需要私有化构造方法,避免创建该类的实例。同时不需让其他类继承该类。如果多处需要访问工具类中定义的常量,可以通过静态导入(static import)机制,避免用类名来修饰常量名。普通类中可以通过提供get的方法来提供调用。
/*** @program: java_demo
* @description:
*@author: Mr.Walloce
* @create: 2019/06/18 15:30
**/
public final classClazConstants {//私有构造方法
privateClazConstants() {}public static final int ConstantA = 100;public static final int ConstantB = 200;
}
interface中定义常量方法生成的class文件比第一种方法的class文件更小, 且代码更简洁, 效率更高。
以上接口和普通类实现的常量方式存在一些争议,具体的比较可以参考:Java Interface 是常量存放的最佳地点吗?
3、Enum定义常量
/*** @program: java_demo
* @description:
*@author: Mr.Walloce
* @create: 2019/06/18 15:30
**/
public enumEnumConstants {
MONDAY("MONDAY", "一"),
TUESDAY("TUESDAY", "二"),
WEDNESDAY("WEDNESDAY", "三"),
THURSDAY("THURSDAY", "四"),
FRIDAY("FRIDAY", "五"),
SATURDAY("SATURDAY", "六"),
SUNDAY("SUNDAY", "日");private finalString value;private finalString name;
EnumConstants(String name, String value) {this.value =value;this.name =name;
}publicString getValue() {returnvalue;
}publicString getName() {returnname;
}
}
常量和枚举的区别:
常量中存在的缺点:
① 常量作为参数时,是String,int等弱类型,开发员传入没有在常量接口里定义的值,这个问题无法通过编译器发现;
② 由于开发员可以直接写常量值, 所以不能用==对比,只能用equals对比,不能优化性能;
③ 编译时,是直接把常量的值编译到类的二进制代码里,常量的值在升级中变化后,需要重新编译所有引用常量的类,因为里面存的是旧值。
枚举的有点:
① 私有构造函数,避免被继承和扩展;
② 定义方法的参数时,必须用枚举常量类类型;
③ 常量值地址唯一,可以用==直接对比,性能会有提高;
④ 编译时,没有把常量值编译到代码里,即使常量的值发生变化也不会影响引用常量的类;
根据以上的优缺对比,显然得知枚举的方式更适合项目中使用。但是就以通常的写法来看,枚举的方式是最繁琐的,编程上不够简便。所以综上所述如果就便捷而言推荐使用Class的方式定义常量,若就性能和安全性来说推荐使用枚举的方式定义常量。
参考内容:
-
java学习教程之常量折叠详解
2020-08-26 23:23:40主要给大家介绍了关于java学习教程之常量折叠的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
JAVA中定义常量方法
2021-02-12 09:17:53JAVA中定义常量方法(2013-01-28 14:30:19)标签:it一、常量定义的基本注意事项。在Java语言中,主要是利用final关键字(在Java类中灵活使用Static关键字)来定义常量。当常量被设定后,一般情况下就不允许再进行更改。... -
java常量的定义
2021-02-28 14:38:28一、接口中定义常量:由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量。publicinterfaceConstants{Stringname="111";}publicclassread{publicstaticvoidmain(String[]args){... -
Java动态给类中配置常量赋值的三种方法
2021-02-27 14:51:23}当我们需要给Configuration类中的CONFIG常量第一次使用时动态指定一个值时,而此时我们又不想去修改源代码,那我们有三种方法去实现这种需求。第一种:使用一个static静态代码块来指定,然后在静态代码块中,我们去... -
java常量定义总结 转载
2021-02-12 18:33:04一、常量定义的基本注意事项在Java语言中,主要是利用final关键字(在Java类中灵活使用Static关键字)来进行Java常量定义。当常量被设定后,一般情况下就不允许再进行更改。在定义常量时,需要注意如下内容:一是Java... -
java常量命名规则
2021-02-12 23:10:30java常量命名规则Java常量命名规则如下:规则一.所有单词的字母都是大写,如果有多个单词,那么使用下划线链接即可。如:public static final int AGE_OF_PERSON = 20; //通常加上static规则二.不允许任何魔法值(即... -
Java常量定义方法汇总
2021-03-04 03:24:56Java常量定义方法汇总时间:2017-06-13来源:华清远见JAVA学院实际工作开发中,我们经常会使用到常量。那么Java常量如何定义呢?Java常量定义的规范是什么?定义Java常量又有哪些注意事项呢?今天华清Java学院小编整理... -
JAVA java学习(19)——————java 常量、常量值(字面常量)、常量定义、常用转义字符
2020-10-24 08:32:25在 Java 中使用 final 关键字来修饰常量。 虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。 常量值 常量值又称为字面常量,它是通过数据直接表示的,因此有很多种数据类型,像整型和字符串型... -
java中变量和常量详解
2020-08-28 22:59:33主要介绍了Java中变量和常量详解,具有一定参考价值,需要的朋友可以了解下。 -
java 常量数组
2021-03-02 10:35:04byte是字节数据类型,是有符号型的,占1个字节;大小范围为-128—127 。char是字符数据类型,是无符号型的,占2字节(Unicode码)...所以,若要表示C/C++中的常量数组,要这样写 char[] Encryption_key = new char... -
java常量的声明使用定义等
2021-03-01 07:19:21java常量的声明使用定义等。什么是java常量?java常量的命名规则是什么? 使用java常量的优点有哪些?java常量属于变量的特殊形式。在定义常量的时候要注意的问题:常量要在定义时赋值常量定义之后就不能再改变它的... -
Java 常量 关键字final
2021-03-09 16:45:16利用关键字 final 指示常量public class Contants {public static void main(String[] args){final double CM_PER_INCH = 2.54;double paperWidth=8.5;double paperLength=11;System.out.println("Paper size in ... -
Java常量池详细说明
2021-02-12 11:16:43java常量池技术java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个... -
JAVA常量池中存储的常量是什么
2021-02-26 12:09:29展开全部我当初也存在这样一个疑问,下面我把e69da5e887aa3231313335323631343130323136353331333262356165当初所搜集的一些资料以及自己的理解贴出来给你看看(比较多,需要耐心点看,呵呵):理解Java常量池JVM运行...