相关疑难解决方法(0)

如何初始化静态地图?

你会如何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 collections dictionary initialization idiomatic

1084
推荐指数
20
解决办法
82万
查看次数

280
推荐指数
8
解决办法
8万
查看次数

显示从1到100的数字,没有循环或条件

有没有办法从1到100打印数字而不使用任何循环或条件,如"如果"?我们可以很容易地使用递归但是又有一个if条件.有没有办法不使用"if"?也没有重复的打印语句,或包含1到100之间所有数字的单个打印语句.

Java中的解决方案更可取.

java loops

33
推荐指数
18
解决办法
10万
查看次数

实例初始化器和构造函数之间有什么区别?

只是想知道编译代码的原因是这样的:

class MyClass extends AnotherClass {
  {
    MySecondClass object = new MySecondClass();
    object.doSomething();
  }
}
Run Code Online (Sandbox Code Playgroud)

这个代码和构造函数中的代码有什么区别?此代码对象创建之前执行.

java

20
推荐指数
2
解决办法
5255
查看次数

Java中的块语句

我有一个扩展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 block

7
推荐指数
1
解决办法
4135
查看次数

java中ArrayList声明中的奇怪语法

最近,我偶然发现了以下java语法:

ArrayList<String> nodes = new ArrayList<String>(){{add("n1");add("n2");}};
Run Code Online (Sandbox Code Playgroud)

起初,我认为这是一个语法错误,但令我惊讶的是,代码没有给出编译或运行时错误.

我有以下问题:

  • Java中的此类声明是否有标准定义和文档?
  • 编译此代码时会发生什么?

请指出相关文献.

java syntax arraylist

6
推荐指数
1
解决办法
125
查看次数

什么{{ArrayList初始值设定器上的语法'确​​实如此

我最近发现在我看来是静态初始化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)

java arraylist static-initializer

5
推荐指数
1
解决办法
1195
查看次数

理解这种语法有困难

我在阅读其他一些代码时遇到过这种语法

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");

java

3
推荐指数
1
解决办法
119
查看次数