这是一个静态初始化块:
static {
Calculate add = (a, b) -> a + b;
Calculate difference = (a, b) -> Math.abs(a-b);
Calculate divide = (a,b) -> b!=0 ? a/b : 0;
Calculate multiply = (c, d) -> c * d ;
}
一个类可以有任意数量的静态初始化块,它们可以出现在类主体的任何位置。运行时系统保证按照静态初始化块在源代码中出现的顺序调用它们。
有一种替代静态块的方法,您可以编写一个私有静态方法:
class Whatever {
public static varType myVar = initializeClassVariable();
private static varType initializeClassVariable() {
// initialization code goes here
}
}
您的代码显示错误,因为变量(如add,difference)仅在这个静态{}块下有作用域,并且您不能在其他方法上访问它们,它们也类似于构造函数,所以当您实例化类时,代码也会运行
来源
Oracle