你会如何Map在Java中初始化静态?
方法一:静态初始化
方法二:实例初始化(匿名子类)还是其他一些方法?
各自的优点和缺点是什么?
这是一个说明两种方法的示例:
import java.util.HashMap;
import java.util.Map;
public class Test {
private static final Map<Integer, String> myMap = new HashMap<Integer, String>();
static {
myMap.put(1, "one");
myMap.put(2, "two");
}
private static final Map<Integer, String> myMap2 = new HashMap<Integer, String>(){
{
put(1, "one");
put(2, "two");
}
};
}
Run Code Online (Sandbox Code Playgroud) 我可以写:
AClass[] array = {object1, object2}
Run Code Online (Sandbox Code Playgroud)
我也可以写:
AClass[] array = new AClass[2];
...
array[0] = object1;
array[1] = object2;
Run Code Online (Sandbox Code Playgroud)
但我不能写:
AClass[] array;
...
array = {object1, object2};
Run Code Online (Sandbox Code Playgroud)
为什么这会被Java阻止?
我知道如何解决它,但有时会更简单.
例如:
public void selectedPointsToMove(cpVect coord) {
if (tab == null) {
if (arePointsClose(coord, point1, 10)) {
cpVect[] tempTab = {point1};
tab = tempTab;
} else if (arePointsClose(point2, coord, 10)) {
cpVect[] tempTab = {point2};
tab = tempTab;
} else {
cpVect[] tempTab = {point1,point2};
tab = tempTab;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个简单的问题一直困扰着我,因为我学会了如何在Java中使用数组.
private static final long[] reservedFromIps;
static {
reservedFromIps = {0l, 167772160l, 1681915904l,
2130706432l, 2851995648l, 2886729728l, 3221225984l, 3227017984l, 3232235520l,
3323068416l, 3325256704l, 3405803776l, 3758096384l, 4026531840l, 4294967295l};
}
Run Code Online (Sandbox Code Playgroud)
错误是"表达式的非法启动,而不是声明,;预期"
而以下工作正常:
private static final long[] reservedFromIps = {0l, 167772160l, 1681915904l,
2130706432l, 2851995648l, 2886729728l, 3221225984l, 3227017984l, 3232235520l,
3323068416l, 3325256704l, 3405803776l, 3758096384l, 4026531840l, 4294967295l};
Run Code Online (Sandbox Code Playgroud)