扫码关注官方订阅号
为什么接口的变量一定得是static和final类型的呢?
static
final
在网上找了好久,但是没有找到感觉十分信服的答案.
static final 修饰的不可变的变量,是常量。final表示终态,不可变,不可修改。static表示在类加载到内存的时候就创建。static final修饰的常量,一般用于接口或者数据库连接中,为了就是全局可用,不管哪个包、哪个类都可直接访问,二是一般服务器启动,类加载到内存便无法修改,就拿数据库连接来讲,就确定参数不可动,保证其他程序的修改不会影响数据库链接。 所以当这种常量的值改变后,必须重启服务器,重新加载到内存才能生效。
static final
JDK 规定的 JDK 为什么这么规定呢,这和接口的定义有关,《think in java》中说:“接口”(Interface)规定了可对一个特定的对象发出哪些请求。 即接口只是用来描述一个对象有哪些方法的,所以接口不应该涉及任何数据相关的东西,因此个人认为就算接口中不容许有变量存在都是合理的,但JDK的设计者容许接口中存在public static final的变量也是可以理解的,因为public static final的变量是常量值编译的时候就会替换成对应的常量值,这跟你没有定义常量变量,直接将常量值写在使用常量变量的地方是一样的。
题主可能只是想多了,从interface、static、final的语意思考,其实这个问题并不复杂。 参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3.1
interface
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
static final修饰的不可变的变量,是常量。final表示终态,不可变,不可修改。static表示在类加载到内存的时候就创建。static final修饰的常量,一般用于接口或者数据库连接中,为了就是全局可用,不管哪个包、哪个类都可直接访问,二是一般服务器启动,类加载到内存便无法修改,就拿数据库连接来讲,就确定参数不可动,保证其他程序的修改不会影响数据库链接。所以当这种常量的值改变后,必须重启服务器,重新加载到内存才能生效。
JDK 规定的
JDK 为什么这么规定呢,这和接口的定义有关,《think in java》中说:“接口”(Interface)规定了可对一个特定的对象发出哪些请求。 即接口只是用来描述一个对象有哪些方法的,所以接口不应该涉及任何数据相关的东西,因此个人认为就算接口中不容许有变量存在都是合理的,但JDK的设计者容许接口中存在public static final的变量也是可以理解的,因为public static final的变量是常量值编译的时候就会替换成对应的常量值,这跟你没有定义常量变量,直接将常量值写在使用常量变量的地方是一样的。
题主可能只是想多了,从
interface、static、final的语意思考,其实这个问题并不复杂。参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3.1