Heim  >  Artikel  >  Backend-Entwicklung  >  Einige Unterschiede zwischen Java- und .NET-Entwicklungsprozessen

Einige Unterschiede zwischen Java- und .NET-Entwicklungsprozessen

巴扎黑
巴扎黑Original
2016-12-19 16:55:101240Durchsuche

Ich entwickle seit langem mit der Sprache C# unter der .NET-Plattform. Vor kurzem wurde mit der Entwicklung des Projekts mit JAVA begonnen. Dieser Artikel nutzt einige meiner eigenen Gefühle während des Entwicklungsprozesses, um über die Unterschiede zu sprechen Aufgrund der Erfahrung und des Wissens kann dieser Artikel nur die Unterschiede zu den eher oberflächlichen und häufig verwendeten Funktionen erklären.

Ich verwende VS2008 und VS2010, um .NET-Programme zu entwickeln, und MyEclipse8.5, um JAVA-Programme zu entwickeln. Hier ist eine kurze Erklärung der Unterschiede in IDE, Sprache und Plug-Ins.

Unterschiede in IDEs:

Mein erster Eindruck ist, dass MyEclipse sehr praktisch zum Schreiben und Anzeigen von Code während des Entwicklungsprozesses ist und sogar über viele Funktionen verfügt, die VS nicht bietet Listen Sie wie folgt einige der Unterschiede auf, auf die Sie jetzt gestoßen sind:

1 Nachdem ein Variablenfeld ausgewählt wurde, wird die Hintergrundfarbe anderer in diesem Feld verwendeter Felder automatisch hervorgehoben. Damit Sie leicht erkennen können, wo diese Variablen verwendet werden, gab es diese Funktion vor VS2010 nicht.

2. Doppelklicken Sie bei einem Codesegment in geschweiften Klammern hinter das Symbol, um das Codesegment innerhalb der Klammern automatisch auszuwählen. Dadurch ist es nicht einfach, ein Codesegment anzuzeigen .

3. MyEclipse hat keine Codesegmentbereiche wie #region und #endregion in einer Methode oder Klasse, Sie können den Codeausschnitt #endregion falten Dieser Effekt kann mit einigen anderen Plug-Ins erzielt werden.

4. Die Tastenkombinationen Strg+Alt+T und Strg+Alt+R sind in MyEclipse sehr nützlich, um schnell nach Typ oder Ressource zu suchen und Dateien schnell zu finden oder Dateien durch Fuzzy-Matching, und VS hat eine solche Funktion nicht gefunden.

5. Die intelligente Erinnerung von MyEclipse ist standardmäßig relativ einfach. Sie wird erst dann automatisch daran erinnert, wenn Sie im Fenster „Einstellungen“ > „Java-Editor“ klicken. >Registerkarte „Inhaltsunterstützung“ ist auf .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ eingestellt, aber im Gegensatz zu VS wird bei der Eingabe eines Kleinbuchstabens „a“ beachtet , können Sie auch Variablentypen, die mit einem großen A usw. beginnen, intelligent auffordern.

6. MyEclipse stößt häufig auf Codierungsprobleme, was für Anfänger sehr unpraktisch ist. Es ist in zwei Situationen unterteilt: verstümmeltes Öffnen von Dateien und verstümmelter chinesischer Inhalt beim Senden von Anfragen. Wenn der Arbeitsbereich mehrere Projekte umfasst, ist es möglich, dass ein Projekt in GBK und das andere in UTF-8 codiert ist, was dazu führt, dass eine einzelne Datei verstümmelt wird. Legen Sie die gesamte Projektcodierung unter Fenster->Einstellungen->Allgemein fest -> Wählen Sie die Einstellung „Andere“ unter „Textdateikodierung“ in Workspace aus. Klicken Sie für ein separates Projekt mit der rechten Maustaste auf „Eigenschaften“ > „Ressource“ im Projekt und wählen Sie die Einstellung „Andere“ unter „Textdateikodierung“ aus. Die Standardkodierung für übermittelte Anforderungsinhalte wie JSP ist ISO-8859-1, was häufig zu verstümmelten Zeichen führt. Sie können die Kodierung verschiedener Dateien unter Text unter Windows->Einstellungen->Allgemein->Inhaltstypen festlegen. VS weist jedoch nicht so viele Probleme mit verstümmeltem Code auf, und es ist für Anfänger nicht einfach, Probleme mit verstümmeltem Code zu haben.

