Meine Frage an die Java'isten hier: Wie kann ich mal gut mit Java anfangen? meine anforderungen:

  • free as in speech ist mir atm egal
  • webprogramierung auch egal (ich kann genug php, und RoR schau ich mir dafür als nächstes an)
  • mehr/bessere features wichtiger als stabilität
  • sollte zum "server" und "gui-client" proggen taugen (kein 3D :))
was nehm ich da ?
  • sun java ? bestimmt!
  • 1.5 1.6 oder was?
  • eclipse, netbeans, sun java studio ?
  • was brauch ich da sonst noch ? --JanReitz

Empfehlungen von ThomasBayen:

  • sun java für Deine Anforderungen auf jeden Fall. Alles andere ist zwar politisch korrekter, hilft aber nix, wenn Du auf neueste Features stehst, wie Du sagst. Wie das in ein gentoo reingeht, überlasse ich mal Dir...
  • Wichtig ist, ein Java ab 1.4 zu haben, weil sich da die Sprache selber geändert hat. 1.5 und 1.6 ist keine wesentliche Änderung in der Sprache, sondern hauptsächlich Arbeit an den Bibliotheken. Wenn Du neu isnstallierst nimm das neuste, was Du bekommen kannst, also 1.6.
  • Eclipse rulez, insbesondere wenn Du kompatibel zu uns LUGern bleiben willst. :-) Durch die Offenheit des Projektes tut sich dort viel interessantes im Plugin-Bereich. Ansonsten sagt man, daß netbeans auch nicht schlecht ist. Eclipse wird im Grunde genommen heruntergeladen nud dann in ein Verzeichnis entpackt. Mehr ist da (Java-üblich) nicht zu installieren.
  • Meine Ersten-Schritte-Tutorials waren die von http://java.sun.com/docs/books/tutorial/index.html. Geh die mal durch, dann bekommst du einen guten Überblick.
  • Für GUIs gibt es grundsätzlich die Wahl zwischen Swing (von Sun, ohne grosse Probleme lauffähig) und SWT (von IBM, bekanntestes Beispiel ist Eclipse, muss jeweils dazu installiert werden). Meine Empfehlung ist Swing.
  • Server ist ein weiter Begriff. Sun nennt die Umgebung für Webserver, Webservices, etc. "JavaEE", wofür Du ein besonderes SDK benötigst und einen Webserver wie z.B. Tomcat. Vielleicht reicht Dir aber auch schon RPC für Deinen Server, das sollte mit dem normalen "JavaSE" gehen.

Danke Thomas,

  • die "politische Korrektheit" kommt bei suns java ja wohl in kürze auch :D
  • hab erst 1.6 jdk UND jre installiert (wobei mein gentoo mir auch angeboten hat das jdk auch als jre zu benutzten.... ka, währe das ne gute idee gewesen ?)
  • dann hab ich mir eclipse 3.2.1 geholt, nur hat mein gentoo um das zu kompilieren nen 1.4 blackdown nachinstalliert...
  • laufen lass ich das aber im 1.6er
  • kann es sein das swing schon beim jdk dabei ist? weil ich hab kein extra paket gefunden.
  • das swt ist laut meiner paketverwaltung eine "GTK based SWT Library", das klingt imho gut da ich xfce benutze (gtk basiert) und es rel. schön fände gleiches look and feel zu erzeugen... kann ich das mit swing auch? (die sachen im tutorial sind auf den ersten blick in WinXP gemacht)
  • mit Server meine ich nichts was mit "web" anfängt :), rpc und db backend sollten reichen.
  • -- JanReitz

