gottlieb: Funktionen Beibringen

Hi Forum,
ich will / muss meiner Freundin Java beibringen und sollte Ihr gerade die Klammern einwenig erklären, da Sie mit den Klammern durcheinander kommt, bzw. den Sinn nicht checkt, bzw. wann dieser auftaucht. Wie könnte oder sollte ich das Ihr am besten verständlich erklären??

String blabla="Ein Test";
String zahltext="123";
Double zahl=3.456;

Nun gibt es Beispielsweise direkte Funktionen:

blabla.length();

Oder, irgendwelche Klassen die man aufruft:

System.out.println(blabla);
Math.round(zahl);

Integer.valueOf(zahltext).intValue();

Das ist einwenig verwirrend, da ich bei Ihr diesen falschen Ansatz gesehen hatte: length(blabla);

Was wäre der Unterschied zwischen einer Klasse und einem Objekt? Eine Klasse ist die Datei helloword.jawa bzw. helloword.class in dem mehrere Objekte durch Funktionen/Methoden gebildet werden können?

;)

Grüße

  1. Hej,

    ich will / muss meiner Freundin Java beibringen und sollte Ihr gerade die Klammern einwenig erklären, da Sie mit den Klammern durcheinander kommt,

    Also vorab: mit Klammern gibt es nicht viel durcheinanderzukommen. Die einfachen Klammern '(' und ')' kommen in Java in genau fünf Fällen vor:

    (1) In algebraische Ausdrücken, um die Priorität der Operationen zu bestimmen.
    (2) Bei Methoden, um die (auch leere) Parameterliste zu klammern.
    (3) Bei Konstruktore, um wie ähnlich bei Methoden die (auch leere) Parameterliste zu klammern.
    (4) Um typkompatibele Objekte zu casten.
    (5) In Kontrollstrukturen wie if, for, switch

    Ferner gilt die Regel: "Alle Klammern die geöffnet wurden, müssen wieder geschlossen werden. Es ist auf korrekte Schachtelung zu achten."

    bzw. den Sinn nicht checkt, bzw. wann dieser auftaucht. Wie könnte oder sollte ich das Ihr am besten verständlich erklären??

    Das Problem sind nicht die Klammern, sondern ein Mangel an Verständnis der Programmiersprache Java, mit ihren Prinzipien. Diese Prinzipien (sprich genauer Syntax, OOP) anhand der Klammern zu beschreiben halte ich für ungeschickt.

    String blabla="Ein Test";
    String zahltext="123";
    Double zahl=3.456;

    Das sind Felder die gesetzt werden

    Nun gibt es Beispielsweise direkte Funktionen:

    blabla.length();

    Dies ist der Aufruf einer Methode length() die zu dem Feld/Objekt blabla gehört.

    Oder, irgendwelche Klassen die man aufruft:

    System.out.println(blabla);

    Dies ist die Methode println( String str ) die zu dem statischen Objekt out der Klasse PrintStream in der Klasse System gehört.

    Math.round(zahl);

    Die statische Methode round( double d ) oder round( float f ) der Klasse Math

    Integer.valueOf(zahltext).intValue();

    Hier wirds etwas interessanter: Integer besitzt die statische Methode valueOf( int i ) die ein Objekt der Klasse Integer mit dem Wert i instanziert und dieses Objekt per return zurückgibt. Anstatt nun

      
    Integer a = Integer.valueOf(1);  
    int x = a.intValue();
    

    zu schreiben kann man die beiden Zeilen kombinieren indem man in der zweiten Zeile a schlicht durch die Definition der ersten Zeile ersetzt. intValue() gibt den "Inhalt" des Integer-Objektes als primitiven int zurück.

    Das ist einwenig verwirrend, da ich bei Ihr diesen falschen Ansatz gesehen hatte: length(blabla);

    Hmmm, sowas krieg ich auch öfter zu sehen. Es resultiert aus einem grundlegendem Verständnismangel der OOP. Es gibt in Java keine Funktionen. Man kann nicht irgendwo aus dem Nirvana heraus irgendwelche Funktionalität abrufen. Was es gibt sind Methoden. Diese sind entweder Objektgebunden (werden also auf ein instanziertes Objekt) angewandt, z.B.

    String s = new String;( "xyz" )  
    int l = s.length();
    

    oder sind statisch. Sie liegen also bei der entsprechenden Klasse wie eben

    long x = Math.round( 0.3d )

    Das bezieht sich auch auf Methoden die innerhalb der Klassen verwendet werden, in denen sie deklariert wurden. Also z.B.

      
      
    class A {  
      
      private final String s;  
      
      public A( String s ) {  
        this.s = s;  
        init();  
      }  
      
      public void init() {  
        System.out.println( "Objekt der Klasse A mit Wert "+ this.s +"erzeugt." );  
      }  
      
      public static String on() {  
        return "Programm läuft";  
      }  
      
      public static void main( String args[] ) {  
        on();          // Ausgabe: Programm läuft  
        new A( "a" );  // Ausgabe: Objekt der Klasse A mit Wert a erzeugt.  
      }  
    }  
    
    

    Was wäre der Unterschied zwischen einer Klasse und einem Objekt?

    Die Klasse ist der Bauplan, der Eigenschaften und Methoden der Objekte die daraus instanziert werden vorgibt.

    Eine Klasse ist die Datei helloword.jawa bzw. helloword.class in dem mehrere Objekte durch Funktionen/Methoden gebildet werden können?

    Nein, die Datei helloworld.jawa (es sollte *.java heissen, zudem sollten Klassen immer groß geschrieben werden) ist der Programmcode. Die Datei helloworld.class der vom Compiler übersetze Bytecode. Eine Klasse ist etwas abstrakteres. Ein Modell, der Realität die du durch Programmcode beschreiben möchtest und in Sourcecode implementierst.

    Beste Grüße
    Biesterfeld

    --
    Art.1: Et es wie et es
    Art.2: Et kütt wie et kütt
    Art.3: Et hätt noch immer jot jejange
    Das Kölsche Grundgesetz
    1. hallo,

      schön zu lesen und eine wertvolle Antwort. Nur eine kleine Ergänzung:

      mit Klammern gibt es nicht viel durcheinanderzukommen.

      Doch, durchaus. Und es gibt in JAVA eben auch mehr als nur die "einfachen" Klammern. Allerdings war nach diesem "mehr" nicht gefragt.

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
    2. Hi,
      vielen vielen Dank für die sehr nette und ausführliche Erklärung, ich wusste nicht, wie ich das am besten verdeutlichen sollte, da man ja folgendes verwechseln könnte:

      blabla.length();
      System.out.println(blabla);
      Math.round(zahl);

      in

      length(blabla);
      blabla.System.out.println();
      zahl.Math.round();

      :D