7. MyEclipse führt häufig zu einem Speicherüberlauf und anderen damit verbundenen Speicherproblemen, was auch für Anfänger verwirrend ist. Dies wird häufig durch eine unzureichende Standardspeicherkonfiguration in myeclipse.ini verursacht -Xmx912m gibt an, dass der maximal zugewiesene Heap-Speicher 912 MB beträgt, und -XX:MaxPermSize=556m gibt an, dass der maximal zugewiesene Nicht-Heap-Speicher 556 MB beträgt. Dadurch steht MyEclipse-Speicher zur Verfügung. Es kann jedoch sein, dass die JVM-Speicherauslastung überläuft. Wählen Sie unter Fenster->Einstellungen->Java->Installiertes JRE das Standard-JDK aus , und in Standard konfigurieren Sie einfach relevante Parameter in VM-Argumente. Wenn es sich bei dem von Ihnen ausgeführten Programm um ein WEB-Programm handelt, müssen Sie möglicherweise auch die Speichereinstellungen von Tomcat festlegen. Wählen Sie unter Fenster->Einstellungen->MyEclipse->Server->Tomcat die entsprechende Version von Tomcat aus Wählen Sie dann den darin enthaltenen JDK-Knoten aus. Legen Sie die Speicherparameter unter Optionale Java-VM-Argumente fest. Relativ gesehen weist VS keine derart problematische Verarbeitung auf, und im Allgemeinen besteht keine Notwendigkeit, Speicherparameter festzulegen.

8. Beim Debuggen von Code ist VS leistungsfähiger als MyEclipse. Beide können die Werte vorhandener Variablen an Haltepunkten ändern, aber VS macht dasselbe, wenn Sie Variablen in das Feld für temporäre Variablen eingeben Fordern Sie den von Ihnen geschriebenen Code intelligent auf, aber MyEclipse kann Sie nicht automatisch daran erinnern, und VS kann Haltepunkte auf bereits ausgeführten Code ziehen. Diese Funktion ist sehr leistungsstark und nützlich beim Debuggen von Problemen, MyEclipse kann jedoch keine Haltepunkte ziehen.

9. Mit der Standardtaste Strg + Linksklick können Sie die Definition des Felds oder Typs schnell finden. Es ist dasselbe wie F3, aber ich denke, Strg + Linksklick ist während des Entwicklungsprozesses praktischer und schneller Die standardmäßige F12-Positionierung in VS fühlt sich bequemer an, und nach der Integration in Spring können Sie mit Strg+Linksklick den Unterimplementierungscode der injizierten Schnittstelle lokalisieren, was die Anzeige des Implementierungscodes erleichtert. VS bietet diese Funktion nicht, wenn die Spring.net-Integration verwendet wird.

10. Mit der rechten Maustaste auf die Quelle in MyEclipse können Sie viele praktische Funktionen nutzen, z. B. das Generieren von Gettern und Settern sowie das Erben von Methoden der übergeordneten Schnittstellenklasse.

11. Das JAVA-Projekt wird durch Importieren geöffnet, nicht durch Doppelklicken auf die .sln- oder .csproj-Datei wie in VS, um das gesamte Projekt zu öffnen. Aber nachdem Sie es einmal geöffnet haben, werden beim nächsten Öffnen von MyEclipse automatisch die geöffneten Projekte geladen. VS kann jeweils nur eine Lösung öffnen und die Lösung umfasst verschiedene Projekte. Wenn eine neue Lösung hinzugefügt wird, muss diese beim nächsten Mal separat geöffnet werden.

12. MyEclipse importiert ein neues Projekt. Wenn die JRE-Version unterschiedlich ist, müssen Sie die lokale JRE-Version verwenden. Klicken Sie mit der rechten Maustaste auf das Projekt. >Bibliotheken->Java Build Path Ändern Sie die JRE-Version, aber manchmal treten Kompilierungsprobleme auf. Der Grund dafür ist, dass die JDK-Version nicht für die Kompilierung ausgewählt ist. Klicken Sie mit der rechten Maustaste auf das Projekt->Build-Pfad->Build-Pfad konfigurieren. >Java Compiler zum Ändern der Compiler-Konformitätsstufe. Für VS ist es bequemer, den niedrigeren Versionscode des höheren Versionscodes zu öffnen und dieser wird automatisch aktualisiert, oder Sie können manuell auswählen, unter welcher Version von .NET kompiliert werden soll.

