Wie erkennt die JVM welche class verwendet werden muss?

ArkLut

Aktives Mitglied
Hi,

Ich bin grad vor einem Problem gestanden und hab mir dadurch folgende Frage gestellt.
Ich habe in Package A in JAR 1 folgende Class:
Code:
package org.example.PackageA
import org.example.PackageB.ClassP

public class ClassG {
   int id;
   String name;
   public ClassG() { }
   void doSomething() {
       ClassP cPe = new ClassP()
       int a = cPe.doSomethingSpecial(id, name);   
   }
}

Und dazu habe ich in Jar 2 folgende Class.
Code:
package org.example.PackageB

public class ClassP {

   public ClassP() { }

   public int doSomethingSpecial(int b, String P) {
		return doThis(b, P);   
   }
   
   public int doThis(int b, String P) {
		return b + P.lenght();   
   } 
   
   public int doThat(int b, String P) {
		return b + P.lenght();   
   } 
   
   public int domDiDo(int b, String P) {
		return 1337;   
   } 
}

Das ganze ist kein problem beide Jars am ClassPath und werden geladen.
Wenn class ClassG also die method doSomething() aufruft wird die class ClassP und aus dieser doSomethingSpecial() aufgerufen wird.


Was aber wenn ich die alte Jar 2 durch eines mit folgender ClassP ersetze
Code:
package org.example.PackageB  

public class ClassP {

   public ClassP() { }

   public int doSomethingSpecial(int b, String P) {
		return 3 + 1 + doThat(3,P);   
   }
   
   private void doNothing(int b, String P) {
   } 
   
   private int doThat(int b, String P) {
		return b + P.lenght();   
   }

   public int doNew(int b, int P) {
		return 3 + 1 + doThat(3,P);   
   }   
}

Würde es da zu problemen kommen?
Eigentlich sollte das klappen, da ich ja nur die unveränderte methode aufrufe und die JVM daher keinen grund sieht das abzu lehen.

Dennoch frage ich mich ob die JVM nicht irgend welche sicherheits vorkehrungen hat um so etwas zu verhindern.


PS: Ja ich weis, das man in solchen fällen eigentlich gegen Interfaces Programmiert, und das war auch mein eingangs erwähntes Problem.
 

httpdigest

Top Contributor
Was meinst du genau? Für die JVM sind das doch einfach zwei (völlig) unterschiedliche Programme. Es weiß ja nicht, dass in einer vorherigen Ausführung des Java-Prozesses irgendwann einmal die Jar-Datei eine andere war. Bzw. merkt sie sich ja nicht, dass eine Jar-Datei mit demselben Dateisystempfad im Classpath jetzt eine Klasse mit demselben vollqualifizierten Namen aber unterschiedlichem Inhalt enthält.
Um auf deine Frage zurückzukommen, ob das Austauschen denn in irgendeine Weise ein Problem darstellt: Nein. Die JVM linked anhand des vollqualifizierten Klassennamens (also mit Packagename) und der Signatur (+ Rückgabetyp) der aufgerufenen Methode. Du kannst ziemlich viel austauschen, ohne von Java-Sourcedateien neu kompilieren zu müssen. Siehe: https://docs.oracle.com/javase/specs/jls/se8/html/jls-13.html
 

Barista

Top Contributor
Prinzipiell ist der Vorgang der Prüfung beim Laden einer Klasse in der JVM Specification festgelegt:

https://docs.oracle.com/javase/specs/jvms/se7/html/index.html

https://en.wikipedia.org/wiki/Java_virtual_machine#Class_loader

Ich lese gerade, dass bei der Verifikation nur die Constraints für Class Files allgemein geprüft werden.

Also ist wahrscheinlich eher der Abschnitt Resolution wichtig.

Ich habe diesen jetzt nicht im Detail gelesen.

Ich weiß, dass manchmal beim Bauen (Compilieren) was schief geht und dann gibt es Fehler zur Laufzeit.

Wenn die Namen, Return Typen und Paramter Typen passen, sollte es keine Probleme geben.

Irgendwelche Prüfsummen oder andere Prüfmechanismen gibt es in der JVM nicht.

Sicherer wäre aber, Du kompilierst alle Quelldateien noch mal und ersetzt diese vollständig im Class-/Modul-Pfad für deinen Programmstart.
 

ArkLut

Aktives Mitglied
Denke. eh was ich mir gedacht und erwarted habe ...
war mir aber in dem Moment zu unsicher ob ich irgend etwas übersehe und bei mir nur zufällig klappt ..
Passt eigentlich - ist ja auch das selbe Prinzip bei den Interfaces.

