Announcement

Collapse
No announcement yet.

Unterschied in Deklaration

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unterschied in Deklaration

    Hi,

    hier mal eine kleine Frage:

    Code:
    public class ClassName{
        private String stringName;
    
        public ClassName(){
            if(stringName == null){
                /* mache irgendwas */
            }
        }
    }
    Das funktioniert ja wunderbar. Aber warum funktioniert folgendes nicht:
    Code:
    public class ClassName{
        public ClassName(){
            String stringName;
            if(stringName == null){
                /* mache irgendwas */
            }
        }
    }
    ?

    Im unteren Fall sagt er mir, dass "stringName" evtl nicht initialisiert wurde. Wenn ich unten explizit schreibe "String stringName = null;" dann funktioniert es. Ich dachte, dass wenn ich keine direkte Zuweisung mache, der Initialwert sowieso null wäre.
    Gibt es für das Verhalten eine Erklärung?

  • #2
    Man schreibt in Zeiten moderner IDEs nicht mehr den Datentyp in den Variablennamen (ungarische Notation)

    Du bekommst keinen Fehler, sondern eine Warnung.
    Das untere Beispiel funktioniert also.
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      Man schreibt in Zeiten moderner IDEs nicht mehr den Datentyp in den Variablennamen (ungarische Notation)
      Ich bin nur zu faul mir tolle Namen für ein kleines Beispiel auszudenken.. das ist alles.

      Code:
      public class ClassName {
      
      	public static void main(String[] args) {
      		String stringName;
      		
      		if(stringName == null){
      			System.out.println("Nope");
      		}
      	}
      }
      Wenn ich das ausführe, bekomme ich folgendes raus:

      Code:
      Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
      	The local variable stringName may not have been initialized
      
      	at ClassName.main(ClassName.java:7)
      Das Programm bricht ab, also ist das wohl keine Warnung.

      Comment


      • #4
        Deine Frage bezog sich auf die Deklaration.

        Du bekommst die Exception bei der Prüfung auf null.

        Die Deklarations kannst du so machen. Die Prüfung nicht. Deshalb bekommst du eine Warnung
        Christian

        Comment


        • #5
          Ich dachte, dass wenn ich keine direkte Zuweisung mache, der Initialwert sowieso null wäre.
          Das gilt nur für Instanzvariablen, wie in Deinem ersten Beispiel. Lokale Variablen haben keinen Initialwert. Und wie Christian schon sagt die Deklaration ist ok, nur mußt Du die Variable initialisieren bevor Du sie verwendest.

          Code:
          String stringName;
          stringName = null;
          if(stringName == null){}
          wäre in Ordnung.

          Das Programm bricht ab, also ist das wohl keine Warnung.
          Das Programm bricht nicht ab, es compiliert gar nicht erst.

          Comment


          • #6
            Hmmm, ja, dass ich "stringName = null" machen muss, weiß ich, aber gibt es auch eine Sinnvolle Begründung für diese Verhalten?

            Comment


            • #7
              Wie wäre es mit

              Lokale Variablen haben keinen Initialwert.
              Oder

              Bei Methodenaufrufen werden die lokalen Variablen auf den Stack gepackt. Das lässt sich vorher nicht erledigen
              Zuletzt editiert von Christian Marquardt; 01.03.2010, 17:33.
              Christian

              Comment

              Working...
              X