Java Konventionen
Java Development Kit (JDK)
Integrierte Entwicklungsumgebungen (IDE)
andere Java Tools
Das Ant Build Tool
Warum Konventionen?
Lesbarkeit
Wartbarkeit
für den Author
für Partner oder Nachfolger
wenn Abweichung, dann Konsistent
Namen für | Wort | Bezeichner beginnen mit | Beispiele |
---|---|---|---|
Variablen, Attribute | Substantive, Adjektive | mit Kleinbuchstaben | done, length, rein, raus |
Konstanten | Substantive, Adjektive | nur Grossbusstaben | ONE, ZERO, BLUE, RED, MIN_WIDTH |
Methoden | Substantive, Adjektive, Verben | mit Kleinbuchstaben | toString(), print(), multiply(), length |
Klassen, Interfaces | Substantive | mit Grossbuchstaben | StringBuffer, PrintWriter |
Pakete | Substantive | nur Kleinbuchstaben, Worttrennung mit '.' | edu.unima.kredel.pk1, edu.cmu.cs.author |
Schreiben Sie bei Bezeichnern, die aus mehreren Worten bestehen,
die ersten Buchstaben der inneren Worte gross:
toString, toByte, drawLine, BitString, BigInteger
.
Benutze die Java Dokumentationskommentare.
Benutze konsistente Einrückungen.
Methoden: maximal eine Bildschirmseite Code.
Dateien/Klassen: maximal 1000 Zeilen Code.
Rechnen Sie mit Ihrer eigenen Dummheit / Beschränktheit
Denken Sie an Testhilfen: if (debug) { ... }
Plausibilitätsprüfungen: assert( a > 0 )
Sehen Sie eine Methode zum Auslesen des Objektzustands vor.
z.B. size(), empty(), full()
Optimieren Sie Programme erst ganz zum Schluss (wenn überhaupt).
Minimieren Sie die *-Form in import
Statements.
Falls mehrere Implementierungen denkbar sind ist ein Interface angebracht.
Objekt-Variablen sollten nie public
deklariert werden.
Initialisieren Sie Variablen immer selbst, verlassen Sie sich nicht auf die Defaults.
public static
Variablen sollen auch immer final
sein.
Verwenden Sie Logger anstatt System.out.println()
:
logger.debug("a = " + a)
,
logger.info(.)
,
logger.error(.)
.
Schreiben Sie sich Unit-Tests. z.B. mit JUnit.
Neben den Java Code Conventions von Sun von gibt es z.B. noch die Java Programming Style Guidelines von Geosoft.
These tools are the foundation of the Java Development Kit. They are the tools you use to create and build applications.
javac | The compiler for the Java programming language. |
java | The launcher for Java applications.
In this release, a single launcher is used both for development and deployment.
The old deployment launcher, jre, is no longer provided. |
javadoc | API documentation generator. Also see Javadoc Enhancements for 1.2 |
appletviewer | Run and debug applets without a web browser. |
jar | Manage Java Archive (JAR) files. |
jdb | The Java Debugger. |
javah | C header and stub generator. Used to write native methods. |
javap | Class file disassembler |
extcheck | Utility to detect Jar conflicts. |
These tools help to create apps that interact over the Web or other network.
rmic | Generate stubs and skeletons for remote objects. |
rmiregistry | Remote object registry service. |
rmid | RMI activation system daemon. |
serialver | Return class serialVersionUID. |
This tool helps to create localizable apps.
native2ascii | Convert text to Unicode Latin-1. |
These tools help you set security policies on your system and create apps that can work within the scope of security policies set at remote sites.
keytool | Manage keystores and certificates. |
jarsigner | Generate and verify JAR signatures. |
policytool | GUI tool for managing policy files. |
These tools are used when creating apps that use CORBA to access databases.
tnameserv | Provides access to the naming service. |
idltojava | Generates .java files that map an OMG IDL interface and enable an application written in the Java programming language to use CORBA functionality. This tool is available for download from the Java IDL web site. Documentation for the idltojava compiler is included in the download. |
Projektgenerierung mit Templates
Visuelle GUI-Gestaltung
Visuelle Interaktionsgestaltung
Visuelle Verwaltung der Projektkomponenten (z.B. Klassenbrowser)
Komfortables Debuggen
Komfortable Schnürung von Endprodukten
Code Generierung aus UML Diagrammen
Visual Cafe (Symantec)
JBuilder, Kylix (Inprise)
Forte for Java, forte4j war Netbeans (Sun)
JDE im Emacs Editor
meist bei (X)Emacs dabei
(JDE)
Übersicht von JavaWorld
ArgoUML, Poseidon (Argo, GentleWare)
Symantecs Visual Cafe 4.0:
Eclipse 2.0:
Forte4Java, Netbeans 3.0:
ArgoUML, Poseidon:
Neben den schon genannten Tools gibt es noch eine Reihe weiterer Java Compiler und Interpreter.
Kaffe OpenVM
komplette Implementierung von Java unter GPL
kommerziell unter Transvirtual
Japhar
Open Source Java VM ohne Bibliotheken
jikes
Java Compiler in C++ geschrieben von IBM, aber OpenSource
GNU Java gcj
Java Compiler und VM von GNU, kann Binaries erzeugen, die ohne VM laufen
Open Runtime Platform (ORP)
Open Source Implementierung der Java Laufzeitklassen
Build:
Vorbereiten, Compilieren, Ausführen, Archive erstellen,
Installieren, Konfigurieren
zur Automation des Build-Vorgangs
kann Make (gnumake, nmake, make) ersetzen
wie Java Plattform unabhängig
Beschreibung als XML-Datei
kennt die Java Sprache
erweiterbar durch eigene Java Klassen
Definitionen in build.xml:
<?xml version="1.0" encoding="iso-8859-1" ?> <project name="pk1" default="usage" basedir="." > <property name="src" value="." /> <property name="build" value="." /> <property name="doc" value="doc" /> <property name="test" value="test" /> <property name="libs" value="/home/heinz/java/lib" /> <property name="log4j" value="${libs}/log4j.jar" /> <property name="junit" value="${libs}/junit.jar" /> <property name="cp" value="${log4j}:${junit}:." /> <property name="version" value="0.1" /> <target name="vorher" > <!-- set properties DSTAMP, TSTAMP --> <tstamp /> <!-- mkdir dir="${test}" /--> </target> <target name="usage" > <echo message="ant <name> cl='cmd'" /> <!--echoproperties /--> </target> <target name="compile" depends="vorher,depend" > <javac srcdir="${src}" destdir="${build}" classpath="${cp}" /> </target> <target name="doc" > <javadoc sourcepath="${src}" destdir="${doc}" private="true" > <fileset dir="." includes="**/*.java" /> </javadoc> </target> <target name="depend" depends="vorher" > <depend srcDir="${src}" destDir="${build}" dump="true" closure="true" > </depend> </target> <target name="test" depends="compile" > <java classname="HalloWelt" classpath="${cp}" fork="yes" /> <java classname="HalloCons" classpath="${cp}" fork="yes" /> </target> <target name="jar" depends="vorher" > <jar jarfile="../jas-${DSTAMP}.jar" > <fileset dir="." includes="**/*.java" /> <fileset dir="." includes="jas-log.html" /> <fileset dir="." includes="build.xml Makefile" /> <fileset dir="edu/jas" /> </jar> </target> <target name="clean" > <delete verbose="true" > <fileset dir="${src}" defaultexcludes="no" includes="**/*~" /> </delete> </target> </project>
Aufruf:
ant target ant compile ant doc
Ergebnis des Compilierens:
Buildfile: build.xml vorher: depend: [depend] Deleted 0 out of date files in 0 seconds compile: [javac] Compiling 4 source files to /v04 BUILD SUCCESSFUL Total time: 3 seconds
Ergebnis des Erzeugens der Dokumentation:
Buildfile: build.xml doc: [javadoc] Generating Javadoc [javadoc] Javadoc execution [javadoc] Loading source file /v04/Konto.java... [javadoc] Loading source file /v04/ComplexTest.java... [javadoc] Loading source file /v04/Complex.java... [javadoc] Loading source file /v04/Card.java... [javadoc] Constructing Javadoc information... [javadoc] Standard Doclet version 1.4.2 [javadoc] Building tree for all the packages and classes... [javadoc] Building index for all the packages and classes... [javadoc] Building index for all classes... BUILD SUCCESSFUL Total time: 2 seconds
Erzeugte Dokumentation.
<project name="pk1" default="target" > ... </project>
genau ein project-Element pro Datei
<target name="compile" depends="vorher" > ... </target>
die target-Elemente definieren die einzelnen Aufgaben
<property name="srcDir" value="." />
die property-Elemente definieren Konstanten, die an anderen Stellen mit
${srcDir}
, ${...}
verwendet werden können
<javac srcdir="${srcDir}" ... />
Es gibt diverse eingebaute Properties, z.B.
ant.java.version
,
ant.file
,
buildt.compiler
<javac srcdir="${src}" destdir="${build}" classpath="${cp}" />
task-Elemente gibt es für alle eingebauten Kommandos und ausführbaren Programme, zum Beispiel
javac
Aufruf des Java Compilers
java
Aufruf des Java Interpreters
javadoc
zum Erzeugen der Dokumentation
delete
zum Löschen von Dateien
jar
zum Erzeugen von jar-Archiven
war
zum Erzeugen von Web-Archiven
junit
Durchführen von Unit-Tests mit Junit
Jede Task / Kommando wird über (viele) Attribute und Inhaltselemente gesteuert.
<fileset dir="." includes="**/*.java" /> <fileset dir="${src}" includes="**/*~" defaultexcludes="no" />
mit fileset
können Teilmengen von Dateien gebildet werden
<classpath> <pathelement location="dir/name.ext" /> <pathelement path="p1,p2,p3" /> </classpath>
mit dem classpath
Element kann der Classpath
Stück für Stück aufgebaut werden
<patternset id="bezeichner" > definitionen </patternset>
patternset
mit dem Attribut id
dient zum Definieren von (Datei-)Mustern.
<patternset refid="bezeichner" />
patternset
mit dem Attribut refid
dient zur Verwendung eines schon definierten (Datei-)Musters.
Eine XML DTD für die Build-Datei und Ant Version kann man sich
mit der Task antstructure
erzeugen.
© Universität Mannheim, Rechenzentrum, 2000-2004.
Heinz KredelLast modified: Sun Jun 20 14:22:55 CEST 2004