Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Antwort
 
Themen-Optionen
Alt 07.05.2005, 16:11   Nach oben    #1
Benutzer
 
Registriert seit: 19.03.2005
Beiträge: 35
Standard Block bilden

Hallo zusammen,

ich versuche gerade zu verstehen wie in Java Blöcke gebildet werden. Hier ein ganz triviales Beispiel:
Code:
package test1;
public class Test1 {
	public static void main(String[] args) {
		short s1 = 1, s2 = 2, s3;
		s3 = (short) (s1 + s2);
		System.out.println(s3);
	}
		
}
Wie müsste ich nun unterhalb von main() einen Block bliden in welchem ich mit lokal gültigen Variabeln arbeiten kann?

Viele Grüße
pixel
pixel ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2005, 16:27   Nach oben    #2
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Hi,
also Blöcke sind ja durch geschweifte Klammern gekennzeichnete Codepassagen, z.B. Schleifen, Abfragen, ...

Beispiel:
PHP-Code:
class Demo {

    public static 
void main(String[] args) {
        
int zahl 0;

        if(
zahl == 0) {
             
String text "Testtext";
        }

        
System.out.println(text);

    }

Schau mal was da rauskommt

Ergänzender Link:
--> Java ist auch eine Insel, 2.3.8 Lokale Variablen, Blöcke und Sichtbarkeit

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2005, 16:49   Nach oben    #3
Benutzer
 
Registriert seit: 19.03.2005
Beiträge: 35
Standard

Danke für deine Gedult. Weil du grad "Java ist auch eine Insel" ansprichst. Das lese ich gerade und daraus resultierte die Frage. Das Problem das ich habe ist das dort als Beispiel steht:
Code:
void foo()
{
   int i;
   {
      int j;                    // j gilt nur in dem Block
      j = 1;
   }
//    j = 2;                  // Funktioniert auskommentiert nicht
}

void bar()
{
   int i, k;                   // i hat mit dem oberen i nichts zu tun
  {
//    int k;                  // Das würde nicht gehen!
   }
}
Was der Autor damit zeigen will glaube ich verstanden zu haben. Im oberen Block wird eine Variable i vom Typ int deklariert und eine j vom gleichen Typ wobei i unbenutzt bleibt. Da der Gültigkeitsbereich lokal ist kann i auch im unteren Block benutzt werden.
Im unteren Block wird versucht (durch Kommentar allerdings verhindert) die Variable k zwei mal zu deklarieren und dies ist nicht zulässig. Ich hoffe mal dass ich das richtig so verstanden habe.
Nun versuche ich die Beispiele immer in ein vorhandes Beispiel zu intergrieren und wenn ich nun auf mein Beispiel:
Code:
package test1;
public class Test1 {
        public static void main(String[] args) {
                short s1 = 1, s2 = 2, s3;
                s3 = (short) (s1 + s2);
                System.out.println(s3);
        }
                
}
zurückkomme würde mich interessieren wie ich hier einn Block einfügen kann um z.B. die Variable s3 erneut zu benutzen?

eines meiner Probleme dürfte auch sein das in keinem der Bücher bisher erklärt wurde was
Code:
public static void main(String[] args)
denn genau macht/bedeutet und ich dann einfach versucht habe mein Beispiel so
Code:
package test1;

public class Test1 {
	public static void main(String[] args) {
		short s1 = 1, s2 = 2, s3;
		s3 = (short) (s1 + s2);
		System.out.println(s3);
		
		void foo() {
			int i = 200;
			System.out.println(i);
		}
	}
}
zu erweitern was allerdings zu einem Fehler führt.

Viele Grüße
pixel
pixel ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2005, 17:22   Nach oben    #4
Benutzer
 
Registriert seit: 19.03.2005
Beiträge: 35
Standard

ok, bin dahinter gekommen in
Code:
package test1;
public class Test1 {
        public static void main(String[] args) {
                short s1 = 1, s2 = 2, s3;
                s3 = (short) (s1 + s2);
                System.out.println(s3);
        }
                
}
sind die Variablen s1 - s3 ja global sichtbar somit kann ich diese in einem Block unterhalb von main() nicht noch einmal benutzen. Benutze ich die Variablen jedoch in einem Block
Code:
package test1;

public class Test1 {
	public static void main(String[] args) {
		{
			short s1 = 1, s2 = 2, s3;
			s3 = (short) (s1 + s2);
			System.out.println("Ergebniss 1 = : " + s3);
		}
		{
			short s1 = 2, s2 = 3, s3;
			s3 = (short) (s1 + s2);
			System.out.println("Ergebniss 2 = : " + s3);
		}
		
	}
}
kann ich sie erneut benutzen.
pixel ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2005, 17:58   Nach oben    #5
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Hallo,
Du denkst zu sehr in Blöcken

Also zunächst einmal hierzu:
Zitat:
Zitat von pixel
eines meiner Probleme dürfte auch sein das in keinem der Bücher bisher erklärt wurde was
Code:
public static void main(String[] args)
denn genau macht/bedeutet
Die main-Methode ist die Methode, die sozusagen das Programm startet.
Das läuft irgendwie intern ab .. wie genau: keine Ahnung. Würde mich aber auch mal interessieren. Diese Frage wird nun in einem separaten Thread besprochen

Jedenfalls erwartet die Methode einen Übergabeparameter. Ein String-Array mit Namen "args". Anstatt "args" kannst Du da auch "Hugo" reinschreiben, da es sich da nur um einen Variablennamen handelt.
Wenn Du Dein Programm z.B. per Kommandozeile startest kannst Du Parameter mitgeben, welche sich dann im Array "args" befinden.

So. Jetzt mal zur Sichtbarkeit von Variablen.
Ich mache mal ein Beispiel:

PHP-Code:
public class Demo {

