本篇文章给大家谈谈java常量放在哪里,以及java中常量存在哪里对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、项目中的常量是放在接口里还是放在类里呢?2、java中的String常量是存放在栈中还是堆中?3、java中常量存放在哪4、Java中的常量该放在哪5、Java中,实例中的常量是在堆中还是方法区
项目中的常量是放在接口里还是放在类里呢?
《Java与模式》 ,里面提了一句不建议使用常量接口,甚至举了个java源码的反例。
1、常量类应该是final,不变的,而接口里的参数是final,也是不变的。
那么,看起来接口是放常量没有一定问题,还省去了final的输入,非常的合适。
但是,类是只能单继承的,接口是允许多实现的。
要是类实现的多个接口出现重名的常量,会报错,必须要在实现类明确常量用的是哪个接口的。
虽然这可以说是架构师设计的问题,但是,架构师这么做就违反了依赖倒转原则,这玩意就不细说了。
2、如果某个实现了常量接口的类被修改不再需要常量了,也会因为序列化兼容原因不得不保持该实现,而且非final类实现常量接口会导致所有子类被污染。
这个应该很少人遇到过,不过这是 Effective Java 里面说的。
具体的理解就是,能被序列化的一定是数据,
那么突然改了数据结构,可能导致老版的数据无法被反序列化,而新版的数据会有冗杂的数据,
要是折腾个几次,网络传输协议 这个无法通过时间或者空间提升的玩意就能逼死你了。
3、基于数据只暴露给相应的类的原则,一个类实现一个常量接口,可能只需要其中几个常量,而得到了更多无用的常量,
所以,使用常量接口的时候都是
1.接口是定义类型的,而不应该用于导出常量。常量接口不建议使用,应使用常量类。
2.访问:接口. 常量 , 因为在接口定义 常量 默认是 static 的。
大佬的分析:
java中的String常量是存放在栈中还是堆中?
简单8种数据类型(string,boolean,int,double……)都是放到常量池中
像
string
xxx,ccc;
int
xxx,cccc;
这是java原始数据,是不用开辟新空间
所以放在栈、堆说法是不正确的
但是:放在堆也不是不可以,自己去开辟空间嘛。new
出来
new
string(“xxxxxx”);
这就是放到堆中。
java中常量存放在哪
首先我认为只有作为类属性,加上了static final的,才被称为常量。
可以在三个地方的属性前添加final:
1.作为类属性,加static (通常意义上指的就是这种。在编程规范中要求这种属性名称必须全大写。)
2.作为对象属性,不加static
3.在方法体,或签名上声明。
第一种,static的,作为类信息在类被加载时被存在静态的方法区。
第二种,非static的,作为对象属性,在对象创建的时候被初始化,存在堆里。
第三种,在方法里的。我们知道在方法被调用时会被加载到栈中进行执行,所以写在方法里的变量存在栈中。
Java中的常量该放在哪
Java中的常量只能定义在类之中
常量定义格式:public|private static final 数据类型 常量名称 = 值 (开发中88%通用)
Java中,实例中的常量是在堆中还是方法区
java常量池不在堆中也不在栈中,是独立的内存空间管理。
1. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
2. 堆:存放所有new出来的对象。
3. 常量池:存放字符串常量和基本类型常量(public static final)。
对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。
关于java常量放在哪里和java中常量存在哪里的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。