プログラミング初心者にもわかるようにJavaでHelloWorldするのは難しい

なぜか?

おまじないの量が多くなってしまうから

一般的なHelloWorld

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello,World!");
    }
}

staticとかStringとかSystemとかmainとか色々難しそう
あと、このHelloWorldだと色々省略した結果このコードになっていることに気づけないんじゃないだろうか

どうやったら初心者にやさしいJavaになるんだろうか

色々と省略しないで書いてみる

public class HelloWorld {
    public static void main(java.lang.String[] args) {
        java.lang.System.out.println("Hello,World!");
    }
}

パッケージの概念は最初からあった方がいいんじゃないだろうか!

上のコードは以下と等価だよ!と教える

import java.lang.String;
import java.lang.System;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello,World!");
    }
}

import文の使い方が何となくわかる。あくまで何となく

実はjava.lang以下のパッケージは省略できるんだよね!と教える

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello,World!");
    }
}

やっとこれで最初の形に持っていけた

Systemって書くのめんどくさいよね!

import static java.lang.System.out;

public class HelloWorld {
    public static void main(String[] args) {
        out.println("Hello,World!");
    }
}

初心者「えっ」

改行を入れてもいい位置と悪い位置があるんだ!

import static java.lang.System.out;

public class HelloWorld 
{
    public static void main( String[] args )
    {
        out.println(
            "Hello,World!"
        );
    }
}

文末はセミコロンで終わることもちゃんと教えないとまずいかも
それ以上にスコープについてきちんと教えたいんだけど、それをやると難しいのでここではやらない

「public static void main(String[] args)は最初に実行される」って書いてあるよね?悪いけどこれはウソなんだ

import static java.lang.System.out;

public class HelloWorld {
    static {
        out.println("いいぜ");
        out.println("main()が最初に実行されると思ってるなら");
        out.println("まずはそのふざけた幻想をぶち殺す");
    }
    public static void main(String[] args) {
        out.println("Hello,World!");
    }
}

初心者「なにこれこわい」

main文はなぜ必要なのか?staticじゃダメなのか

import static java.lang.System.*;

public class HelloWorld {
    static {
        out.println("Hello,World!");
        exit(0);
    }
}

System.exit()を入れてるのは実行時にmain()が無いとか言われるのでmain()に制御が移動する前にプログラムを終了させるため

別にpublicじゃなくてもいいよね

import static java.lang.System.*;

class HelloWorld {
    static {
        out.println("Hello,World!");
        exit(0);
    }
}

結局staticについてはおまじないで終わってしまった件

最後に

JavaHelloWorldの概念は難しいので、まずオブジェクトについて教えていくのがいいと思います
個人的にはフィールドとかインスタンスとかその辺を最初にきちんと教えてもらいたかったなーと
あと、パッケージを意識させたいのはJavaを学習する上でなぜか空気になってしまうからなのです