3 Stimmen

Was ist diese Syntax in Java? Ich erkenne sie nicht.

Dies ist eine Syntaxfrage.

Ich habe mir einige Open-Source-Dateien angesehen und bin auf eine Syntax gestoßen, die ich nicht erkennen kann, und ich hoffe, Sie können sie mir erklären.

(Dies stammt aus der Main.java im Rhino-Debugger hier)

public static String[] processOptions(String args[])
    {
        String usageError;
        goodUsage: for (int i = 0; ; ++i) {
            if (i == args.length) {
                return new String[0];
            }
            String arg = args[i];
            if (!arg.startsWith("-")) {
                processStdin = false;
                fileList.add(arg);
                String[] result = new String[args.length - i - 1];
                System.arraycopy(args, i+1, result, 0, args.length - i - 1);
                return result;
            }
            if (arg.equals("-version")) {
                if (++i == args.length) {
                    usageError = arg;
                    break goodUsage;
                }
                int version;
                try {
                    version = Integer.parseInt(args[i]);
                } catch (NumberFormatException ex) {
                    usageError = args[i];
                    break goodUsage;
                }

Meine Frage ist, was ist goodUsage? Welcher ist der Name dieser Syntax und wofür wird sie verwendet?

16voto

matt b Punkte 135206

Sie sind Labels. Sie werden verwendet, um aus einem inneren Block in einen Block zu springen, der nicht unmittelbar umgeben ist.

Hier ist der relevante Teil der Java Language Specification, der sich mit Labels befasst.

Sie haben es wahrscheinlich noch nie gesehen, weil 99% der Zeit der Code so umgeschrieben werden kann, dass ein solches Ding nicht verwendet wird, und es ist wahrscheinlich ein Zeichen dafür, dass die Methode zu viel tut.

(Auch sollte ich erwähnen, dass für alle, die diese Frage/Antwort zufällig über eine Suchmaschine finden, es sich nicht um eine neue Syntax handelt - sie existiert bereits seit der Version eins der JLS.)

4voto

Bart Kiers Punkte 160101

Macht mich an folgendes Nachdenken Knobelspiel denken:

public class Main {
    public static void main(String[] args) {
        http://stackoverflow.com
        System.out.println("Tut es?");
    }
}

Kompiliert es?

Bearbeitung: Der Syntax-Hervorheber von SO macht seine Arbeit zu gut!

3voto

BobbyShaftoe Punkte 27949

Dies ist nur eine Verzweigungsanweisung und goodUsage ist lediglich ein Label. Siehe hier:

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/branch.html

2voto

Es wird als gekennzeichneter Abbruch bezeichnet. Er kann verwendet werden, um anzugeben, aus welcher Schleife Sie ausbrechen möchten, anstatt wie es normalerweise die innerste tun würde. Hier ist ein gutes Beispiel: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/branch.html

1voto

Andrew Hare Punkte 332190

Es handelt sich um ein Label - die break-Anweisung stellt das Label bereit und das bedeutet, dass es wie ein goto behandelt wird, mit dem Unterschied, dass in Java ein "break to label" Sie ans Ende des nach dem Label deklarierten Blocks bringt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X