Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

URL in Java code compiles without error: Why is the javac compiler ignoring it?

I made a mistake while testing some code and forgot to delete a line that contained only a URL. The code looked something like this:

class Example {
    public static void main(String[] args) {
        https://example.com
        System.out.println("Example");
    }
}

I assumed that the compiler would fail because a non-Java code was present in the first line of the main method. However, the code compiled and worked fine.

I thought that everything after the // symbol was a comment and expected the following code to fail compilation:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

https:
System.out.println("Example");

To my surprise, it compiled without error.

However, the following code produced a compile error, as expected:

class Example {
    public static void main(String[] args) {
        https://example.com
    }
}

Compiler error

/Example.java:4: error: illegal start of statement
    }
    ^
1 error

Can anyone explain why and under what circumstances the javac compiler ignores a line that contains a URL?

I compile the code online in https://www.jdoodle.com/ locally by hand and the behavior is the same always. I used Java8 and Java17.

I saw that the line is ignored because in intellij I could check in the decompiled code that the line is not there.

>Solution :

It is actually valid Java code:

    https://example.com
    System.out.println("Example");

The https: is a label

The // is a comment … to the end of the line

The System.out.println("Example"); is the statement that is labelled with https:

Labelled statements are an obscure Java construct that is used in conjunction with the break to label statement. Here’s a (marginally) useful example:

out: while (true) {
        int i = Random.nextInt(10);
        while (true) {
            int j = Random.nextInt(10);
            if (i == j) break out;
        }
     }

The break out; breaks the two while loops.


Your second example is not valid Java because there isn’t a statement after the label.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading