Was bedeutet "Java ist tragbar"?

8

Ich bin neu in Java. Ich bin verwirrt über Java-Portabilität.

Wenn Java Sprache portierbar ist, warum enum ist unbekannt in J2ME?

Ich bin ein C ++ Programmierer. In C ++ ist es nicht wichtig, welche Plattform oder Bibliothek verwendet wird. C++ language ändert sich nicht auf allen Plattformen.

Mein Zweck ist die Entwicklung einer Java-Bibliothek, die nur primitive Typen wie int , String oder Array (etwas wie eine Bibliothek für Genetic algorithms ) verwendet. Ich möchte diese Bibliothek in mobilen und Desktop-Anwendungen verwenden. Aber es scheint, dass enum oder einige andere Schlüsselwörter nicht auf allen Plattformen existieren.

Ich glaube, ich habe die Bedeutung von Java portability falsch verstanden.

Was bedeutet "Java ist tragbar"?

    
Amir Saniyan 25.10.2012, 12:23
quelle

7 Antworten

13

Es gibt drei Java-Varianten: ME für Mobilgeräte, SE für Desktops und EE für Unternehmen.

"Java ist portabel" bezieht sich auf die SE-Version. Dies bedeutet, dass Sie Java Bytecode auf jeder Hardware ausführen können, die über eine kompatible JVM verfügt.

Es bedeutet nicht, dass ME gleich SE ist wie EE. EE hat EJBs, aber SE und ME nicht. Das macht sie nicht weniger tragbar.

  

C ++ Sprache ändert sich nicht auf allen Plattformen.

Diese Aussage ist nicht streng korrekt. Microsoft fügt ihrem C ++ Erweiterungen hinzu, die anderswo nicht ausgeführt werden.

ANSI C ++ kann portablen Quellcode bedeuten, solange Sie sich von plattformspezifischen Erweiterungen fernhalten. Es bedeutet nicht tragbaren Bytecode; Sie müssen möglicherweise neu kompilieren und neu verknüpfen.

Sie möchten genetische Algorithmen auf Telefonen ausführen? Ich weiß, dass mobile Geräte ziemlich mächtig geworden sind, aber ich bin dahingehend erzogen, dass GA eine serverseitige Funktionalität ist. Mobile Geräte fühlen sich eher wie eine Sicht für mich an.

    
duffymo 25.10.2012, 12:26
quelle
4

Java ist als "portable language" bekannt, da Java-Code auf allen gängigen Plattformen ausgeführt werden kann. Sobald Sie Ihre Java-Quelle zu "byte-code" .class kompiliert haben, können diese Dateien auf jeder von Java unterstützten Plattform ohne Änderungen verwendet werden, im Gegensatz zu vielen anderen Sprachen, die das Kompilieren von "Maschinencode" für jede Plattform erfordern. z.B eine separate ".exe" für 32-Bit- gegenüber 64-Bit-Umgebungen.

Eine andere Bedeutung von "portable", die hauptsächlich in Windows-Umgebungen verwendet wird, bedeutet, dass die Java-Laufzeitumgebung von jedem beliebigen Ort in Ihrem Dateisystem ausgeführt werden kann und nicht "installiert" werden muss, dh wichtige Informationen enthält in der Windows-Registrierung gespeichert. Dies gilt auch für die meisten Java-Anwendungen und ermöglicht deren Ausführung von verschiedenen Laufwerksbuchstaben aus, z. B. von einem externen Speichergerät wie einem USB-Flash-Laufwerk von einem beliebigen Computer, ohne dass die Anwendung zuerst installiert werden muss.

    
Jainendra 25.10.2012 12:27
quelle
4

Jede Hardware-Architektur hat ihren eigenen, etwas einzigartigen Befehlssatz (add ax, bx ...), wenn Sie einen C ++ - Code erstellen, wandelt der Compiler diesen in einen Maschinencode um, der für das System / die Architektur spezifisch ist. Sie müssen also Ihren Code für verschiedene Architekturen anpassen und erstellen, damit er funktioniert.

Aber was in Java passiert ist, wenn Sie es erstellen, wird es in einen Byte-Code kompiliert (im Gegensatz zum Maschinencode). Und die Java Virtual Machine (JVM) interpretiert den Byte-Code als eine Anweisung, die von der spezifischen Architektur, in der das Programm läuft, verständlich ist. Es gibt JVM für jede wichtige Architektur und jedes Betriebssystem, so dass der Code, den Sie in Windows schreiben, interpretiert und auf MAC-OS oder Linux ausgeführt wird, ohne dass Sie Änderungen auf der Quell-Ebene vornehmen müssen. Deshalb ist Java portabel, und genau hier kommt das Motto Write Once Wherewhere von

    
Yohannis 25.10.2012 12:41
quelle
2

Während die C- und C ++ -Sprachensyntax und -Semantik standardisiert sind, ist das Schreiben einer wirklich plattformübergreifenden Anwendung extrem schwierig, es sei denn, Sie beschränken sich auf extrem einfache Anwendungen.

Es gibt eine Reihe von Gründen auf hoher und niedriger Ebene - von der endianness bis hin zur Interaktion das zugrunde liegende Betriebssystem (z. B. ein Fenster öffnen).

