java是解释性语言还是编译性语言?

  • Java既有解释执行,.java->.class-> 机器码
    • 编译完成后JVM一定要把字节码解释成机器码,才能被操作系统执行
  • 也有编译执行
    • 我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行了。

Java中只有值传递的,没有引用传递

Arrays.asList()

ConcurrentModificationException

jdk集合并发修改的异常
This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible.

For example, it is not generally permissible for one thread to modify a Collection while another thread is iterating over it.
下面这个操作就会触发ConcurrentModificationException

  1. Map<Integer, String> hashmap = new HashMap<>();
  2. hashmap.put(1, "One");
  3. hashmap.put(2, "Two");
  4. hashmap.forEach((k,v)->{
  5. hashmap.remove(1);
  6. });