13. MyEclipse klickt doppelt auf die Tab-Leiste der Datei im Codebearbeitungsfeld, um zwischen der Vollbildanzeige des Codebearbeitungsblocks und der Multibox-Anzeige zu wechseln Wenn Sie neben der Schaltfläche „Paket-Explorer“ einen Link-Vith-Editor verwenden, können Sie den Speicherort der Datei im Paket schnell finden. Nach einem Rechtsklick auf eine Datei in VS können Sie diese jedoch direkt öffnen entsprechendes physisches Dateiverzeichnis. Diese Funktion ist in MyEclipse nicht vorhanden.

Sprachunterschiede:

Java-Sprache und C#-Sprache sind sehr ähnlich, obwohl es viele interne Unterschiede gibt und die bereitgestellten APIs ebenfalls unterschiedlich sind. , aber die häufig verwendeten Ideen für die Entwicklung eines bestimmten Funktionspunkts sind ähnlich. Da ich während des Entwicklungsprozesses nicht viel mit relativ neuen Technologien und Funktionen in Berührung komme, sind mir folgende Unterschiede aufgefallen:

1. Der Name des Java-Pakets entspricht eins zu eins dem physischen Dateispeicherort. Der Namespace in C# kann nach Belieben geschrieben werden, und die kompilierte Assembly kann auch nach Belieben geändert werden mit dem Namensraum. Das ausgegebene JAR-Paket hat die gleiche Bedeutung.

2. Eine JAVA-Datei kann nur eine öffentliche Klasse haben, während C# mehrere öffentliche Klassen in einer Datei haben kann.

3. Wenn ein JAR-Paket gefunden wird, zeigt Java die Methodenfeldbeschreibung des neuen JAR-Pakets an. Um die Beschreibung des Schnittstellenaufrufs anzuzeigen, ist ein separates Dokument erforderlich Es sieht nicht intuitiv aus, aber wenn aus dem Quellcode ein JAR-Paket generiert wird, können Sie den Quellcode des Pakets während des Debuggens leicht sehen. Solange Sie über eine DLL-Datei in .NET verfügen, können Sie die Aufrufparameter der Methodenmetadaten leicht erkennen. Um jedoch die detaillierte Beschreibung der Parameter anzuzeigen, benötigen Sie weiterhin das der DLL entsprechende XML-Dokument.

4. Für die WEB-Entwicklung werden Filter, Servlet und Listener in Java sehr häufig verwendet, um einige Funktionen zu implementieren, aber Filter kann den Umfang der Anforderung festlegen Das Modul ist eine globale Steuerung. Das Servlet entspricht einem bestimmten Handler, der benutzerdefinierte Anforderungen verarbeiten kann, um einige Funktionen auszuführen. JAVA integriert jedoch einige Standard-Listener, die beim Start der WEB-Anwendung gestartet werden. Ihr spezifischer Ausführungsprozess ist: Wenn das WEB gestartet wird, wird die ContextInitialized-Methode des Listeners -> die Init-Methode aller Filter (unabhängig vom Wert der Filterzuordnung) -> die Init-Methode aller Servlets mit größerer Last beim Start konfiguriert größer oder gleich 0 (Unabhängig vom Wert der Servlet-Zuordnung) lautet die spezifische Anforderung: Init des spezifischen Servlets (wird nur einmal ausgeführt) ->Filter doFilter (Anforderung des Werts der konfigurierten Filterzuordnung) -> Servlet-Dienst; Die endgültige Ausführungsreihenfolge der Website-Freigabe lautet: Filter destroy-》Listener contextDestroyed.

5. Wenn das Schlüsselwort Final in Java einem Feld zugewiesen wird, bedeutet dies, dass das Feld nicht geändert werden kann und dass es nicht im Konstruktor geändert werden kann. Dies ähnelt in gewisser Weise dem const von C#, aber const ist statisch Standard. Es ähnelt dem Readonly von C#, kann jedoch im Konstruktor geändert werden. Wenn es als Modifikator einer Methode verwendet wird, ähnelt es der versiegelten Klasse von C# und kann nicht überschrieben werden.

6. Es gibt keinen statischen Konstruktor in Java, Sie müssen einen statischen Codeblock, static{...}, verwenden und nur den Inhalt darin eingeben hat einen statischen Konstruktor.