Darüber hinaus kann C / C ++ - Quellcode nur als tragbar betrachtet werden, nicht als Ergebnis der Kompilierung - der resultierende ausführbare Code und die Bibliotheken sind nicht portierbar, mit einem großen Unterschied zwischen Systemarchitekturen (z. B. verschiedene CPUs) und Betriebssystemen / p>

Java ist ein ziemlich erfolgreicher Versuch, beide Probleme zu lösen:

  1. Java kompiliert Code nicht zur Assemblierung, sondern zu einem abstrakteren "Bytecode" - einer Pseudo-Assemblersprache, die von der virtuellen Maschine (JVM) in Assembly "interpretiert" oder "re-kompiliert" wird. Diese Konvertierung ist in der Regel ziemlich effizient, da Bytecode meist eine ziemlich niedrige Sprache ist. Einige Versionen des ARM-Prozessors können nativ Bytecode ausführen. Sobald eine Java-App kompiliert wurde, kann das Ergebnis daher auf einer beliebigen Architektur ausgeführt werden (sofern eine JVM für diese Maschine verfügbar ist)

  2. Java wird mit einer wirklich umfangreichen Laufzeitbibliothek geliefert, die nicht nur eine umfassende Implementierung der gebräuchlichsten Datenstruktur (die in der JVM am effizientesten für eine bestimmte Architektur implementiert ist) bietet, sondern auch eine "Hardware und Software-Abstraktionsschicht "- Sie können beim Codieren auf standardmäßige Weise mit dem System interagieren, es ist der JVM-Job, um es in entsprechende Architektur- und Betriebssystemaufrufe zu übersetzen. Als Beispiel bietet Java das Swing-Framework, mit dem Sie eine GUI auf systemunabhängige Weise erstellen können - dh Sie öffnen ein Fenster, das in Windows- und XWin-Aufrufe in Linux in Win32 / MFC-Aufrufe übersetzt wird.

Gesagt, es gibt verschiedene "Arten" von Java:

  1. JavaSE ist am häufigsten
  2. JavaME ist eine eingeschränkte Version mit einer eingeschränkten Bibliothek und implementiert keine Java5.0-Sprachänderungen
  3. JavaEE für die Verwendung in Unternehmen, wie JavaSE, aber mit einer viel größeren Laufzeit
  4. Android Java, meist kompatibel mit JavaSE, aber mit zusätzlichen Funktionen speziell für Android-Handys

Sie sollten sich jedoch bewusst sein, dass die Java-Architektur so konzipiert wurde, dass sie Interoperabilität ermöglicht, insbesondere um Bibliotheken zu mischen, die für verschiedene Versionen oder sogar verschiedene "Typen"

gebaut wurden     
thedayofcondor 25.10.2012 12:52
quelle
2

Java bietet drei verschiedene Arten von Portabilität:

Quellcode-Portabilität : Ein bestimmtes Java-Programm sollte unabhängig von der zugrunde liegenden CPU, dem Betriebssystem oder dem Java-Compiler identische Ergebnisse liefern.

CPU-Architekturportabilität : Die aktuellen Java-Compiler erzeugen Objektcode (Byte-Code genannt) für eine CPU, die noch nicht existiert. Für jede reale CPU, auf der Java-Programme ausgeführt werden sollen, "führt" ein Java-Interpreter oder eine virtuelle Maschine den J-Code aus. Diese nicht existierende CPU ermöglicht, dass derselbe Objektcode auf jeder CPU läuft, für die ein Java-Interpreter existiert.

OS / GUI-Portabilität: Java löst dieses Problem, indem es eine Reihe von Bibliotheksfunktionen bereitstellt (die in Java-Bibliotheken wie awt, util und lang enthalten sind), die mit einem imaginären Betriebssystem und imaginären Systemen kommunizieren GUI. Genau wie die JVM eine virtuelle CPU präsentiert, präsentieren die Java-Bibliotheken ein virtuelles OS / GUI. Jede Java-Implementierung stellt Bibliotheken zur Verfügung, die dieses virtuelle OS / GUI implementieren. Java-Programme, die diese Bibliotheken verwenden, um den benötigten Betriebssystem- und GUI-Funktionalitätsport relativ einfach bereitzustellen.

Siehe link

    
Gaurava Agarwal 31.05.2016 09:10
quelle
1

bedeutet, dass Ihr Java-Programm, das auf einem Computer geschrieben wurde, auf einem anderen Computer ausgeführt wird, sofern dieser Computer über JVM verfügt.

beziehen Sie sich auf diesen Link .

    
PermGenError 25.10.2012 12:26
quelle
0

Portabilität bezieht sich auf die Fähigkeit, ein Programm auf verschiedenen Rechnern auszuführen. Das Ausführen eines bestimmten Programms auf verschiedenen Computern kann unterschiedlich viel Arbeit erfordern (z. B. keine Arbeit, Neukompilieren oder kleine Änderungen am Quellcode). Wenn Benutzer Java-Anwendungen und Applets als portabel bezeichnen, meinen sie normalerweise, dass die Anwendungen und Applets auf verschiedenen Maschinentypen ohne Änderungen ausgeführt werden (z. B. Neukompilierung oder Optimierung des Quellcodes).

    
GingerHead 25.10.2012 12:32
quelle

Tags und Links