java 接口的变量为什么是static 和final类型的呢?
巴扎黑
巴扎黑 2017-04-17 13:21:07
[Java讨论组]

为什么接口的变量一定得是staticfinal类型的呢?

在网上找了好久,但是没有找到感觉十分信服的答案.

巴扎黑
巴扎黑

全部回复(3)
阿神

static final 修饰的不可变的变量,是常量。
final表示终态,不可变,不可修改。
static表示在类加载到内存的时候就创建。
static final修饰的常量,一般用于接口或者数据库连接中,为了就是全局可用,不管哪个包、哪个类都可直接访问,二是一般服务器启动,类加载到内存便无法修改,就拿数据库连接来讲,就确定参数不可动,保证其他程序的修改不会影响数据库链接。
所以当这种常量的值改变后,必须重启服务器,重新加载到内存才能生效。

高洛峰

JDK 规定的
JDK 为什么这么规定呢,这和接口的定义有关,《think in java》中说:“接口”(Interface)规定了可对一个特定的对象发出哪些请求。 即接口只是用来描述一个对象有哪些方法的,所以接口不应该涉及任何数据相关的东西,因此个人认为就算接口中不容许有变量存在都是合理的,但JDK的设计者容许接口中存在public static final的变量也是可以理解的,因为public static final的变量是常量值编译的时候就会替换成对应的常量值,这跟你没有定义常量变量,直接将常量值写在使用常量变量的地方是一样的。

阿神

题主可能只是想多了,从interfacestaticfinal的语意思考,其实这个问题并不复杂。
参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3.1

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号