ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### [初始化接口中的字段](https://lingcoder.gitee.io/onjava8/#/book/10-Interfaces?id=%e5%88%9d%e5%a7%8b%e5%8c%96%e6%8e%a5%e5%8f%a3%e4%b8%ad%e7%9a%84%e5%ad%97%e6%ae%b5) 接口中定义的字段不能是“空**final**",但是可以用非常量表达式初始化。例如: ~~~ // interfaces/RandVals.java // Initializing interface fields with // non-constant initializers import java.util.*; public interface RandVals { Random RAND = new Random(47); int RANDOM_INT = RAND.nextInt(10); long RANDOM_LONG = RAND.nextLong() * 10; float RANDOM_FLOAT = RAND.nextLong() * 10; double RANDOM_DOUBLE = RAND.nextDouble() * 10; } ~~~ 因为字段是**static**的,所以它们在类第一次被加载时初始化,这发生在任何字段首次被访问时。下面是个简单的测试: ~~~ // interfaces/TestRandVals.java public class TestRandVals { public static void main(String[] args) { System.out.println(RandVals.RANDOM_INT); System.out.println(RandVals.RANDOM_LONG); System.out.println(RandVals.RANDOM_FLOAT); System.out.println(RandVals.RANDOM_DOUBLE); } } ~~~ 输出: ~~~ 8 -32032247016559954 -8.5939291E18 5.779976127815049 ~~~ 这些字段不是接口的一部分,它们的值被存储在接口的静态存储区域中。