Den Code verstehen

sengul

Bekanntes Mitglied
antworten.PNG antworten.PNG Hallo,
ich bin mir nicht sicher ob ich folgendes Code richtg verstanden habe, waere sehr dankbar für jede Hilfe.
Code:
package myUtils.system;
import java.io.*;

class UtilitiesSystem{
     public static void main (String args[]){
          foo();
     }
     public static void foo (){
          File pwd=new File(System.getProperty("user.dir"));
          if (pwd.isDirectory()){
               File [] bar=pwd.listFiles();
               for (int i=0;i<bar.length;i++){
                   System.out.println (bar[i].getName());
               }
          }else{
              System.out.println ("Error. The argument is not a directory");
          }
     }
}

In der Methode foo() wird erst das Objekt File mit dem Pfadnamen "user.dir" erstellt.
Mit der Methode isDirectory() vom Klasse File wird getestet, ob das erzeugte Datei ein Verzeichnis ist, (hier kommt der Wert true raus nach erfolgreiches compielen)
Danach wird vom Typ File ein Array namens bar erstellt, der alle Pfade der dateien und Verzeichnisse unter dem Verzeichnis "pwd" als File Objekte zurückgibt. In der for Schleife wird dann das Array bar für jeden index durchgegangen, und die Namen der Dateien und Verzeichnisse gedruckt. In die else springt es nur wenn das File Object "pwd" kein Verzeichnis ist.
Habe ich den Code richtig verstanden, oder was ist mein Fehler?

Ich muss noch das richtige von oben ankreuzen, stimmt meine Wahl? Ich hoffe ich habe dies richtig angekreuzt, Im folgenden möchte ich erklaeren, weshalb ich so gewaehlt habe.

1 und 2 stimmen nicht weil das Programm ohne Probleme compiliert und die Klassen File und System werden auch importiert.
3 und 4 ist richtig, weil ich die Methode foo() in einer anderen Klasse die unter einem anderen Package liegen gerufen habe und das selbe output bekommen habe. Dabei habe ich das Package “myUtils.system” importiert, auch mit dem import “myUtils” hat es funktioniert.
Bei 5 und 6 war ich mir nicht ganz sicher, ob eine von denen stimmt.
7 stimmt nicht, weil das Package “java.io” mehrere Klassen hat als nur die Klasse File.
8 stimmt nicht, weil wenn das File Object “pwd” kein Verzeichnis ist, wird das message ausgedruckt.
9 stimmt nicht, weil aus dem oben beschriebenen Grund.
Habe ich die richtigen angekreuzt?

Vielen Dank
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
1 und 2 stimmen nicht weil das Programm ohne Probleme compiliert und die Klassen File und System werden auch importiert.
Richtig.
3 und 4 ist richtig, weil ich die Methode foo() in einer anderen Klasse die unter einem anderen Package liegen gerufen habe und das selbe output bekommen habe. Dabei habe ich das Package “myUtils.system” importiert, auch mit dem import “myUtils” hat es funktioniert.
Falsch - die Klasse ist nur im gleichem Package sichtbar.

Bei 5 und 6 war ich mir nicht ganz sicher, ob eine von denen stimmt.
Zu 6:
[...] alle Pfade der dateien und Verzeichnisse unter dem Verzeichnis "pwd" [...] und die Namen der Dateien und Verzeichnisse gedruckt.

7 stimmt nicht, weil das Package “java.io” mehrere Klassen hat als nur die Klasse File.
Und welche von denen werden importiert?

8 stimmt nicht, weil wenn das File Object “pwd” kein Verzeichnis ist, wird das message ausgedruckt.
Da wären beide Antworten möglich:
- Es wird niemals ausgegeben, da user.dir immer ein existierendes Verzeichnis ist, zumindest beim Programmstart
- user.dir kann seit Programmstart gelöscht sein, und ist damit kein Verzeichnis mehr

9 stimmt nicht, weil aus dem oben beschriebenen Grund.
Zwar richtig, aber obiges ist nicht die Erklärung ;)
 

sengul

Bekanntes Mitglied
Hallo mrBrown,
danke erstmal für deine Hilfe, bei 3 und 4 verstehe ich dann folgendes nicht. Wenn ich in einer Klasse die Methode foo() von einer anderen Klasse aus rufe, dabei haben diese beiden Klassen keine Beziehung zueinander, sie liegen nur in dem selben Package, dann wird die Methode foo() ausgeführt. Deshalb denke ich dass 3 und 4 richtig sind oder?

Die externe Klasse Test

Code:
package myUtils.system;
import myUtils.*;

public class Test {
      public static void main (String args[]){
          UtilitiesSystem.foo();
     }

}
 

mrBrown

Super-Moderator
Mitarbeiter
Wie du schon sagst: sie liegen im selben Package - und auch nur dann funktioniert es.
Klassen die in einem anderem Package liegen, können auf die Klasse UtilitiesSystem nicht zugreifen
 

sengul

Bekanntes Mitglied
Die Lösung ware ist wie unten, wobei ich immer noch nicht verstanden habe bei der 3. Antwort, warum eine Klasse die nicht public ist, von irgendwo zugreifbar sein soll?

upload_2017-6-28_16-37-5.png
 

mrBrown

Super-Moderator
Mitarbeiter
Ist sie auch nicht - die Antwort 3 ist falsch.

Und Antwort 8 ist auch nicht vollkommen richtig, mit etwas Timing bekommt man das durchaus ne Ausgabe
 

Neue Themen


Oben