{"id":2352,"date":"2013-09-22T12:24:37","date_gmt":"2013-09-22T10:24:37","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2352"},"modified":"2013-09-22T12:24:37","modified_gmt":"2013-09-22T10:24:37","slug":"wie-heit-die-klasse-mit-der-methode-main","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/09\/wie-heit-die-klasse-mit-der-methode-main\/","title":{"rendered":"Wie hei&szlig;t die Klasse mit der Methode main()?"},"content":{"rendered":"<p>In C(++) ist das erste Element des Felds der Funktion main(int argc, char **argv) der Name des Programms. Das ist in Java anders. Die Methode enth\u00e4lt als ersten Parameter nicht den Namen der Klasse beziehungsweise des Programms, sondern einfach den ersten Parameter \u2013 sofern einer auf der Kommandozeile \u00fcbergeben wurde. Auf einem kleinen Umweg ist das auch f\u00fcr manche Klassen m\u00f6glich.<\/p>\n<p>Der zu einer Klasse geh\u00f6rende Klassenlader l\u00e4sst sich mit dem Class-Objekt erfragen. Mit der Methode getResource() erhalten wir von einem Klassennamen ein URL-Objekt zur\u00fcck, das (unter gewissen Voraussetzungen) die Position der Klassendatei im Dateisystem anzeigt. Das folgende Programmbeispiel zeigt, wie wir von einer Klasse den vollst\u00e4ndigen Dateipfad zur\u00fcckbekommen.<\/p>\n<pre>package com.tutego.insel.lang;\n\nimport java.net.*;\n\npublic class FindClassLocation\n{\n static String findLocation( Class&lt;?&gt; clazz )\n {\n  ClassLoader loader = clazz.getClassLoader();\n\n  if ( loader == null )\n   return null;\n\n  URL url = loader.getResource( clazz.getName().replace('.', '\/' ) + &quot;.class&quot; );\n\n  return ( url != null ) ? url.toString() : null;\n }\n\n public static void main( String[] args ) throws Exception\n {\n  Class&lt;?&gt; c = Class.forName( &quot;com.tutego.insel.lang.FindClassLocation&quot; );\n\n  System.out.println( &quot;Class: &quot; + c.getName() );\n  System.out.println( &quot;Filename: &quot; + findLocation(c) );\n }\n}<\/pre>\n<p>Unter meinem Dateisystem liefert das Programm die Ausgabe:<\/p>\n<pre>Class: com.tutego.insel.lang.FindClassLocation\nFilename: file:\/S:\/Insel\/programme\/09_Funktionsbibliothek\/com\/tutego\/insel\/lang\/FindClassLocation.class<\/pre>\n<p><strong>Achtung!<\/strong> Die L\u00f6sung funktioniert nat\u00fcrlich nur unter gewissen Voraussetzungen. Es geht nur f\u00fcr Klassen, die in kein Jar-Archiv eingebunden sind und nicht den Standardbibliotheken entstammen. Auch ist eine Dateiangabe unm\u00f6glich, wenn wir etwa einen eigenen Klassenlader schreiben, der die Klassen aus einer Datenbank bezieht; dann gibt es keinen Pfad mehr.<\/p>\n<h4>getResourceAsStream()<\/h4>\n<p>Ben\u00f6tigen wir den Ort einer Klasse, um mit dieser Information auf weitere Dateien im Verzeichnis zuzugreifen, geht es mit der Class.getResourceAsStream(String) einfacher. Diese Methode dient insbesondere dazu, Ressourcen wie Bilder oder Musik aus einem Jar-Archiv auszulesen. Auch der ClassLoader bietet die Methode getResourceAsStream(String) an. Diese Methoden funktionieren ebenfalls f\u00fcr Klassen aus Jar-Archiven, wenn die Ressource im Archiv liegt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In C(++) ist das erste Element des Felds der Funktion main(int argc, char **argv) der Name des Programms. Das ist in Java anders. Die Methode enth\u00e4lt als ersten Parameter nicht den Namen der Klasse beziehungsweise des Programms, sondern einfach den ersten Parameter \u2013 sofern einer auf der Kommandozeile \u00fcbergeben wurde. Auf einem kleinen Umweg ist [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-2352","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2352","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2352"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2352\/revisions"}],"predecessor-version":[{"id":2353,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2352\/revisions\/2353"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}