public static final?static
2016-03-21 15:51
246 查看
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 )的一种体现。
相关文章推荐
- c# winform 窗体最大化后挡住了任务栏
- 【ASP.NET MVC路由测试+性能调试工具】
- spring jar包详解
- HBuilder真机联调iPhone手机设备问题
- MVC5中EF6 Code First启动慢及间隙变慢优化的实践经验(转)
- PHP的Laravel框架结合MySQL与Redis数据库的使用部署
- CentOS下用Tomcat+Zookeeper+Nginx+Solr完美搭建SolrCloud平台
- 二进制小数
- AndFix Eclipse 版
- 课堂作业(求几个数的最大值)
- oracle--varchar2
- 各种插件 各种版本 BootCDN 稳定、快速、免费的开源项目 CDN 服务
- 基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(三)
- MapReduce:详解Shuffle过程
- ViewController的生命周期
- 如何实现在Oracle中应用存储过程调用MatLab函数(2)
- 仿魅族数字图案解锁
- hibernate中插入数据中文乱码
- springMVC—注解开发实例
- 表格排序