An die JAVA - Programmierer

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
  • Guten Tag,


    ich versuche gerade aktiv Java zulernen und komme eig. ganz gut zurecht.


    nun, ich sehe immer wieder "public static void main(String[] args)"
    Ich verstehe nicht, wann genau das im Programm immer vorkommen soll oder muss..
    Unter public verstehe ich, dass man das von jedem class aufrufen kann? Static weiß ich nicht, was die meinen.. void habe ich nicht verstanden, ist ja so eine art "return" wie in Samp und main ist laut mehreren tutorials das wichtigste, aber ab einer bestimmten Stelle wurde es nicht mehr benutzt, was mich völlig irritert hat.


    Bitte einmal erklären und evlt. Beispiele vom Alltag geben(damit ich es besser verstehen kann :D)


    Danke im Voraus
    Karim

  • (Bin bisschen "veraltet" was Java angeht, korrigiert was falsch ist...)


    Static bedeutet soviel wie das es immer nur eine Instanz davon gibt.
    D.h wenn die Klasse Static ist kannst du beliebig viele male die Klasse erstellen und all diese Variablen würden sich dann die Klasse teilen (ändere was an der Klasse von einer Variable aus, bei allen anderen ist es auch so)


    void heisst ganz einfach das es keinen return wert hat. Quasi eine Prozedur. Du rufst diese Funktion auf, dir ist aber eigentlich "scheiss" egal was darin Passiert oder ob dies erfolgreich ist. "Fire and forget"


    main ist in der Regel einfach der Programmstart. Ein Programm muss ja irgendwo anfangen und irgendwo Enden. Bin mir nicht mehr sicher bei Java aber glaub dort ist auch main der Start.
    In den args[] stehen die Argumente womit du dein Programm starten würdenst. (zb. program.exe -username root)

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Public: D.h. Andere Objekte können auf das Attribut/die Methode zugreifen.
    Static: Klassenvariable/-methode, d.h. man kann durch Angabe der Klasse/eines Objekt der Klasse darauf zugreifen, unabhängig davon ob ein Objekt der Klasse jemals erzeugt wurde. Greift man darauf zu unter Angabe eines Objekts der Klasse ist der Effekt gleich einem Zugriff unter Angabe der Klasse oder eines anderen Objekts
    void: Wie bereits geschrieben, quasi keine Rückgabe. Kann ersetzt werden bei der Methode durch andere primitive Datentypen oder Klassen.
    public static void main(String[] args): Das ist der Programmeinstiegspunkt. args sind dabei die angegebenen Parameter, wobei der Wert 0 das aufgerufene Programm ist (z.B. HalloWelt.jar bei java -jar HalloWelt.jar abc)

  • Bitte einmal erklären und evlt. Beispiele vom Alltag geben(damit ich es besser verstehen kann :D)

    Stell dir vor du hast einen Laden in deiner Stadt.


    public bedeutet, dass jeder dort reingehen, rausgehen und einkaufen kann.
    static bedeutet, dass - wenn es mehrer Läden gäbe - jeder Laden das exakt gleiche Brot verkauft.
    void bedeutet, dass du aus dem Laden nichts mit nach draußen nehmen kannst.
    main bedeutet, dass es der erste Laden ist, in den man reingeht, wenn man die Stadt betritt.
    String[] args ist der Einkaufszettel, den du mitnimmst.

    Die moralische Instanz des Brotfisches.

  • oh okey wahr sehr hilfreich, danke :) nurnoch bei static und void irritieren mich. Ich meine was ist der sinn von beiden(in java)..?

  • "void" ist der Rückgabewert einer Methode wenn diese "nichts" zurückgibt.
    Zum Beispiel um bei dem Laden-BSP vom Vor-Poster zu bleiben,
    der Inhaber braucht neue Produkte und bestellt diese per Telefonanruf. Das ist ein simpler ablauf damit etwas "geschieht" und ich brauche dabei keinen Rückgabewert. Daher "void".


    static, sind Methoden/Klassen welche man einfach verwenden möchte ohne eine Objekt zu initialisieren. Laden BSP: Du sagst dem Inhaber du möchtest einen Apfel, bekommst einen, gehst in den nächsten und bekommst dort den gleichen. (Anwendungsbeispiel, die Math Library in Java, wenn du Math.Sqrt aufrufst wird auch nur eine Funktion aufgerufen die du "immer" verwenden kannst ohne zusätzliche Informationen zu wissen außer die Parameter.


    //edit iPhone Fehler ausgebessert

  • void ist "nichts".


    Der Variablentyp vor jeder Funktion "int,void, bool,float,..." gibt an welche Art zurückgeben wird. Float ist z.b eine Kommazahl, Int ist eine Dezimalzahl. Wurde die Funktion mit Int definiert ist der Rückgabewert eine Dezimalzahl. VOID ist nichts kein Wert stell es dir vor wie einen Leeren Raum. Es kann nichts zurückgegeben werden.

  • void ist "nichts".


    Der Variablentyp vor jeder Funktion "int,void, bool,float,..." gibt an welche Art zurückgeben wird. Float ist z.b eine Kommazahl, Int ist eine Dezimalzahl. Wurde die Funktion mit Int definiert ist der Rückgabewert eine Dezimalzahl. VOID ist nichts kein Wert stell es dir vor wie einen Leeren Raum. Es kann nichts zurückgegeben werden.

    Ich glaube du vertust dich da mit Dezimalzahlen. Eine Dezimalzahl ist eine Darstellung einer Zahl im Dezimalsystem also zur Basis 10. Auch 1,5 ist eine Dezimalzahl, nämlich 1 * 10^0 + 5 * 10^-1. ;)


    Floats sind Floating Point Numbers (Gleitkommazahlen) und sind per se nicht unbedingt genau. Sie stellen immer Annäherungen an die darzustellende Zahl dar.
    Doubles sind Double Precision Floating Point Numbers (Gleitkommazahlen mit doppelter Genauigkeit), diese erreichen sie dadurch, dass statt 32 bit eben 64 bit genutzt werden. Damit kann die Annäherung deutlich präziser dargestellt werden als mit "nur" 32 bit.
    Ints sind eben Ganzzahlen mit 32 bit Größe.
    Longs sind im Speicher doppelt so groß, können durch diese Erweiterung aber deutlich mehr als nur doppelt so große Zahlen darstellen. ;)


    Void gibt halt im Prinzip nichts zurück. Es wird im Programmcode einfach an die Stelle des Methodenaufrufs zurückgesprungen. Was für dich eigentlich nur wichtig ist: Es werden keine Daten zurückgegeben. (Jedenfalls in Java, in C/C++ gibt's dann wieder so lustige Dinge wie Zeiger auf void, das ist aber ein anderes Thema)


    Hoffentlich bin ich jetzt nicht zu stark abgewichen. :P


    PS: Man verzeihe mir Fehler, schon äußerst spät und ich bin "unterzockt". :/

  • Such dir einfach nen Tutorial raus, da gibts wirklich tausende. Einfach mal googlen!
    Das ist vom Resultat auch für dich besser.
    Oder nutze Apps wie SoloLearn Java, die sind super.


    Ansonsten zur kurzen Info:
    In einem Programm das aus ggf. mehreren Java Dateien besteht brauchst du wie auch bei nur einer Datei nur einmal die "public static void main(String[] args)" Methode.
    Das ist sogut wie das einzige, was du mit den Imports an Java im Vergleich zu anderen Sprachen auswendig lernen musst. Denn das ist der Eingangspunkt für den Start des Programmes. Vergleichbar mit der SAMP "main()" Methode bzw "int main()" oder "OnGameModeInit()" (wobei das nur ein Callback ist) oder ähnliches.
    Ohne diese Methode, kannst du das Programm nicht starten!
    public heißt, dass die Methode auch von außen zugreifbar ist. Sowie von internen package-Dateien als auch von externen. Alternativ kann man auch private oder protected nutzen, bei der main - Methode allerdings nicht, da man das Programm sonst nicht starten kann, da man ja dann die Methode von außen nicht findet bzw diese nicht zugreifbar ist. Wenn du nen Zwerg in nen Karton setzt und sagst, er soll den zuhalten, dann kommste auch nicht mehr ran. Sagste allerdings, er soll aufs Zauberwort aufmachen, bei uns "public", dann macht ers auch. Soviel zu den Beispielen aus dem Alltag^^
    static: es wird eine statische Instanz erstellt, heißt, man kann davon keine Objekte bzw. Weiteren Instanzen von statischen Klassen / Methoden erzeugen, sondern diese über den zugehörigen Package- und Klassennamen aufrufen. Es gibt also immer nur eine Instanz davon. Reicht oftmals aus. Jedoch kannst du statische und nicht-statische Methoden nicht so einfach kombinieren. Das jetzt auszuformulieren, schweift zu sehr ab.[/b]
    Probiere generell erstmal, nicht-statisch zu programmieren und dir das Keyword nur für die Hauptklasse einzuprägen.
    [b]void: ist ein Rückgabe-Keyword wie eine Variable, nur für Methoden. "Void" bedeuted dabei soviel wie "nur ausführbar". Also ausführbar, aber OHNE Rückgabewert. Du kannst die Methode also nur aufrufen, nichts zurückliefern. Solche Methoden werden ziemlich oft genutzt. Denn wozu was zurückliefern, wenn man nichts braucht. Ich reiße auch nicht ne 3. Tür in mein Haus, wenn ich maximal nen Vorder- und Hinterausgang benötige ;)
    main: KLEIN GESCHRIEBEN! ist die Methode, die also der Compiler als Introducer des Programmes sucht. Diese Methode MUSS so heißen.
    (String[] args): der Parameter ist ein Array einer String-Klasse, also ein Array (ähnlich wie eine Liste, aber benötigt weniger Speicher wenn man diesen effektiv zu nutzen weiß) einer Zeichengruppe (char - Array, system - build-in). Ist also ein Standartparameter und muss gehört ebenso zur "main"-Klasse wie auch dessen Kleinschreibung. Oder denkt man, dass jeder, der dein Namen trägt, auch du bist? Also ist die Syntax mit den Parametern und der Kleinschreibung wichtig!


    Variablen handhaben sich gleich, nur dass zu den Integern und Floats aus SAMP nun noch Doubles u.ä. kommen. Macht oftmals mehr Sinn , diese zu verwenden.

  • Ohne diese Methode, kannst du das Programm nicht starten!

    In Java 6 und älteren Versionen, die ja durchaus noch Verwendung finden sollen, ist das möglich. Danach kommt unweigerlich aber in der Tat ein Fehler, dass keine Main Methode gefunden wurde.


    In Java 6 wäre das ganze mittels static-Block möglich. Ich würde aber mal behaupten, dass es sich, wenn man das nutzt, nur um ein Proof-of-Concept handelt. Mir fällt jedenfalls kein Fall ein, für den man die main-Methode unbedingt nicht nutzen möchte und sich dann einen Workaround baut.