Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Doppelte Variablennamen

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.12.2006
    Beiträge
    19

    Doppelte Variablennamen

    Warum zeigt der Compiler folgendem Quelltext keinen FEhler?

    class irgendwie {

    int a;
    {int a;}

    ....

    Wenn ich das ganz aber ein eine statisch Funktion schreiben schon, warum?

    public static void main (String [] args){
    int b;
    {int b;} // Compilerfehler

  2. #2
    Registrierter Benutzer
    Registriert seit
    29.09.2006
    Ort
    Helsinki
    Beiträge
    154
    Moin,

    sorry für die späte Antwort, ich musste erstmal selbst die Bücher wälzen, wie diese Konstrukte richtig heißen...

    Code:
    class irgendwie {
    
    int a; <-- Das hier ist ein normales Feld
    
    {int a;} <-- Das ist ein Instance Initializer
    Die Variable in den {}-Klammern ist eine lokale Variable in einem "namenlosen" Codeblock, die deshalb nicht mit dem gleichnamigen Feld in der Klasse selbst kollidiert.
    Aber ich habe ganz ehrlich keine Ahnung, wann solche Instance/Static Initializer in der Realität eingesetzt werdenl, ich könnte mir nur vorstellen, dass man so Code zusammenfassen kann, der allen Konstruktoren gemein ist.
    Ich habe auch (noch) nicht rausfinden können, ob dieser Code vor oder nach dem Constructor ausgeführt wird...

    Aber das Dein zweites Beispiel nicht compiliert wird, wundert mich jetzt schon, denn wenn ich diese Defintion eines Blocks richtig verstehe, dann sollten die geschweiften Klammern doch einen Gültigkeitsbereich begrenzen, in dem Variablenbezeichnungen redefiniert werden können...
    Also wenn mir da einer der anderen Java-Experten nochmal sagen könnte, wo ich etwas falsch verstanden habe, dann wäre das super, danke!

    So long,
    Liberty
    Friedliebender Soldat im ganz persönlichen Auslandseinsatz

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Also wieso das mit den Sub-Blocks nicht geht weiss ich auch nicht. Da hätten wir mal wieder einen Unterschied zu C/C++ entdeckt

    Ist wohl einfach weil dumme Leute damit dumme Bugs kreiert haben

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    Also ich kenn das nur in Form der static-Blocks.

    Code:
    public class TestTool {
    
    	static int a = 1;
    	
    	static {
    		int a = 2;
    		System.out.println(a);
    	}
    
        public static void main (String args[]) {
            System.out.println(a);
    		{
    			int a = 3;
    			System.out.println(a);
    		}
        }
    }
    Output:
    2
    1
    3

    Das zweite ist ein namenloses Konstrukt in einer Methode. Die Klammern sind ohne Sinn eigentlich. Wäre int a vor den Klammern noch einmal deklariert, käme ein already defined - Compile-Fehler.
    Würde der erste Block ohne static beschrieben sein, würde er auch nicht ausgeführt werden.

    Static-Blocks haben durchaus Sinn. Sie sind wie static-Variablen, werden also nur einmal bei der ersten Konstruktion eines Objekts ausgeführt.

    mfg, Christian
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

  5. #5
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Klar sind die Klammern im konkreten Beispiel ohne Sinn (ausser eben, einen Sub-Block mit eigener Variablengültigkeit zu bilden). Aber denselben Effekt hast du auch bei Subblockklammern die Sinn machen - wie bei for/if's

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  6. #6
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    Egal, wie, dieser Code würde keiner Qualitätsprüfung bei uns in der Firma Stand halten.
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •