publish and discover academic work ...

Arbeit mit Java in Konsole

Heute findet sich kein Programmierer, der ausschließlich mit der Konsole arbeitet. Ich habe sogar ein paar getroffen, die ganz ehrlich denken, dass ein Java Programm nur in einer IDE kompiliert werden kann. Ich möchte in diesem Artikel daran erinnern, wie die Arbeit mit der Konsole aussieht und zwar wie ein Java Programm nicht nur kompiliert sonder auch debuggt werden kann.

Wir fangen mit einem ganz einfachen Beispiel an. Unser erster Programm beteht aus genau einer Klasse:

public class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");
    }
}


Jetzt gehen wir in Ordner wo die Klassendatei liegt und schreiben in der Konsole:

javac HelloWorld.java


Im Ordner muss die Datei HelloWorld.class erscheinen, d.h. die Klasse wurde erfolgreich kompiliert. Um das Programm zu starten, müssen wir eintippen:

java -classpath . HelloWorld


Diese Vorgehensweise ist aber nicht so gut, da unser quelltext und kompilierte Dateien nicht getrennt sind, sprich liegen indem selben Ordner. Um das Problem zu lösen erstellen wir zwei Ordners src und bin. In dem erstem Ordner werden die Quelltexte liegen in dem zweitem die binäre Dateien.
In src Ordner wird unsere HelloWorld Klasse liegen. Jetzt können wir für Kompilierung schreiben:

javac -d bin src/HelloWorld.java


Und für Start:

java -classpath ./bin HelloWorld


Unser HelloWorld hat eine sehr großen Nachteil und zwar er liegt in dem Defaultpackage. Sprich er liegt in keinem Package. Um zu verstehen warum das schlecht ist ein kleines Beispiel. Angenommen wir wollen eine Sammlung von HelloWorlds haben und bieten alle unseren ausländischen Kollegen ein Beispiel zu schreiben. Jedes HelloWorld – Beispiel wird die Begrüßung in einer Sprache ausgeben. Was passiert, wenn alle Kollegen ihre Klassen in keinem Package schreiben werden? Wie können wir alle diese Klassen in einem Ordner ablegen, damit sie besser zu verwalten wären? Das wird natürlich nicht gehen, da zwei gleichnamigen Dateien in einem Ordner nicht existieren können. Deswegen hätten wir so was:

helloworld
' -------------de
      	        ' ---HelloWorld.java
' -------------en
      	        ' ---HelloWorld.java
' -------------ru
      	        ' ---HelloWorld.java


Damit die neue Struktur funktioniert müssen wir in der Java-Datei noch die Zeile ganz oben schreiben:

package helloworld.de;


Und im Ordner src die Ordners helloworld/de, helloworld/en usw. erstellen. Jetzt können wir das Programm kompilieren:

javac -d bin src/helloworld/de/HelloWorld.java


Im bin Ordner wird automatisch die passende Ordner Struktur erstellt. Die die Struktur aus dem Ordner src wiederspiegelt.
Das Programm können wir mit dem Befehl starten:

java -classpath ./bin helloworld.de.HelloWorld


Unser nächster Schritt ist es ein Programm zu erstellen, das aus mehreren Klassen besteht. Angenommen wir haben folgende Klassen:

HelloWorld.java
package helloworld.en;

public class HelloWorld
{
    public static void main(String[] args)
    {
        int a=2;
        int b=3;
        Calculator calc=new Calculator();
        System.out.println("Hello World!");
        System.out.println(a+"+"+b+"="+calc.sum(a,b));
    }
}


Calculator.java
package helloworld;
     
import helloworld.operation.Adder;
     
public class Calculator
{
    public int sum(int... a)
    {
        Adder adder=new Adder();
        for(int i:a)
        {
            adder.add(i);
        }
        return adder.getSum();
    }
}


Adder.java
package helloworld.operation;
     
public class Adder
{
    private int sum;
        
    public Adder()
    {
        sum=0;
    }
        
    public Adder(int a)
    {
        this.sum=a;
    }

    public void add(int b)
    {
        sum+=b;
    }
        
    public int getSum()
    {
        return sum;
    }
}


Kompilierung:

javac  -d bin src/helloworld/en/HelloWorld.java
    src\helloworld\en\HelloWorld.java:9: cannot find symbol
    symbol  : class Calculator
    location: class helloworld.en.HelloWorld
                Calculator calc=new Calculator();
                ^
    src\helloworld\en\HelloWorld.java:9: cannot find symbol
    symbol  : class Calculator
    location: class helloworld.en.HelloWorld
                Calculator calc=new Calculator();
                                    ^
    2 errors


Was ist passiert? Der Compiler konnte die Klasse Calculator nicht finden. Warum? Weil er einfach nicht weiß, wo er nach der Klasse suchen soll. Das müssen wir ihm sagen, das wird mit dem Parameter –sourcepath gemacht:

javac -sourcepath ./src -d bin src/helloworld/en/HelloWorld.java


Starten:

java -classpath ./bin helloworld.en.HelloWorld
    Hello Word
    2+3=5


In nächstem Artikel werden wir unser tolles HelloWorld Beispiel debuggen und testen. Aus der Konsole natürlich!
Bleiben Sie dabei!
  • mark mark,
  • 23 März 2013, 21:07
  • 0

Kommentare (0)

RSS zusammenklappen / ausklappen

Kommentar schreiben

Ihr Name
Sie sind ein Gast, Sie dürfen keine HTML-Tags verwenden
Bitte geben Sie die Zeichen in das folgende Feld ein