Frage

Ich habe die Entwicklung von Anwendungen für den Blackberry vor kurzem begonnen. Folglich hat sich auf Java-ME zu springen hatte und das und die zugehörigen Tools zu lernen. Die Syntax ist einfach, aber ich halte zu müssen Probleme mit verschiedenen gotchas und Umwelt.

Zum Beispiel etwas, das mich überrascht und verschwendet viel Zeit ist die Abwesenheit von Immobilien auf einem Klassenobjekt (etwas habe ich angenommen, alle OOP-Sprachen hatte). Es gibt viele Fallstricke. Ich habe an verschiedenen Orten, in denen sie Java-Syntax vs C # zu vergleichen, aber es scheint nicht alle Websites zu sein, die Dinge sagen, wo sie nach, wenn sie Java bewegen.

Die Umwelt ist eine ganz andere Frage alle zusammen. Die Blackberry IDE ist einfach schrecklich. Das Aussehen erinnert mich Borland C ++ für Windows 3.1 - es ist so veraltet. Einige der anderen Themen waren fleckig Intellisense, schwaches Debugging, etc ... Blackberry hat eine Beta-Version der Eclipse-Plugin, aber ohne Debugging-Unterstützung, es ist nur ein Editor mit Phantasie Refactoring-Tool.

Also, jede Ratschläge, wie zu mischen, um Java-ME?

War es hilfreich?

Lösung

Das Kerl hier die inverse machen musste Übergang. So nannte er die Top 10 der Unterschiede von Java und C #. Ich werde seine Themen nehmen und zeigen, wie es in Java gemacht wird:

Gotcha # 10 - Gib mir meine Standardausgabe

!

Um auf die Standardausgabe in Java zu drucken:

System.out.println("Hello");

Gotcha # 9 - Namespaces == Freiheit

In Java Sie haben nicht die Freiheit der Namensräume. Die Ordnerstruktur Ihrer Klasse muss die Paketnamen entspricht. Zum Beispiel kann eine Klasse in dem Paket org.test in dem Ordner sein muss, org / test

Gotcha # 8 - Was super passiert

In Java auf der übergeordneten Klasse verweisen Sie das reservierte Wort super anstelle von base

Gotcha # 7 - Chaining Bauer zu einem Basiskonstruktor

Sie haben dies nicht in Java. Sie haben selbst den Konstruktor aufrufen

Gotcha # 6 - Dagnabit, wie eine Unterklasse I eine vorhandene Klasse

?

Um eine Klasse in Java Unterklasse dies zu tun:

public class A extends B {
}

Das bedeutet Klasse A eine Unterklasse der Klasse B ist. In C # würde class A : B

Gotcha # 5 - Warum Konstanten nicht konstant bleiben

?

eine Konstante zu definieren, in Java das Schlüsselwort final statt const verwenden

Gotcha # 4 - Wo ist ArrayList, Vector oder Hashtable

Die am häufigsten verwendeten Datenstrukturen in Java sind HashSet, ArrayList und HashMap. Sie implementieren Set, List und Map. Natürlich gibt es ein paar mehr. Lesen Sie mehr über Sammlungen hier

Gotcha # 3 - Von Zugriffs- und Mutatoren (Getter und Setter)

Sie haben nicht die Eigenschaften Anlage in Java. Sie müssen erklären, die bekommt und stellt Methoden für sich. Natürlich sind die meisten IDEs automatisch das tun.

Gotcha # 2 - Kann ich nicht außer Kraft setzen

!?

Sie müssen keine Methode virtual in Java deklarieren. Alle Methoden - mit Ausnahme derjenigen, final erklärt -. Kann in Java außer Kraft gesetzt werden

Und die # 1 Gotcha ...

In Java die primitiven Typen int, float, double, char und long sind nicht Objects wie in C #. Alle von ihnen haben eine entsprechende Objektdarstellung, wie Integer, Float, Double, etc.

Das ist es. Vergessen Sie nicht, den ursprünglichen Link , um zu sehen, gibt es eine ausführlichere Diskussion.

Andere Tipps