Antworten von ThomasBayen:

  • Also das "JRE" ist die "Java Runtime Environment", also die Umgebung, die Du zur Laufzeit brauchst. Das ist also das richtige, um Java-Programme auszuführen. Das "JDK" ist das "Java Development Kit", das Du brauchst, um Programme zu entwickeln, d.h. die Sourcen von Bibliotheken etc. sind dabei. Natürlich will man beim Entwickeln immer auch Programme starten, deshalb enthält jedes JDK immer auch ein JRE. Du brauchst also keines mehr dazuzuinstallieren. Auf der anderen Seite ist es kein Problem, mehrere Java-Varianten gleichzeitig installiert zu haben. Man muss halt wissen, mit welcher man sein Programm dann startet. Z.B. in Eclipse kann man so Programme für unterschiedliche JDKs, Sprachversionen, oder VMs gleichzeitig entwickeln.
  • Bei Java ist es üblich, daß Programme "self-contained" sind, also alle benötigten Bibliotheken mit enthalten. D.h. das Eclipse-Archiv, das Du von http://www.eclipse.org herunterlädst, kannst Du in ein Verzeichnis entpacken und dann einfach "eclipse" in diesem Verzeichnis starten. Du musst Dir keine Gedanken um Abhängigkeiten und dergleichen machen und kannst deshalb den Paketmanager Deines Betriebssystems übergehen (was ich sonst auch sehr ungern tue). Du brauchst dann nichts zu kompilieren oder so (Aber was sage ich das einem Gentoo-User...).
  • Ob Du Bibliotheken wie swt über Deine Paketverwaltung installierst oder in Dein Programmpaket packst, musst Du Dir selber überlegen. Ich bevorzuge letzteres ("self-contained" wg. Versions- und Umgebungsabhängigkeiten).
  • Ja, Swing ist Teil der JRE, also immer vorinstalliert. Der ursprüngliche Unterschied in der Philosophie von SWT und Swing ist, daß Swing alle Widgets komplett selber macht (und damit plattformunabhängiger ist) und SWT soweit möglich die Widgets der Plattform benutzt (und damit besser integriert ist). Deshalb gibt es SWT jeweils in einer eigenen Variante für Windows, für GTK, für Motiv, etc... Heutzutage verschwimmen die Unterschiede SWT/Swing. Swing kann über LookAndFeel sehr gut angepasst werden (es gibt also auch ein GTK-L&F). Bei der normalen Einstellung sehen die Programme ohne Änderung unter Windows wie Windows-Programme und unter Linux wie GTK aus). Auch der ursprüngliche Performance-Vorsprung von SWT ist dahingeschmolzen, weil die Swing-Entwickler gut daran gearbeitet haben. IMHO ist das Swing-Objektmodell besser durchdacht (aber ich habe nicht viel SWT-Erfahrung). Meine eigene Meinung ist: Wenn es die Konkurrenz durch SWT nicht gegeben hätte, wäre Swing heute nicht da, wo es ist. Deshalb danke ich SWT, aber benutze Swing. ;-)
  • für RPC schaust Du Dir am besten mal RMI an. Das ist im JavaSE JDK enthalten und dürfte normale Anwendungsfälle abdecken.

JanReitz (erste und dritte einrückungsstufe):
  • Beim zweiten hinschaun seh ich das ich nur den JDK installiert hab... hab ich wohl mit dem virtuellen paket vom jre verwechselt
  • Steht das JRE vom JDK dem standalone JRE in irgendwas nach? läuft z.b. Eclipse (selbst) genauso flott im JRE vom JDK ? weil da würd ich die paar MB lieber investieren.... aber wenns keinen Sinn macht lass ichs
    • Nein, das macht keinen Sinn. Das JDK ist eine Obermenge des JRE --PeterHormanns
      • Bestens.
  • oki dann swing...
  • Bei Java ist es üblich, daß Programme "self-contained" sind das find ich aber n bichen merkwürdig, was ich bei .net schön fand das die Programme quasi von null Programm == null "byte" anfingen. Das man seinem Programm eigene Libs beilegt macht sinn, aber auch externe? naja, soweit ich das gesehn hab ist ja java sogar "in sich" nicht rückwärts kompatibel...
  • das RMI kuck ich mal an, muss mir nur erst noch die unterschiede von .net zu java ankucken, die beiden sehn ja aufn ersten blick recht ähnlich aus, nur haben überall mehr oder minder kleine unterschiede. (keine strings in switches, keine 2 switches auf enums ineinander)
    • Was willst Du denn für Server schreiben? Etwas eigenes für Spiele? Und einen eigenen Client? Dann ist RMI sicher Ok. --PeterHormanns
      • Für Anlagenautomatisierung, die Clients zum bedienen. Den ganzen Stuff hab ich schon in .Net (Clients mit Gtk#) geproggt, und an meinem bisher grössten Werk möcht ich rausfinden wie das selbe in Java geht.
  • ist java.lang.Boolean == boolean ?
    • Nein! Boolean, Integer, String, Long etc. sind richtige Objekte, also von java.lang.Object abgeleitet. Sie dienen als Wrapper für eine Zahl oder einen boolschen Wert, wenn man ein Objekt braucht, z.B. als Schlüssel oder Wert in einer Hashtable. boolean, int und long sind primitive Typen, die in Java keine Objekte sind. Dafür kann man die in Expressions verwenden (mit "+" addieren, mit "<" vergleichen etc). Seit Java5 relativiert sich das etwas: Der Compiler wandelt dann einen primitiven Typ automatisch in ein Wrapper-Objekt um und umgekehrt, wenn erforderlich (Autoboxing heißt das glaube ich). Das lästige "Casten" entfällt damit. Aber es schadet nicht, wenn man den Unterschied verstanden hat ;-) --PeterHormanns
      • schön, dann ists jetzt wohl so wie in .net, da boxen/unboxen sich die Primitiven auch je nach dem was grad gebraucht wird. Gut das ich Java >=5 benutz :D
  • ham wir eigentlich irgendwo n forum ? :D
    • Nein, dafür haben wir ein Wiki! (und eine Mailingliste) --PeterHormanns
      • da wir ja zivilisiert sind... da verpfuscht keine die Posts der anderen. Vieleicht sollten wir die Diskussion in eine extra Seite auslagern.... Erledigt!