javatpoint - method get hashmap java
Breakpoint golpea Hashmap.put() un simple programa Hello World (3)
Aquí está la traza de pila que obtuve al reproducir tu escenario.
Cuando Eclipse inicia la aplicación, simplemente no ingresa a la función Principal . Su clase debe cargarse en la JVM, antes de crear una instancia. Para eso, se utilizará un cargador de clases .
En su caso, URLClassLoader tiene un miembro del tipo URLClassPath que usa un objeto HashMap .
El programa es simple:
public class HelloWorld {
public static void main(String args[]){
System.out.println("Hello World");
}
}
Ahora establezco un punto de interrupción en la función put(K key, V value)
en HashMap.class
public V put(K key, V value) {
if (table == EMPTY_TABLE) {
inflateTable(threshold);
}
if (key == null)
return putForNullKey(value);
int hash = hash(key);
y luego comienzo a depurar HelloWorld.class, se ejecutará en el punto de interrupción en HashMap. ¿Me resulta extraño que la forma en que se puede encontrar con put()
en HashMap?
Intenté HashMap, Hashtable y todos son iguales.
Como ya está utilizando un depurador, también debería poder ver los marcos que muestran dónde se llamó su método de colocación. En IntelliJ se ve así:
Como puede ver aquí, se llamó al método cuando la JVM intenta cargar una determinada clase: aquí está su clase HelloWorld
. Lo hace para llamar al método main
allí.
Desde que JVM acaba de comenzar, debe completar un determinado HashMap<String, URLClassPath.Loader> lmap
en la clase sun.misc.URLClassPath
. Este mapa contiene entradas para los recursos utilizados, como los archivos jar utilizados (por ejemplo, los archivos jar de la instalación de Java) o las ubicaciones .class
como el directorio "bin" de su proyecto. Luego se utilizará durante el tiempo de ejecución de su aplicación.
Pero también se usará un Map
, luego la JVM carga los "permisos" en java.security.Permissions
que tiene el Map<Class<?>, PermissionCollection> permsMap
.
Como puede ver, la llamada del método put
no tiene nada que ver con el contenido de su propia aplicación. Solo se utiliza para cargar elementos básicos para el entorno Java y el tiempo de ejecución de la aplicación.
Por cierto: trate de familiarizarse con su depurador, le ayudará a entender por qué se llaman ciertos métodos y qué clase / método realiza esa llamada.
Es por la forma en que Eclipse lanza las aplicaciones.
La clase Eclipse LauncherHelper
ejecuta la aplicación (HelloWorld) invoca un URLClassLoader
y muchas otras cosas. El URLClassLoader usa HashMaps
, HashTables
, etc.