Java ist nicht signifikant verschieden von C #. Auf rein syntaktischen Ebene, hier sind einige Hinweise, die Sie durch den Tag kann:

  1. In Java Sie zwei Familien von Ausnahmen haben: java.lang.Exception und alles, was von ihm stammt, und RuntimeException. Dies ist sinnvoll, da in Java Ausnahmen sind aktiviert ; Dies bedeutet, dass Sie auch eine throws Anmerkung zu Ihrer Methode Erklärung hinzufügen müssen, um jegliche nicht-Runtime-Ausnahme zu werfen. Folglich Sie jede Methode verwendet werden muß, um diese Ausnahme fangen oder zu erklären, dass es auch die gleiche Ausnahme auslöst. Viele Ausnahmen Sie selbstverständlich ist, wie NullPointerException oder IllegalArgumentException in der Tat ergeben sich aus RuntimeException und Sie müssen daher nicht, sie zu erklären. Checked Ausnahmen sind ein Streitpunkt zwischen zwei Disziplinen, also würde ich empfehlen Sie sie selbst ausprobieren und sehen, ob es hilft oder ärgert Sie. Auf einer persönlichen Ebene, ich denke überprüft Ausnahmen Code Factoring und Robustheit deutlich verbessern.

  2. Obwohl Java Autoboxing für eine ganze Weile unterstützt hat, gibt es noch etliche Unterschiede zwischen C # und Java-Implementierungen, die Sie bewusst sein sollten. Während in C # können Sie austauschbar Verwendung int sowohl als Werttyp und Referenz-Typen, in Java sind sie buchstäblich nicht vom gleichen Typ: erhalten Sie den Grundwerttyp int und die Bibliothek Referenztyp java.lang.Integer. Dies manifestiert sich in zwei gemeinsame Wege: Sie nicht die Werttypen als generische Typparameter verwenden können (so Sie ArrayList<Integer> statt ArrayList<int> verwenden werden) und die Hilfsmethoden (wie parse oder toString) sind statisch im Referenztyp implementiert (so ist es int a; a.toString(); nicht, sondern int a; Integer.toString( a );).

  3. Java hat zwei verschiedene Typen von verschachtelten Klassen, C # hat nur einen. In Java eine statische Klasse, die mit dem static Modifikator wird nicht deklariert ist eine innere Klasse genannt und auch impliziten Zugriff hat auf die Instanz der einschließenden Klasse. Dies ist ein wichtiger Punkt, denn im Gegensatz zu C #, Java kein Konzept der Delegierten hat, und innere Klassen sind sehr oft das gleiche Ergebnis mit relativ geringen syntaktischem Schmerz zu erreichen.

  4. Generics in Java sind in einer radikal anderen Art und Weise als C # implementiert; wenn Generika für Java entwickelt wurden, wurde beschlossen, dass die Änderungen ohne Laufzeitunterstützung rein syntaktischer sein werden, um die Kompatibilität mit älterer VMs zu behalten rückwärts. Ohne direkten Generika in der Runtime-Unterstützung implementiert Java Generics eine Technik Typs namens mit Löschen . Es gibt durchaus ein paar Nachteile Löschung über die C # -Implementierung von Generika zu geben, aber der wichtigste Punkt zu nehmen von diesem ist, dass parametrisierte generische Typen in Java keine unterschiedlichen Laufzeittypen . Mit anderen Worten, nach der Kompilierung der Typen ArrayList<Integer> und ArrayList<String> sind äquivalent . Wenn Sie stark mit Generika arbeiten werden Sie diese Unterschiede viel früher auftreten als man denken würde.

Es gibt meiner Meinung nach die drei schwierigsten Aspekte der Sprache für einen C # Entwickler grok. Anders als das die Entwicklungs-Tools und Klassenbibliothek gibt.

  1. In Java gibt es eine direkte Korrelation zwischen dem Paket (Namespace), Klassennamen und den Dateinamen. Unter einem gemeinsamen Stammverzeichnis werden die Klassen com.example.SomeClass und org.apache.SomeOtherClass wahrsten Sinne des Wortes in com/example/SomeClass.class und org/apache/SomeOtherClass.class jeweils zu finden. Seien Sie vorsichtig versuchen, mehrere Klassen in einer einzigen Java-Datei zu definieren (es ist möglich, Privatunterricht, aber nicht empfohlen), und halten Sie sich an dieser Verzeichnisstruktur, bis Sie sich wohler mit der Entwicklungsumgebung sind.

  2. In Java Sie die Konzepte der Klasse-Pfades und Klasse-Lader haben, die in C # nicht leicht Karte (es gibt groben Äquivalente, die von den meisten .NET-Entwickler nicht im allgemeinen Gebrauch ist). Classpath erzählt die Java VM, wo Bibliotheken und Klassen zu finden sind (beide Ihre und die gemeinsam genutzten Bibliotheken des Systems!), Und Sie können als Rahmen von Klassenlade denken, in denen Ihre Arten leben. Klassenlader verwendet Typen (Klassen-Dateien) von verschiedenen Standorten (lokale Festplatte, Internet, Ressourcen-Dateien, so weiter) zu laden, sondern auch den Zugriff auf diese Dateien zu beschränken. Zum Beispiel wird ein Anwendungsserver wie Tomcat einen Klassenlader für jede registrierte Anwendung oder Kontext; Dies bedeutet, dass eine statische Klasse in Anwendung A nicht das gleiche wie eine statische Klasse in Anwendung B, auch wenn sie die gleichen Namen haben und auch wenn sie die gleiche Codebasis teilen. AppDomains bietet etwas ähnliche Funktionalität in .NET.

  3. Die Java-Klassenbibliothek ist an den BCL ähnlich; viele der Unterschiede sind kosmetische, aber es ist genug, um Sie laufen für die Dokumentation (und / oder Google) immer und immer wieder zu bekommen. Leider glaube ich nicht, dass es etwas gibt, hier zu tun -. Sie müssen nur die Vertrautheit mit den Bibliotheken bauen, wie Sie gehen

Fazit: die einzige Möglichkeit, Java zu grok ist, es zu benutzen. Die Lernkurve nicht steil, aber vorbereitet werden überrascht und sehr oft in den ersten zwei oder drei Monaten der Nutzung frustriert.

Die kurze Antwort ist - es wird sein ärgerlich, aber nicht schwer

.

Java und C # haben alle die gleichen zugrunde liegenden Konzepte, und viele der Bibliotheken sind ganz in der Nähe in der Art, aber Sie gehen zu halten Ihren Kopf über verschiedene Unterschiede stoßen.

Wenn Sie sich über Klasseneigenschaften sprechen, hat Java diejenigen. Die Syntax ist

public class MyClass {
    public static int MY_CLASS_PROPERTY = 12;
}

Ich würde vorschlagen, Sie ernsthaft eine bessere IDE zu bekommen. Jede von Netbeans, Eclipse IDEA, JBuider wird Ihr Übergang viel angenehmer machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top