7. Es gibt das Konzept des konstanten Pools in JAVA, das ein anderer Bereich als Heap und Stack ist. Obwohl String über einen String-Aufbewahrungsmechanismus wie C# verfügt, unterscheidet es sich von .NET. Daher ist es am besten, in Java Gleichheit für den String-Vergleich zu verwenden, da sonst Probleme auftreten können. Beispielsweise befinden sich die Zeichenfolgen „a“ + „b“ im Konstantenpool, wenn sie mit „ab“ verglichen werden. „a“ + b ist jedoch eine Variable und wird auf der Seite platziert Heap. Wenn Sie immer noch == „ab“ verwenden, wird die Beurteilung „falsch“ zurückgeben. Versuchen Sie daher, Gleichheit zu verwenden, um Zeichenfolgen in JAVA zu beurteilen. Dieses Problem tritt jedoch nicht in .NET auf. Die berechneten Zeichenfolgen führen zu gleichen Ergebnissen wie ==.

8. Solange in Java jede Datei über einen Main-Methodeneintrag verfügt, kann sie ausgeführt werden. In .NET muss jedoch der Projekttyp in eine Konsolenanwendung geändert werden, und dann gibt es eine Hauptmethode, um als Laufträger zu dienen.

9. Der Zahlenbereich des Byte-Typs ist unterschiedlich und liegt in .NET im Allgemeinen zwischen 0 und 255. und dann werden die letzten beiden 8 Bits genommen, sodass ihre Werte gleich sind, was die synchrone Verschlüsselung, Entschlüsselung oder verwandte Verarbeitung erleichtert

10. In Java wird empfohlen, get und set zu verwenden Methoden zum Zuweisen und Abrufen von Werten zu internen Variablen können über das Feld „get“ abgerufen werden. Nach vs2008 können Sie „set“ mithilfe der Syntax automatisch abrufen Äquivalent zum Abrufen und Festlegen interner Felder.

11. JAVA-Dateien werden nach dem Speichern standardmäßig automatisch kompiliert, aber das liegt auch daran, dass jede Java-Datei in eine Klassendatei kompiliert wird Da es sich jedes Mal um ein Projekt handelt. Eine DLL-Datei. Wenn Sie eine CS-Datei speichern und kompilieren, ist die Arbeitslast zu groß und beeinträchtigt die Entwicklungsgeschwindigkeit.

12. Für diejenigen, die es gewohnt sind, Listensammlungen in C# zu verwenden, wird die neue Liste bereits einen Fehler melden, und ihre Generika sind auch anders als die CLR-Schicht Ja, JAVA-Generika werden von der JVM nicht unterstützt, daher gibt es relativ keine Leistungsverbesserung.

13. Die Standardmodifikatoren in JAVA sind innerhalb des Pakets sichtbar (entsprechend dem gleichen Ordnerverzeichnis, nicht unter dem großen JAR-Paket des Projekts). .NET, nur sich selbst und Unterklassen sind sichtbar. Der Standardmodifikator einer Klasse in .NET ist „Internal“, auf den innerhalb der Assembly zugegriffen werden kann. Methoden und Felder sind standardmäßig privat, was sich von der Sichtbarkeit im Standard-JAVA-Paket unterscheidet.

http://lawson.cnblogs.com/

Unterschiede bei Plug-Ins:

1. MyEclipse selbst ist ein Plug-In, das eine große Anzahl von Plug-Ins integriert Open-Source-Frameworks, während VS Es ist eine einheitliche IDE von Microsoft. Um andere Open-Source-Plug-Ins verwenden zu können, müssen Sie diese separat herunterladen und konfigurieren.

2. Neben JAX-WS, das nur im Paket javax.jws enthalten ist, gibt es auch eine eigene Version der Java-Webservice-Spezifikation Die Quellimplementierungen von Axis und XFire umfassen Axis1 und Axis2. Die verschiedenen Implementierungsmethoden sind jedoch unterschiedlich. Beim gegenseitigen Aufruf von Webservices treten im Allgemeinen einige Probleme auf. Java hat strengere Formatanforderungen für wsdl.

Das Obige ist das Ergebnis meiner jüngsten Analyse und Zusammenstellung der Probleme, auf die ich während des Entwicklungsprozesses gestoßen bin. Die Abdeckung der relevanten technischen Punkte ist begrenzt Die Ergebnisse sind möglicherweise nicht vollständig korrekt. Bitte korrigieren Sie mich, wenn es Probleme gibt.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn