你会如何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) {{ ... }}Java中的Double Brace初始化语法()是什么?
有没有办法从1到100打印数字而不使用任何循环或条件,如"如果"?我们可以很容易地使用递归但是又有一个if条件.有没有办法不使用"if"?也没有重复的打印语句,或包含1到100之间所有数字的单个打印语句.
Java中的解决方案更可取.
只是想知道编译代码的原因是这样的:
class MyClass extends AnotherClass {
{
MySecondClass object = new MySecondClass();
object.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
这个代码和构造函数中的代码有什么区别?此代码在对象创建之前执行.
我有一个扩展java.util.HashMap的MyMap类,下面的代码作为一个语句块,但我不明白使用额外的花括号
MyMap m = new MyMap() {
{
put("some key", "some value");
}
};
Run Code Online (Sandbox Code Playgroud)
现在为什么我需要额外的花括号,我不能这样做(但这会引发编译错误)
MyMap m = new MyMap() {
put("some key", "some value");
};
Run Code Online (Sandbox Code Playgroud) 最近,我偶然发现了以下java语法:
ArrayList<String> nodes = new ArrayList<String>(){{add("n1");add("n2");}};
Run Code Online (Sandbox Code Playgroud)
起初,我认为这是一个语法错误,但令我惊讶的是,代码没有给出编译或运行时错误.
我有以下问题:
请指出相关文献.
我最近发现在我看来是静态初始化ArrayList的新语法:
new ArrayList() {{
add("first");
add("second");
}};
我的问题是,那里到底发生了什么?这是定义静态块的快捷方式(我认为它需要static关键字)?或者只是一种定义默认构造函数的方法?别的什么?哪个版本的Java有效?
将非常感谢解释以及进一步阅读的链接.
编辑:我的测试类,用于显示初始化程序块是否在构造函数之前或之后执行.结果显示初始化程序块在其他构造函数代码之前执行:
import org.junit.Test;
public class InitializerBlockTest {
class InitializerTest {
{
System.out.println("Running initalizer block");
}
public InitializerTest() {
System.out.println("Running default constructor");
}
}
class SubClass extends InitializerTest {
{
System.out.println("Running subclass Initializer block");
}
public SubClass() {
System.out.println("Running subclass constructor");
}
}
@Test
public void testIt() {
new SubClass();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Running initalizer block
Running default constructor
Running subclass Initializer block
Running subclass constructor
Run Code Online (Sandbox Code Playgroud) 我在阅读其他一些代码时遇到过这种语法
Map<String, String> map = new HashMap<String, String>() {
{
put("a", "b");
}
};
Run Code Online (Sandbox Code Playgroud)
我知道如何使用,anonymous inner class但这似乎有所不同.有人可以解释一下上面是如何工作的以及它与它有何不同Map<String, String> map = new HashMap<String, String>(); map.put("a", "b");?