recorrer method javatpoint imprimir example create java debugging breakpoints

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.