『壹』 java常量放在接口中是出于什么目的
常量接口,不是一种推荐的使用方式。
常量接口模式是对接口的不良使用。类在内部使用某些常量,这纯粹是实现细节。实现常量接口,会导致把这样的实现细节泄露到该类的导出API中。类实现常量接口,这对于这个类的用户来讲并没有什么价值。实际上,这样做反而会使他们更加糊涂。更糟糕的是,它代表了一种承诺:如果在将来的发行版本中,这个类被修改了,它不再需要使用这些常量了,它依然必须实现这个接口,以确保二进制兼容性。如果非final类实现了常量接口,它的所有子类的命名空间也会被接口中的常量所“污染”。
在Java平台类库中有几个常量接口,例如java.io.ObjectStreamConstants。这些接口应该被认为是反面的典型,不值得效仿。
『贰』 为什么java接口中定义的变量都是常量(转)
有的人会说了,没有关系,可以通过实现接口的对象的行为来修改接口中的属性。这当然没有问题,但是考虑这样的情况。如果接口A中有一个public访问权限的静态变量a。按照java的语义, 我们可以不通过实现接口的对象来访问变量a,通过A.a = xxx;就可以改变接口中的变量a的值了。正如抽象类中是可以这样做的,那么实现接口A的所有对象也都会自动拥有这一改变后的a的值了,也就是说一个地方改变了a,所有这些对象中a的值也都跟着变了。这和抽象类有什么区别呢,怎么体现接口更高的抽象级别呢,怎么体现接口提供的统一的协议呢,那还要接口这种抽象来做什么呢?所以接口中不能出现变量,如果有变量,就和接口提供的统一的抽象这种思想是抵触的。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。
通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。
对修改关闭,对扩展(不同的实现implements)开放
,接口是对开闭原则的一种体现。
『叁』 Java为什么要定义变量与常量
常量是公共的、静态的、不可改变的,必须初始值(一旦赋值,不可改变)专
例如:属public static final String str = "我终身不可变";
变量是可变的,值不固定的,可分为成员变量、全局变量。
成员变量的方位就是在方法内部,如下代码:
public void add(int i){
System.out.println(i);//i的值是局部的,范围是{开始}结束。
}
全局变量是定义在类内部,方法外部,例如:
public class Person{
private String name; //默认为null
name = "张三"; //改变name的值
}
『肆』 java项目中为什么要用常量,而不推荐直接写
首先你不是一个人在战斗,写成常量方便队友理解;
然后可以避免一些错误,无论是数字还是字符串常量,都可能在不同的地方拼写不一致,导致错误;
还有就是方便修改,比如你有100个地方用这个常量,只改一处就可以;
最后就是对你自己也好,几个月过后可能你想不起来这个常数是什么含义了。
『伍』 Java中提供的常量一般都有什么作用
根据我自己的理解,有这么几个作用:1、将没有人类语言意义的值转换成人类回能看懂的答变量名。例如:Color 类中就有很多常量,如果说 1表示红,2表示绿,3表示蓝。。。那是记不住那么多种颜色的。要是使用 RED、GREEN、BLUE 那显然就好记多了。2、统一和标准化。如果一个类可以以不同的状态出现,那么就需要一个“量”来告诉它要以什么状态呈现,那么这个时候使用自身带的参数无疑是最好了,一方面限定了选择的范围,另一方面它不用告诉外界这里使用的具体是什么值。3、方便类以后的扩展。如 Color 类一开始就是约定了 1表示红、2表示绿这样的方式,后来又发现用 0表示红,1表示绿更合理(这里只是打个比方),那也无法改成这种合理的做法了,因为很多人都已经使用了 1来表示红,如果 JDK 里面改变了,别人使用新版本的 JDK 之后,就会发现原来红色的地方全变成绿色的了。但如果原来是使用常量 RED=1,那么现在只需要改成 RED=0 ,就可以,因为除了这个地方,其它地方出现的都是“RED”,全都跟着变了。这是我的拙见,希望有助你释疑。
『陆』 我想问一下Java声明常量有什么好处呢
比如你的程序很多地方都要用一个字符串常量。。比如你做的一个什么 xx管理系统。。你的程序里面很多地方都要用这个字符串。。你就可以定义个公共的静态常量了。。
这样你其他地方引用这个常量就是了。。主要好处是。。如果将来这个常量变了。。你只需要改一个地方。。
『柒』 java 常量什么怎么定义的
Java 常量,有2种意思,我分别说明:
第1种意思,就是一个值,这个值本身,我们可以叫它常量,举几个例子:
整型常量: 123
实型常量:3.14
字符常量: 'a'
逻辑常量:true、false
字符串常量:"helloworld"
这只是说法的问题,比如7这个数,我们就可以说“一个int类型的常量7 ”
-------
还有另一种,就是楼主问的这种:
第2种意思,表示不可变的变量,这种也叫常量,从语法上来讲也就是,加上final,使用final关键字来修饰某个变量,然后只要赋值之后,就不能改变了,就不能再次被赋值了,据个例子:
final int i = 0;
那么这个i的值是绝对不能再被更改了,只能是0,所以说是 不可变的变量,这句话看似矛盾,其实不矛盾,这句话这样理解:
i就是一个int类型的变量,变量本身是可变的(可被更改值),但是现在加了final,所以不可变了,所以是不可变的变量。
答案补充
常量和static关键字没有任何关系,只要是final的,我们就叫他常量,和static静态的无关,要是没有final,只是static的,那么不能叫做常量,只要是final的,就叫常量,只不过经常的static final一起这样去用
答案补充
只不过如果是final的常量并且同时被static修饰,那么这个常量名所有字母应该全大写,多个单词之间用_分隔开,这是编码规范,只是规范而已,应该这样去做,但是你写也不算错,如:
public final static int WEEK_OF_MONTH = 4;
public final static int DATE = 5;
如果是单独的只是final的,没有static,那么和正常一样,采用“驼峰标识”,首字母和其他字母小写,如果有第二个单词,那么第二个单词首字母大写,以此类推
『捌』 Java中调用常量
问题一
在Java中,对象可以调用方法还可以调用常量,
对象.方法名();
对象.常量名回;
你的代码中,x就相当答于类Constant类对象的属性,而方法就相当于行为,
对象调用自己的行为,自己的属性当然都是可以的,
问题二
你用int s=m.x也是可以的,相当于直接把x的值赋给了变量s
使用final定义变量,就使得变量变成了常量。
我也是一个菜鸟,有些地方讲得不好,甚至有错的地方希望大家给我指正,
这样讲,希望楼主可以听懂,谢谢!
『玖』 为什么要使用常量
首先你没有明白什么是常量
像final double pi=3.14;
这个并不是声明了一个常量,而是声明了一个变量pi,并给他赋值3.14,该变量的值不能被修改。
常量就是固定的数值,在Java中有以下三种常量
1、数值常量,整形和浮点型
2、布尔常量
3、由字符组成的常量
使用常量可以为变量赋值,像
int a =1;//把常量1赋值给变量a
String b ="abc";//反常量字符串abc赋值给变量b
不知道你现在是不是明白了?
final不能被修改,这样可以保证这个数值在以后使用的过程中不会被修改,如果我们知道pi=3.14,我们以为需要使用3.14的时候直接使用pi就可以了
现在假如有一个人他不怀好意,想把这个pi修改成4.14,那么他是修改不成的。。
主要是使用方便,安全
另外final修饰的变量必须被初始化,不然编译会报错的