getResourcesAsStream() --> Methode des Class-Objekts

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich verstehe nicht ganz folgenden Code:

Code:
class C
{
  InputStream in1 = C.class.getResourceAsStream( "kullin_fun.txt" );


  void lade()
  {
    InputStream in2 = getClass().getResourceAsStream( "hirse_fun.jpg" );
  }
}

Soweit ich weiss, ist die Methode getResourcesAsStream() eine Methode von einem Class-Objekt. Bei
Code:
C.class.getResourceAsStream( "kullin_fun.txt" )
, wo ist denn hier das Class-Objekt. Das Class-Objekt muss eigentlich C sein oder? Aber mir ist es noch nicht ersichtlich, dass C ein Objekt ist. Ist C nicht eher der Klassenname?

Desweiteren möchte ich gerne fragen, was .class. auf sich hat. Hoffentlich könnt Ihr mir mal helfen :(
Vielen Dank.

Schöne Grüße aus Rheinland,
Eure Ratna
 
C ist eine Klasse und damit selbst auch ein Objekt (klingt etwas verwirrend, ich weiß). Du kannst dir dazu aber auch mal java.lang.Class ansehen, darin ist das definiert. getResourceAsStream() ist eine Methode dieser Klasse java.lang.Class. Per <Klassenname>.class bekommst du eine Referenz auf die Klasse <Klassenname>.
Du kannst dir über die anderen Methoden von java.lang.Class auch mit den passenden get-Methoden alle Methoden, Felder und Konstruktoren von Klassen "holen".
 
Es gibt eine Klasse mit Namen "Class".
Deren Variablen sind dafür da, eine class wie C
und alle anderen Klassen im Javacode zu beschreiben.

Die Variablen in "Class" sind also zB. Name der Klasse als String, ein Array wovon es erbt usw.

Zu jeder Klasse im Code kann man sich jetzt so ein Objekt von Class machen lassen bzw. abrufen,
in dem dann eben Infos über die betreffende Klasse stehen.
 
Hallo sheel und genodeftest,

vielen lieben Dank für Eure Antwort erstmal. Ich hab ein bisschen recherchiert und hab folgendes gefunden:


java.lang.Class is one of the most important class in java but oftenly overlooked by java developers.

Every time JVM creates an object, it also creates a java.lang.Class object that describes the type of the object.

All instances of the same class share the same Class object and you can obtain the Class object by calling the getClass() method of the object. This method is inherited from java.lang.Object

Suppose you create two instances of class called Person e.g.
Java:
Person A = new Person();
Person B = new Person();

if(A.getClass() == B.getClass()){
System.out.println("A and B are instances of same class");
}else{
System.out.println("A and B are instances of different class");
}
In this case it will print "A and B are instances of same class" because they are both instance of clas Person.

Also, in dem obigen Beispiel werden ja erstmal Objekte von Person erzeugt. Danach mittels getClass() wird die Klasse der jeweiligen Objekte ermittelt. Ein weiteres Beispiel sieht wie folgt aus:
Code:
new Object().getClass().getResourceAsStream("/propsDatei.props")

Ich versuche, jetzt die Analogie zwischen dem letzteren und dem ersten zu verstehen. In dem letzteren Beispiel sieht es mir jedenfalls nach mehreren "Konstrukten" aus:

es wird erstmal mit Hilfe new ein Object der Klasse "Object" erzeugt?

Vielen Dank für Eure Hilfe.

Schöne Grüße aus Rheinland,

Eure Ratna
 
Hi

einerseits bietet die Class ja eben Infos über andere Klassen an.
uA. auch die Möglichkeit, zwei Objekte auf Klassengleichheit zu prüfen
wie in deinem Code (bitte Codetags verwenden).
Wie oben schon geschrieben kann man sonst auch
den Klassennamen usw. als String rausbekommen.

@Object:
Das ist auch eine spezielle Javaklasse.
Speziell in dem Sinn, dass alle Klassen
(wirklich alle, sogar die selbst geschriebenen)
die Methoden von Object erben.
Sinn: Object hat eben zB. getClass usw.
Das ist damit für jedes Objekt jeder Klasse vorhanden,
ohne dass man es selbst als Methode reinschreiben muss.

@getResourceAsStream:
Das (und die dazugehörenden Sachen) ist eine Nebenfunktion von Class.
Ein kompiliertes Javaprogramm besteht ja aus einer oder mehreren class-Dateien.
Die können einfach so als Dateien existieren, oder in eine Jar-Datei verpackt sien, oder...
Beim Ausführen vom Programm muss die JVM den Inhalt dieser Dateien erst mal laden.(Classloader). Das unterscheidet sich je nach Ort und Verpackung der class-Dateien.

Mit getResource... vom Classloader (über Class aufrufbar) kann man andere Dateien (außer Javaprogrammen) auf die selbe Weise laden, wie die betreffende Klasse geladen wurde.
Wenn man also zB. ein Spiel in Java in einer Jar-Datei hat kann man auch Bilder etc. in die Jar-Datei dazupacken und dann auf diese Weise öffnen
(auf die selbe Weise wie die class-Dateien laden...).
 
Hallo shell,

wow.. vielen lieben Dank :) Solche Erklärung "für Dummies" liebe ich. Aber nur mal zur Sicherheit, es heißt dann:

Object ist eine Ur-Klasse. Wenn ich also zum Beispiel eine Klasse namens RatnasKlasse habe und eine Instanz davon erstelle, dann enthält diese Instanz ein Object-Objekt ?

Vielen lieben Dank.

Schöne Grüße aus Rheinand,

Eure Ratna,
die bald Urlaub hat, *freu* :D
 
Zurück