    public static 
void main(String[] args) {
        
        
/**
         * Deklaration einer Variable vom Typ int
         */
        
int i;
        
        
/*
         * Der Variable kann nun etwas zugewiesen werden. 
         * Geht natürlich auch direkt bei der Deklaration.
         */
        
5;
        
        
/**
         * Ein beliebiger Block .. hier durch eine if-Abfrage
         */
        
if(== 5) {
            
/**
             * Zwei Variablen werden im inneren Block deklariert.
             * Sie sind also nur in diesem Block sichtbar.
             */
            
String hallo "Hallo pixel";
            
double dezimal;
            
            
/**
             * Ausgabe der lokalen Variable 'hallo' und der globalen 
             * Variable 'i'.
             * 'i' ist in der gesamten main-Methode sichtbar, man kann also
             * innerhalb von main überall auf sie zugreifen.
             */
            
System.out.println("lokale Variable 'hallo': " hallo);
            
System.out.println("globale Variable 'i': " i);
        }
        
        
/**
         * Auch hier ist 'i' sichtbar
         */
        
System.out.println("globale Variable 'i': " " (außerhalb des if-Blocks)");
        
        
/**
         * Hier kommt es jetzt zu einem Fehler, da die Variable 'dezimal' 
         * nur lokal im if-Block deklariert wurde. Sie ist außerhalb dieses Blocks 
         * nicht sichtbar und somit kann auch nicht auf sie zugegriffen werden.
         */
        
dezimal 4.0;
    }

Die Fehlermeldung, die mir Eclipse anzeigt lautet dann:
Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	dezimal cannot be resolved

	at Demo.main(Demo.java:48)
was soviel heißt wie: "Ey, Alter ... ich kenn die scheiß Variable nicht!"

Ich hoffe mal, dass ich die Dunkelheit etwas erhellen konnte
Es ist übrigens absolut sinnlos eine Variable zweimal deklarieren zu wollen. Wenn Du den Inhalt ändern willst, dann überschreibst Du ihn einfach durch eine Zuweisung mit "="

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2005, 18:21   Nach oben    #6
Benutzer
 
Registriert seit: 19.03.2005
Beiträge: 35
Standard

ok, die Sichtbarkeit in Blöcken habe ich verstanden. Das Beispiel die gleiche Variable in zwei Blöcken mit unterschiedlichen Inhalten zu benutzen diente nur für das Beispiel. Ich konnte somit sehen das die Sicht wirklich lokal ist und ich die unterschiedlichen Werte zurück bekam.

Nochmal zurück zur Zeile
Code:
public static void main(String[] args)
Was sie intern macht ist für mich noch völlig zweitrangig mich interessiert vielmehr was ich damit einleite und ich entnehme deiner Antwort das es eine Methode ist. Wie kann ich nun innerhalb meines unltra komplexen Programms eine zweite Methode benutzen? Ich habe einfach mal:
Code:
package test1;

public class Test1 {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
			short s1 = 2, s2 = 3, s3;
			s3 = (short) (s1 + s2);
			System.out.println("Ergebniss 1 = : " + s3);
	}
	public static void main2(String[] args) {
		short s1 = 2, s2 = 3, s3;
		s3 = (short) (s1 + s2);
		System.out.println("Ergebniss 2 = : " + s3);
	}
	
}
versucht was keinen Fehler ergibt. Als Ergebnis erhalte ich jedoch nur:

Ergebniss 1 = : 5

Was ja das Ergebnis vom oberen Teil (Methode?) ist. Ich hoffe es ist halbwegs verständlich worauf die Frage abziehlt.

Viele Grüße
pixel
pixel ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2005, 18:46   Nach oben    #7
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

das ist jetzt eigentlich eine ganz andere Frage, die schon etwas über Variablensichtbarkeit hinausgeht.

Hier mal ein Beispiel:
PHP-Code:
public class Demo {

    public static 
void main(String[] args) {
        
/**
         * Möglichkeit 1
         * Direkter Zugriff auf eine statische 
         * Methode ohne Instanz der Klasse
         */ 
        
String zeichenkette getString();
        
        
/**
         * Möglichkeit 2
         * Zugriff über eine Objekt
         */ 
        // Objekt der Klasse Demo erstellen
        
Demo objekt = new Demo();
        
int summe objekt.addiere(59);
        
        
/**
         * Testausgabe
         */
        
System.out.println(zeichenkette);
        
System.out.println(summe);
    }

    public static 
String getString() {
        return 
"Test";
    }
    
    public 
int addiere(int aint b) {
        return 
b;
    }

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:16 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44