Weil es so schön, nochmal von vorne
Also es gibt ein paar primitive Datentypen (byte, char, short, int, long, float, double, boolean). Diese werden per Wert hin und her geschoben.
Zusätzlich behandelt Java noch Zeichenketten (String) ganz besonders (+-Operator, "..." führt zu neuem String-Objekt, String-Objekte sind unveränderbar).
http://download.oracle.com/javase/tutori…/datatypes.html
Damit man auch primitive Datentypen per Referenz hin und her schieben kann, gibt es noch spezielle Boxing-Klassen die auch ein bisschen besonders behandelt werden, da sie automatisch in ihren repräsentierenden Datentyp umgewandelt werden können und umgekehrt wird auch sowas "Integer x=10;" unterstützt.
Neben diesen Datentypen gibt es auch klassische Arrays. Diese werden by Reference übergeben und haben eine Spezialsyntax zum Initialisieren. (int[] a=new int[10] und int[] a= {21,2,30,4}).
http://download.oracle.com/javase/tutori…lts/arrays.html
Eine Möglichkeit direkt Methoden (function pointer o.Ä.) zu übergeben, gibt es in Java (noch) nicht.
Das sind eigentlich alle Besonderheiten, was Datentypen angeht. Ich finde das hält sich noch ziemlich im Rahmen und lässt sich leicht verinnerlichen... Mit diesen Datentypen, kann man seine Klassen zusammenbasteln, deren Instanzen immer per Referenz übergeben werden. Alle Klassen erben von der Object-Klasse. Für Klassen gibt es ein paar Spezialfälle (enums, abstract, nested classes)
http://download.oracle.com/javase/tutori…vaOO/index.html
Es gibt in Java keine Mehrfachvererbung. Es gibt allerdings "interface" Definitionen, die definieren, dass Klassen bestimmte Methoden implementieren und auch als Typ für eine Referenz gewählt werden können.
http://download.oracle.com/javase/tutori…andI/index.html
Es gibt in Java keine Templates. Als ein bisschen was in der Richtung kann man generische Klassen definieren.
http://download.oracle.com/javase/tutori…rics/index.html
Es gibt keine Namespaces dafür sog. Packages.
http://download.oracle.com/javase/tutori…kage/index.html
Exception-Handling gibt es ähnlich wie in C++.
http://download.oracle.com/javase/tutori…ial/exceptions/
Es gibt noch kleinere Syntaxabkürzungen wie
for(T x:collection/array of T){
//mach was mit x
}
oder
int test=a<b?10:12; //if(a<b) test=10; else test=12;
Zu guter letzt gibt es noch die Möglichkeit zur Reflexion (Analyse der Java Klassen zur Laufzeit) und sog. Annotationen. Das sind beides sehr mächtige Werkzeuge, die ich nicht missen möchte.
http://download.oracle.com/javase/tutori…nnotations.html http://java.sun.com/developer/technicalA…ALT/Reflection/ Im Zusammenhang damit sollte man sich auch ClassLoader mal anschauen.
Außerdem darf man javadoc nicht vergessen, sozusagen ein eingebautes doxygen.
In Java 7 gibt es Anfänge eines RAII Konzepts:
http://java.dzone.com/articles/java-7-new-try-resources
Die großen Plattform APIs von Java solltest du dir auch mal anschauen.
Statt DLL Hell gibt es in Java die JAR Hell
ich komme mit JAR Hell aber besser klar
.
Als Alternative zu Make o.Ä. gibt es für Java Sachen wie ant oder maven (netbeans unterstützt beides sehr gut mit GUI).
Java ist eine meiner Lieblingssprachen. Nur ActionScript3 und C# habe ich bisher als ähnlich angenehm in der Benutzung empfunden.
Wenn du etwas tiefer in Java einsteigst lohnt es sich bei der Entwicklung von Anwendungen immer mal nach Open Source Bibliotheken zu suchen. Da gibt eine schiere Menge hochqualitativer Bibliotheken in deren Code man sich dank der sehr breiten Einhaltung von Konventionen
http://www.oracle.com/technetwork/java/c…toc-136057.html schnell einarbeiten kann.
Momentan gefällt mir auch für kleinere Projekte besonders
http://code.google.com/p/google-guice/ Ein leicht zu benutzendes Dependency Injection Framework.
Als kostenlose IDE gefällt mir Netbeans am besten, obwohl ich auch regelmäßig mit Eclipse arbeite. Netbeans empfinde ich wesentlich aufgeräumter.
Herzlich Willkommen in der Java Welt