‘壹’ java 接口常量反模式及如何定义 Java 常量
其实 Java 的接口常量是一种反模式,理由如下:
1. 接口是不能阻止被实现或继承的,也就是说子接口或实现中是能够覆盖掉常量的定义,这样通过父,子接口(或实现) 去引用常量是可能不一致的
2. 同样的,由于被实现或继承,造成在继承树中可以用大量的接口, 类 或实例去引用 同一个常量,从而造成接口中定义的常量污染了命名空间。(Java 编译器竟然允许使用实例去引用类变量)
3. 接口暗含的意思是:它是需被实现的,代表着一种类型,它的公有成员是要被暴露的 API。而在接口中定义的常量说不上是 API
‘贰’ java中如何定义常量
1、java中使用final和static关键字定义常量。首先打开编辑器,编写代码。当常量作为一个类的变量时,一定要给它赋值,否则编译会失败的。然后定义一个YEAR的常量,用来表示年,一年365天是固定的,这里习惯上大写,然后赋值为365:
‘叁’ 如何实现Java接口中定义的常量
接口中的常量会被实现该接口的类继承并覆盖,用类名.常量命在main()里调用,常量名本身可以在类的其他方法中直接使用
‘肆’ java的接口中为什么只能定义常量不能定义变量
接口是高一级别的抽象。不能被实例化,所以只能定义常量,默认常量是public static final 的
定义了变量需要实例化,赋值才能使用,跟接口违背
‘伍’ Java如何定义常量
java没有叫全局变量的东西(有全局变量还叫OO吗?);原因:Java将所有设计都基于对象的基础上。Java的全局变量只能对一个类内部而言。能够在类内的任何地方使用的变量就是全局变量,而只在某个特定的函数或者局部的程序块内使用的变量则是局部变量。
所以:声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。
使用:java中只有static和非static变量,这个属于每个类的,如果需要全局变量比如PI(3.14...),可以写一个类Math,定义static变量PI,调用Math.PI就可以使用了,这样就达到我们使用全局变量的目的了。
1、将一个 package 中需要的常量集中到一个 XyzConstants 之类的 interface 里声明,
就像普通的 field 那样声明就行了。
复制代码代码如下:
public interface SomeConstants {
public intPORT = 80;
public String IP = "166.111.16.1";
public boolean test = true;
}
就可以。
用到常量的类 implements 这个接口 .. 简单情况这样就行乐。
2、更 formal 的做法是写一个类维护所有的常量,负责从配置文件(例如properties文件或xml文件)读取所有的常量的值。
可以在一个 static {} 块里从配置文件中初始化所有 static 的变量。 这样有利于提高软件的可配置性。改些东东不用动代码,比较好。
最好要有 config Tool 负责写配置文件。
3.其他说明:
定义一个公开类,在里面加static 变量。
复制代码代码如下:
public class infos{
private infos(){
}
public static int PORT = 80;
public static String IP = "166.111.166.111";
public static boolean test = true;
public static final String MYNAME="zzz"; //定义中用了final,就是不能改变的。
}
在别的class中调用这些变量就是: infos.PORT,infos.IP,infos.test,infos.MYNAME
多个class交互时可以通过改变这些变量的值来传递信息。比如 infos.test被别的class改成了false,可能表示某一件事已经失败或已经做过,其它class就可以提前知道这些信息。
其中infos.MYNAME被定义为了final,即成为常量。用final修饰的成员变量表示常量,值一旦给定就无法改变!
‘陆’ Java中定义常量几种方式
采用接口(Interface)的中变量默认为static final的特性
在普通类中使用final修饰变量
采用了Java 5.0中引入的Enum类型。,也就是所谓的枚举类
‘柒’ java接口中可以定义常量变量吗
java接口中的类字段全部为常量,定义的方法全部为抽象方法。
‘捌’ .Java接口中如何定义常量
用final关键字
public static final 类型 常量命 = 值
‘玖’ 在Java接口中怎样访问定义的常量
导入接口所在的包,
直接用接口名.常量名即可访问(如果在同一个包内则不用导入) 实例: (接口中的所有成员域本身都具有public static final属性,所以写不写都没关系)