Java Rätsel

Hallo,

verdeutlichen kann man sich das wie folgt:
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Thomas.Darimont
 *
 */
public class InitializationExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new B();
    }
    
    static class A{
        A(){
            System.out.println("Constructor A");
            intialize();
        }
        
        void intialize(){
            System.out.println("Initialize A");
        }
    }
    
    static class B extends A{
        
        String value =init("yyy");
   
       B(){
            System.out.println("Constructor B");
            System.out.println(value);
        }
        
        void intialize(){
            super.intialize();
            value = init("xxx");
        }
    }
    
    static String init(String string){
        System.out.println("Init: " + string);
        return string;
    }
}

Ausgabe:
Code:
Constructor A
Initialize A
Init: xxx
Init: yyy
Constructor B
yyy

Die Instanzvariablen einer Instanz werden erst (automatisch) initialisiert, nachdem der Konstruktor der Basisklasse aufgerufen worden ist. Ebenso werden auch Instanz Initialisierer Blocks nach dem Aufruf des Basisklassen Konstruktors ausgeführt, in der Reihenfolge in der Sie im Code auftauchen. Anschließend wird der eigentliche Konstruktor ausgeführt.

Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Thomas.Darimont
 *
 */
public class InitializationExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new B();
    }
    
    static class A{
        A(){
            System.out.println("Constructor A");
            intialize();
        }
        
        void intialize(){
            System.out.println("Initialize A");
        }
    }
    
    static class B extends A{
        {
            System.out.println("Instance Initializer B 0");
        }
        
        B(){
            System.out.println("Constructor B");
            System.out.println(value);
        }
        
        String value =init("yyy");
        
        {
            System.out.println("Instance Initializer B 1");
        }

        
        void intialize(){
            super.intialize();
            value = init("xxx");
        }
    }
    
    static String init(String string){
        System.out.println("Init: " + string);
        return string;
    }
}

Ausgabe:
Code:
Constructor A
Initialize A
Init: xxx
Instance Initializer B 0
Init: yyy
Instance Initializer B 1
Constructor B
yyy

Weitere Beispiele zur Initialisierung:
http://www.tutorials.de/forum/1040519-post3.html

Gruß Tom
 
Dann mach ich nochmal eins :)

Java:
public class Finally {

	public static String methodB() {
		try {
			return "methodB";
		} finally {
			System.out.println("finally block");
		}
	}

	public static void main(String[] args) {
		System.out.println(methodB());
	}
}

Was ist davon die Ausgabe?
 
Zuletzt bearbeitet:
"methodB"?
Weiß zwar nicht was finally genau bewirkt, aber soweit ich weiß kommt bei einer static jedes mal der selbe Returnwert oder so, was auch immer das für einen Sinn haben mag.

€: Ups, auf Spoiler vergessen.
@AAF: Danke, aber editiere bitte das Zitat raus.
 
Zuletzt bearbeitet:
@Kai0008

finally wird nach try-catch immer ausgeführt, auch dann wenn catch in kraft tritt.
 
Zuletzt bearbeitet von einem Moderator:
@Kai008
"aber soweit ich weiß kommt bei einer static jedes mal der selbe Returnwert oder so, was auch immer das für einen Sinn haben mag."
Wo hast du dass denn aufgeschnappt? static an einer Methode bedeutet nur dass es nicht abhängig von einer Instanz der Klasse ist sondern direkt mit Klasse.methode aufgerufen werden kann. Kann man für Methoden nutzen die auf keinen Zustand angewiesen sind.
 
Wer weiss Vorrangregeln von Operatoren auswendig?

Was erzeugt der folgende Code?
Java:
package de.tutorials;

public class PlusPlus {

	public static void main(String[] args) {
		int a,b,c;
		
		a = b = 1;
		c = a+++b;
		
		System.out.println("a=" + a);
		System.out.println("b=" + b);
		System.out.println("c=" + c);

	}

}

Preincrement von b, oder Postincrement von a. Das ist für die Werte entscheidend.
 
Hallo,

Was erzeugt der folgende Code?
Eine Ausgabe auf stdout. scnr ... Fragen bitte ein wenig eindeutiger Formulieren ;-)

a+++b -> (a++) + b
a++ gibt a zurück und erhöht a im nächsten Schritt um 1
also wird
c = 1 + 1 = 2

Hab richtig geraten
a=2
b=1
c=2

Was ist die Ausgabe des Beispielcodes unter:
http://www.tutorials.de/forum/1630760-post5.html
und warum?

Hätte wohl noch ein wenig länger warten sollen... aber es juckte mich gerade so in den Fingern... vielleicht sollten wir eine Antwortfrist für Mods einführen. Erst nachdem ein Rätsel 2 Tage nicht korrekt beantowrtet wurde darf ein mod sich offiziell daran versuchen....

Gruß Tom
 
Zurück