Methoden-/Variablendeklaration

Man muss es immer mal wieder schreiben:
Variable: private static final int...
Methode: public static final synchronized int...
Frage: In welcher Reihenfolge die Zugriffsmodifizierer/Schlüsselwörter/(Rückgabe-)Datentypen/Arrays schreiben?, und was ist, wenn auch noch g/Generics (in der Klassendefinition) hinzukäme?

Danke fürs Drüberschauen. Das frage ich mich hin und wieder mal. Edit: Warum ist die Reihenfolge ohnehin nicht “fest” vorgegeben?

Na so ein bischen ist die Reihenfolge schon vorgegeben:

<static|final|synchronized> ()

nur die Schlüsselwörter static, final und synchronized lassen sich beliebig austauschen. Und wie du die anordnest ist eigentlich egal. Allerdings solltest du dich für eine Reheinfolge entscheiden und diese beibehalten. Nichts ist schlimmer als wenn sich in einem Projekt die Notation mischt, nervt tierisch beim lesen.

Danke, wenn man das einmal so sieht, ist es einleuchtend…

Joa, man sollte (sich auf) eine Konvention verständigen/beibehalten…

Btw.: Schreibt man "Anfänger"frage, "Anfänger"Frage, “Anfänger”-frage oder (nicht immer XOR) “Anfänger”-Frage? Das sind Dinge, die man in der Schule nicht mitbekommt (, weil sie sich hin und wieder auch mal ändern).

wo bleibt die Empörung zu

public int[] a;
public int b[];

oder gar:
public int[] c[];

? :wink:

das ist mal ein Spaß, anderes dagegen Kleinkram

[QUOTE=Natac]Na so ein bischen ist die Reihenfolge schon vorgegeben:

<static|final|synchronized> ()

nur die Schlüsselwörter static, final und synchronized lassen sich beliebig austauschen. Und wie du die anordnest ist eigentlich egal. Allerdings solltest du dich für eine Reheinfolge entscheiden und diese beibehalten. Nichts ist schlimmer als wenn sich in einem Projekt die Notation mischt, nervt tierisch beim lesen.[/QUOTE]

Das ist nicht korrekt, alle Modifier (public, protected, private, static, final, abstract, strictfp, native, synchronized sowie für Felder transient und volatile) lassen sich beliebig “mischen” - natürlich schließen sich manche gegenseitig aus. Es ist z.B. völlig legal, strictfp synchronized static final public void main(String[] args){} zu schreiben.

Die Ordnung der Modifier sollte sich an der “Wichtigkeit” orientieren, z.B.: (public | protected | private) (final | abstract | native) static (sonstige)

[QUOTE=Natac]Na so ein bischen ist die Reihenfolge schon vorgegeben:

<static|final|synchronized> ()

nur die Schlüsselwörter static, final und synchronized lassen sich beliebig austauschen.[/QUOTE]

wieso kann ich dann

public class Test2 {
    static public int[] b[];

    static public void main(String[] args)  {
        System.out.println(b[0].length);
    }
}

zur NullPointerException laufen lassen?

edit: zu spät, nun gar zwei Postings von mir, und Inhalt auch doppelt :wink:

An volatile bei Variablen und an die variable Position der Arrayklammern habe ich gar nicht gedacht… Aber stimmt. Mit native und transient bin ich noch gar nicht in Berührung gekommen. Bisher habe ich immer gegooglet, welche Reihenfolge auch schon andere geschrieben haben oder in den JCC oder in der JLS beschrieben ist. So, wie ich es jetzt sehe, sollte so spät wie möglich, aber so früh wie nötig geschrieben werden. Right?? Und die Arrayklammern nicht so wie in dem frühen C.

[QUOTE=SlaterB;93092]wieso kann ich dann …[/QUOTE]Okay okay. Ich dachte es geht nicht und hab es auch nicht ausprobiert (wozu auch? ^^). Wieder was gelernt. Wobei ich noch festhalten möchte, dass trotzdem gilt. Folgendes funktioniert (zumindest bei mir) nicht:
void public foo(){}

Die Java Language Specification, Kapitel 8, Abschnitt 8.4.3 sagt:

Also ist public static final die übliche Form, und mit synchronized, native und strictfp kommt man (in absteigender Reihenfolge) doch selten bis nie in Berührung. Mal im Ernst, hat schonmal irgendjemand für irgendwas strictfp verwendet? :confused:

Danke!
synchronized: 10x ungefähr (ja, ok, vielleicht auch öfter, wenn man ReentrantLock usw. dazu zählt)
native: 1x
strictfp: nie, bzw., mir sogar unbekannt
Frag’ mich aber nicht danach, wie viele Zeilen (als Progger) ich schon geschrieben habe.^^

Moin,

für so etwas bietet es sich auch an Checkstyle zu verwenden. Z.B. als Eclipse Plugin: Eclipse-CS (lässt sich auch innerhalb von Eclipse im Marktplace finden)

Das zeigt nicht eingehaltene Standards dann als Warnung.

Viele Grüße
Fancy

Hi,

fand das das nett klang da ich mir auch nciht immer sicher bin wie “gut” mein Code ist, aber die Installation in Eclipse hat nicht geklappt, und zwar habe ich folgende Fehlermeldung bekommen:

Cannot complete the install because one or more required items could not be found.
Software being installed: cs-contrib 1.0.18.v20140410-1244 (de.unkrig.cs-contrib.feature.group 1.0.18.v20140410-1244)
Missing requirement: cs-contrib 1.0.18.v20140410-1244 (de.unkrig.cs-contrib.feature.group 1.0.18.v20140410-1244) requires ‘net.sf.eclipsecs.checkstyle 5.1.0’ but it could not be found

Kann ich das nicht über den Marketplace installieren? Muss ich vorher etwas anderes isntallieren oder sind die Server nicht errreichar?

(Keine direkte Antwort auf die Frage, aber… es gibt Dinge die “ähnlich” sind, aber IMHO wichtiger: CheckStyle checkt nur den Style. Sowas wie FindBugs hat IMHO einen höheren “erzieherischen Nutzen”. Weitere ähnliche Tools sind praktischerweise auf der Seite eines weiteren ähnlichen Tools aufgelistet: http://pmd.sourceforge.net/pmd-5.1.1/similar-projects.html . Nicht erwähnt ist da aber auch sowas wie http://www.ucdetector.org/ )

Hm, ich hab gerade mal ein frisches Eclipse gesaugt, Marketplace geöffnet, nach “Checkstyle” gesucht, zweiter Treffer ist “Checkstyle Plug-in 5.7.0” -> Install, Restart geht.

Alternativ hilft vielleicht das Vorgehen, wie es auf der Webseite beschrieben ist.

(FindBugs sollte man ihmo natürlich auch immer installieren ;))

Viele Grüße
Fancy

Jetzt hat es geklappt. Mir sit auch aufgefallen das beim letzen mal die AGBs nicht kamen. Danke