2012-03-29 2 views

Antwort

3

Nein. In Java wird dies auf etwas im Bytecode abgebildet, das die JVM versteht (und erzwingt). Der Compiler macht sich das auch selbst zunutze.

Es gibt keine "dynamische Kompilierung/Klassenmanipulation", die auftritt, wenn die Klasse geladen wird, wie Sie es in Ruby oder Perl tun können.

+0

Ok, was ist der Unterschied zwischen "etwas im Bytecode, das die JVM verwendet, um die Methode/Variable/Klasse zu modifizieren" und "eine Methode, die die Methode/Variable/Klasse modifiziert"? Sorry, wenn das ein wenig frech klingt, aber ich kann im Moment keinen wirklichen Unterschied sehen =/ – Jarob22

+0

In Java haben Sie einen Compiler, der Bytecode erstellt, den die JVM ausführt. Es gibt einen Bytecode, um die Klassen- und Methodensichtbarkeit zu kontrollieren. Zur Laufzeit wird die Klasse unverändert aus dem Bytecode geladen. Es wird nicht von dem geändert, was der Compiler erstellt hat. Vergleichen Sie das mit Ruby, wo es keinen echten Kompilierschritt gibt, und das ganze Klassensystem wird dynamisch erzeugt, indem ein "Meta" -Code ausgeführt wird. Zum Beispiel können Sie in Ruby eine Methode zu einer Klasse hinzufügen, während das Programm läuft (und in diesem Prozess werden alle Klassen erstellt). In Java können Sie das nicht tun. Es ist der gesamte Bytecode, der zuvor erstellt wurde. – Thilo

+0

Ahh ich sehe! Danke für die ausführliche und gut erklärte Antwort - sehr interessant :) – Jarob22

1

Nein, in Java sind sie "echte" Schlüsselwörter: Die Modifikatoren enden im generierten Bytecode. Sie sind keine Methoden.

1

Nein, sind sie nicht. Java ist eine kompilierte Sprache, und diese Schlüsselwörter werden vom Compiler mit bestimmten Bedeutungen verstanden, wenn Sie Ihren Code analysieren.

Ruby ist nicht im Vorfeld kompiliert, daher ist eine Klassendefinition in Ruby wirklich eine ausführbare Anweisung, die die Klasse zur Laufzeit definiert. Deshalb sind Zugriffsmodifizierer in Ruby eigentlich Laufzeitmethoden. Das Laden von Klassen in Java ist völlig anders.