Java中常量为什么定义为public static final?static 定义的变量有什么作用?static 定义的类有什么作用?
简单写写我的一点理解
所有被 final 修饰的量都是常量 也就是该量的值是不变的
,用static主要作用是在类刚加载时就初始化该量的值并给他分配一块共用的内存块存储他的值.
至于static 定义的类有什么作用集自网络比较容易你理解(如下),你也可以百度 static 定义的类 就能得到你要的答案
Java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类
为什么接口要规定成员变量必须是public static final的呢?
答:
首先接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public 的 ,是所有实现类共有的 .否则具体实现类不能使用该变量,则就没有了定义的意义。
static的原因是,假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?所以必须定义成static的,以便区分。
例如一个类实现了两个不同的接口,这两个接口中有相同名字的变量定义,示例代码如下:
public class MultiInmpl implements InTF, InTFOther{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MultiInmpl m = new MultiInmpl();
//如果实现的接口中有同名的变量,则不能引用
System.out.println(m.str);//str在2个接口中都有定义
}
}
以上代码编译错误!!!
Multiple markers at this line
- The field m.str is ambiguous
- Line breakpoint:MultiInmpl [line: 11] - main(String[])
其次,接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别? 又接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。
最后,接口只是对事物的属性和行为更高层次的抽象 。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则(Open-Closed Principle )的一种体现。