Ja und zum nochmal kompilieren bräuchte man den aufrufenden code :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
O if Abfrage erkennt String nicht Java Basics - Anfänger-Themen 1
W Programm dass Palindrome erkennt Java Basics - Anfänger-Themen 6
Dimax Wie erkennt man dass der gesuchte am Zeilenanfang steht Java Basics - Anfänger-Themen 10
P if - Statement erkennt variable nicht. Java Basics - Anfänger-Themen 12
C Gui- Klasse erkennt Übergabeparameter aus Methode nicht Java Basics - Anfänger-Themen 4
A Erste Schritte Mein Programm erkennt die variable EinAus.readInt nicht Java Basics - Anfänger-Themen 15
J Programm was üer Runtime.getRuntime gestartet wird erkennt String Parameter nicht Java Basics - Anfänger-Themen 0
C Wie erkennt man Sonderzeichen im String? Java Basics - Anfänger-Themen 26
T Config: Projekt erkennt Javaversion nicht Java Basics - Anfänger-Themen 12
O Watch Service erkennt Datei Änderung nicht Java Basics - Anfänger-Themen 0
A Hat jemand einen ratschlag, wie java beim replaceALL eine geschweifte klammer erkennt ? Java Basics - Anfänger-Themen 5
E Input/Output Konsole erkennt meinen Buchstaben nicht Java Basics - Anfänger-Themen 12
D Java erkennt eine deklarierte Variable nicht Java Basics - Anfänger-Themen 2
K Erkennt repaint nicht Java Basics - Anfänger-Themen 1
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
O Erkennt Objekt nach dem Deserialisierung nicht Java Basics - Anfänger-Themen 5
J JDK installieren JCreator erkennt JDK nicht. "Failed to start the following executable" Java Basics - Anfänger-Themen 3
D Variablen Methode erkennt Variable nicht Java Basics - Anfänger-Themen 6
M JDK 1.6 installiert aber PC erkennt es nicht Java Basics - Anfänger-Themen 2
E ActionListener erkennt instanz nicht Java Basics - Anfänger-Themen 9
M java erkennt import-klassen nicht?! Java Basics - Anfänger-Themen 39
E Android: OnClickListener erkennt Buttons nicht Java Basics - Anfänger-Themen 7
L Warum erkennt java meine methode nicht? Java Basics - Anfänger-Themen 17
pun Junit Test erkennt Exception nicht.. Java Basics - Anfänger-Themen 14
H Funktion erkennt das return-statement nicht Java Basics - Anfänger-Themen 12
K Konsolenanwendung - Taschenrechner - erkennt Operanten nicht Java Basics - Anfänger-Themen 5
S Problem mit Eclipse: erkennt vorhandene Main-Methode nicht Java Basics - Anfänger-Themen 13
R JRE 1.5.0 Update 7 Install erkennt nicht Firefox/Netscape Java Basics - Anfänger-Themen 3
D Win98 erkennt keine java Befehle.Umgebungsvariablen falsch? Java Basics - Anfänger-Themen 7
R JBuilder erkennt keine getrennte Klassen. Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
Q SMS basierte Applikationen, welche Programmiersprache? Java Basics - Anfänger-Themen 8
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
H Welche Werte bei Objekterzeugung eingeben? Java Basics - Anfänger-Themen 2
Arita welche Fehler gibt es noch? wie kann ich es noch vervollständigen Java Basics - Anfänger-Themen 15
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
FelixN Teilsummenproblem / welche Datenstruktur Java Basics - Anfänger-Themen 2
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
W Welche Komponente ist geeignet? Java Basics - Anfänger-Themen 1
A Welche Operation ist das? Java Basics - Anfänger-Themen 2
J Welche Java-Version installieren Java Basics - Anfänger-Themen 9
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
K GUI Entwicklung - Welche Richtung passt für euch zum mobilen Zeitalter? Java Basics - Anfänger-Themen 4
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Welche Verteilung? Java Basics - Anfänger-Themen 1
L Welche Methode? Java Basics - Anfänger-Themen 7
O Methoden welche ich implementier Java Basics - Anfänger-Themen 11
M JDK installieren Welche Software bei XP? Java Basics - Anfänger-Themen 5
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
M Welche Entwicklungsumgebung? Java Basics - Anfänger-Themen 32
I Welche Schleife/Bedingung nehme ich her Java Basics - Anfänger-Themen 5
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
K Erste Schritte Java lernen - Welche Bücher? Java Basics - Anfänger-Themen 1
P welche Komponente ist im Layout? Java Basics - Anfänger-Themen 2
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
G Lambda Ausdruck: Welche Methode ist die Richtige? Java Basics - Anfänger-Themen 1
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
G Welche Java-Version auf meinem Rechner? Java Basics - Anfänger-Themen 2
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
A Klassen welche Klassen importiert Eclipse automatisch Java Basics - Anfänger-Themen 2
V welche Methode am besten sich für JPG einfügung in Java anzugewöhnen ? Java Basics - Anfänger-Themen 4
M Welche externen Bibliotheken sind in Java sehr zu empfehlen? Java Basics - Anfänger-Themen 4
I Grafische Benutzeroberflächen - welche Komponente nehme ich am besten? Java Basics - Anfänger-Themen 13
G Welche JAVA IDE? Java Basics - Anfänger-Themen 3
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
K Welche Java Version ist die richtige Java Basics - Anfänger-Themen 3
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
C Datenbank - Welche Java Basics - Anfänger-Themen 5
S Welche Art von Liste? Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
A Wenn genau welche Liste verwenden? Java Basics - Anfänger-Themen 6
T Welche Schleife? Java Basics - Anfänger-Themen 6
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
S Collections Welche Collection ist am geeignetsten? Java Basics - Anfänger-Themen 3
S Input/Output Welche Möglichkeiten Eingabe von User abfragen Java Basics - Anfänger-Themen 5
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
R Welche Datenstruktor für diese Liste? Java Basics - Anfänger-Themen 6
B Erste Schritte Welche Kenntnisse brauche ich für diese Programmidee? Java Basics - Anfänger-Themen 4
P Vererbung herausfinden welche Klasse was erbt Java Basics - Anfänger-Themen 3
K welche art von Liste für TableModell Java Basics - Anfänger-Themen 2
D Welche API für komplexe XML-Struktur? Java Basics - Anfänger-Themen 25
S welche Programmstruktur? Java Basics - Anfänger-Themen 8
M Welche Datenbank? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben