最初のプログラム:画面に文字を出す

はじめの一歩

プログラム|Java入門

最初のプログラム:画面に文字を出す

前回は、書いたものがどこで動くのかを見ました。 javac がクラスファイルを作り、それを JVM が読んで動かす、という2段構えでした。

今回は手を動かします。 5行のプログラムを、1行ずつ意味を付けながら組み立てます。 たった5行ですが、この先はこの形の上に載ります。

図1 書く・翻訳する・動かす。この3つで画面に文字が出ます

図1:書く・翻訳する・動かす。この3つで画面に文字が出ます。

載せた画面の文字は、日本語の Windows 11 と Java 21 で出たものです。 英語の環境では英語の文が出ます。

まず結論:この章の用語

用語意味
エディタ文字だけのファイルを書く道具。Windows のメモ帳でも足りる
コマンドプロンプトコマンドを打つ黒い画面。前回と同じもの。macOS と Linux ではターミナルと呼ぶ
cdいま見ているフォルダを移るコマンド。うしろに移りたいフォルダを書く
PATH道具を名前だけで呼べるように、Windows が探しに行くフォルダの一覧
文字コード文字を数字に置き替えて保存するやり方。書いた側と読む側で同じものを使わないと壊れる。UTF-8 と Shift_JIS はその種類
UTF-8いまいちばん使われている文字コード。Java はこれを前提にしている
コンパイル人が書いた文を機械寄りの形へ翻訳すること。この記事では「翻訳」とも書く
クラスプログラムをひとまとまりに入れる箱。いまは箱と思ってかまわない。本当の意味は先の回で扱う
クラスファイルコンパイルして出来上がる、JVMが読む形のファイル。拡張子は .class
メソッド処理のまとまりに付けた名前。main も println もメソッドで、自分で作る話は先の回で扱う
mainプログラムが動き出す場所の名前。JVMはこの名前を探しに行く
命令1つの動きを書いた1文。前回「JVMへの指示」と呼んだものを、書く側から見た言い方
二重引用符” のこと。画面に出したい文をこれではさむ
丸括弧( と ) のこと。命令に渡すものをこの中に書く
波括弧{ と } のこと。ここからここまでがひとまとまり、を表す
セミコロン; のこと。1つの命令のうしろに1つ置いて、終わりを示す
字下げ行の頭を空けて、内側にあることを目で分かるようにする書き方
javacコンパイルするコマンド。うしろにファイル名を渡す
javaコンパイルしたものを動かすコマンド。うしろにクラス名を渡す

この章のゴール
自分の手で1本書いて、画面に文字を出すことです。 そのうえで、止まったときに見る場所を4つ持って帰ります。

1. 打つ場所と道具をそろえる

図2 使う道具は2つ。文字を書くエディタと、コマンドを打つ黒い画面です

図2:使う道具は2つ。文字を書くエディタと、コマンドを打つ黒い画面です。

道具は2つです。 文字だけのファイルを書くエディタと、コマンドを打つ黒い画面(コマンドプロンプト)。 エディタはメモ帳でも足ります。

前回を読んでいない人へ。 JDK 21 を入れると javac と java が使えます。 作業用のフォルダを1つ作り、そのアドレス欄に cmd と打つと、そこで黒い画面が開きます。 ほかの場所で開いたときは cd で移ります。

> cd C:\java

保存で気を付けるのは2つ。 名前のうしろが .java で終わること。 メモ帳は種類を「すべてのファイル」に変えないと .txt が付きます。 もう1つが文字コードで、選ぶ欄があれば UTF-8 にします。 Java 21 の javac は、中身を UTF-8 として読みます。

道具がそろったかは、2つ打って版を見ます。 java -version は3行出るので1行目だけです。

> javac -version
javac 21.0.12
> java -version
openjdk version "21.0.12" 2026-07-21 LTS

両方とも 21 なら進めます。 片方が古いとき、見つからないと言われたときは、PATH の並びが原因です。 直し方は前回の6章です。

2. 画面に文字を出すプログラム、全文

図3 この5行で1本。どの行が何をしているのかを見ます

図3:この5行で1本。どの行が何をしているのかを見ます。

最初のプログラムはこれで全部です。 エディタに打って、Hello.java という名前で保存してください。 public を付けた class の名前とファイル名はそろえます。

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

意味はまだ分からなくて大丈夫です。 何かをしているのは3行目だけで、ほかの4行はその枠です。

打ち写すときは大文字と小文字に気を付けてください。 Java では別の名前になります。

3. 打ってみる:javac と java

図4 javac はフォルダにファイルを1つ増やし、java は画面に文字を出します

図4:javac はフォルダにファイルを1つ増やし、java は画面に文字を出します。

保存しただけでは動きません。 Hello.java を置いたフォルダで2つ打ちます。 行の頭の > は黒い画面が出すもので、打つ文字ではありません。

> javac Hello.java
> java Hello
Hello, Java!

1つ目は何も言わずに終わります。 これが正しい動きで、静かなのはうまくいった合図です。 そのかわりフォルダに Hello.class が増えています。

3行目が、プログラムの出した文字です。 java に渡すのはクラス名なので、.class は付けません。 Java 11 以降なら javac を省いて java Hello.java とも打てますが、ここでは分けます。

4. class:プログラムを入れる箱

図5 波括弧は入れ子。開いた数と閉じた数を数えて確かめます

図5:波括弧は入れ子。開いた数と閉じた数を数えて確かめます。

1行目の class が、箱の始まりです。 うしろの Hello がその名前で、自分で決められます。

箱の範囲を決めているのが波括弧です。 1行目の { と5行目の } が class、2行目の { と4行目の } が main の分で、箱の中に箱が入っています。 開いた数と閉じた数はそろいます。

行の頭の空きが字下げです。 内側へ入るたびに半角4つぶん下げると、いまどの箱の中かが目で分かります。 読みやすさのためなので、タブで下げても動きます。 通らないのは全角スペースで、これがいちばん多いつまずきです。 見た目が空白の文字はほかにもあり、写したときに混ざります。

5. main:ここから動き出す場所

図6 JVMは main という名前を探して、そこから動き出します

図6:JVMは main という名前を探して、そこから動き出します。

2行目の main が入口です。 java を打つと JVM がこの名前を探して、そこから動かします。 この名前は変えられません。

同じ行の public static void と String[] args は、いまは形として置きます。 意味は先の回です。

やっかいなのは、間違えてもコンパイルは通ることです。 Main でも文として正しいので javac は黙り、止まるのは動かすときです。

エラー: メイン・メソッドがクラスHelloで見つかりません。次のようにメイン・メソッドを定義してください。
   public static void main(String[] args)

このあとにもう1行続きますが、読み飛ばして大丈夫です。 探している形が2行目にあるので、自分の2行目と見比べるのが早道です。

6. System.out.println:1行を書き出す

図7 1つの命令を部分に切ると、それぞれの役目が見えます

図7:1つの命令を部分に切ると、それぞれの役目が見えます。

3行目が、画面へ文字を出している1行です。 長く見えますが、短いものをドットでつないだ並びです。 ドットは「の」と読みます。

System は Java が用意している機械の窓口、out はその画面への出口、println が1行ぶん書き出すはたらきに付いた名前です。 こういう名前をメソッドといい、main も同じです。

7. 丸括弧の中:出したいものを書く

図8 丸括弧の中に、二重引用符ではさんで書きます

図8:丸括弧の中に、二重引用符ではさんで書きます。

画面に出したいものは丸括弧の中に書きます。 文字を出すときは二重引用符ではさみます。 はさんだ中は、空白も記号もそのまま出ます。 引用符そのものは出ません。

はさみ忘れると止まります。 3行目の引用符を2つとも消すと、こう出ました。

Hello.java:3: エラー: ')'または','がありません
        System.out.println(Hello, Java!);
                                      ^
エラー1個

引用符が無いと、中身が文字ではなく名前や記号として読まれます。 ここでは ! のところで形が崩れました。

丸括弧の中は空にもできます。 何も書かずに、改行だけをします。 次の節で使います。

8. print と println:改行するかしないか

図9 画面のます目で見ると、どの命令がどこへ書いたか分かります

図9:画面のます目で見ると、どの命令がどこへ書いたか分かります。

println のうしろの ln は改行の印です。 書き出したあとに改行まで済ませるので、次の文字は下の行の左端から始まります。 print は改行しません。

2本目を Aisatsu.java という名前で書きます。 日本語を入れるので、保存は UTF-8 のままに。

public class Aisatsu {
    public static void main(String[] args) {
        System.out.println("おはよう");
        System.out.print("こんにちは");
        System.out.print("こんばんは");
        System.out.println();
        System.out.println("おやすみ");
    }
}

同じように2つ打つと、こうなります。

> javac Aisatsu.java
> java Aisatsu
おはよう
こんにちはこんばんは
おやすみ

命令は5つなのに画面は3行です。 print で書いた2つが1行に並んだからです。 6行目の println() は丸括弧の中が空なので、改行だけをします。

9. 並べ替えて、画面の形を変えてみる

図10 命令の並べ方を変えると、画面の行数が変わります

図10:命令の並べ方を変えると、画面の行数が変わります。

画面の形は命令の並べ方で決まります。 Aisatsu.java を2通りに書き替えます。 直したら javac から打ち直します。

1つ目は print を全部 println に替えるやり方で、画面は5行になります。 中が空の println() も1行ぶん数えます。 2つ目は6行目の println() を消すやり方で、改行が減るので画面は2行になります。 確かめたら元の形へ戻します。

10. つまずくのはこの4つ

図11 見た目がほとんど同じなので、数を数えて見つけます

図11:見た目がほとんど同じなので、数を数えて見つけます。

はじめに引っかかるのはこの4つです。 見た目がほとんど同じなので、文字を読むより数を数えるほうが早く見つかります。 わざと4つ出して、1行目だけ並べました。

Aisatsu.java:6: エラー: ';'がありません
Hello.java:3: エラー: シンボルを見つけられません
Hello.java:3: エラー: '\u3000'は不正な文字です
Aisatsu.java:3: エラー: この文字(0x82)は、エンコーディングUTF-8にマップできません

1つ目はセミコロンの付け忘れで、Aisatsu.java の6行目から1つ消しました。 行末に ; を足せば通ります。

2つ目は大文字と小文字の取り違えで、println を Println と書きました。 シンボルは名前のことで、その名前は下の行に出ます。

3つ目が全角スペースです。 日本語入力のまま行の頭を空けると入ります。 3行目の字下げを全角スペース4つに置き替えると、1つにつき1つ数えて4個出ました。 ‘\u3000’ が全角スペースの番号です。

4つ目が保存した文字コードです。 日本語を入れたのに Shift_JIS で保存すると、読む前に止まります。 メッセージの「エンコーディング」は文字コードのこと。 読めなかったところの数だけ並び、日本語18文字で21個出ました。 番号は文字ごとに変わり、21行は同じ文ではありません。 UTF-8 で保存し直せば通ります。

4つとも、止まるのはコンパイルのところです。 1行目にファイル名と行番号があるので、そこを見ます。 読み方は次回です。

確認問題

問1 ファイルに public class Aisatsu と書いた。 ファイル名として適切なものはどれか。
ア Aisatsu イ Aisatsu.java ウ Aisatsu.class エ aisatsu.java

答え:イ
public を付けた class の名前とそろえます。 アは .java が抜け、ウは javac が作るほう、エは小文字です。

問2 main の中に System.out.println( ? ); と書く。 ? のところに入れて、画面に Hello と出るのはどれか。
ア Hello イ “Hello” ウ ‘Hello’ エ “Hello

答え:イ
文字を出すときは二重引用符ではさみます。 アは名前として読まれて止まります。 ウの一重引用符は文字1つを表す書き方、エは閉じ忘れ。

問3 main の中に次の3行を書いた。 画面は何行になるか。
System.out.print(“あ”);
System.out.println(“い”);
System.out.print(“う”);
ア 1行 イ 2行 ウ 3行 エ 0行

答え:イ
1行目の print は改行しないので、あ と い が同じ行に並びます。 2行目の println が改行するので、う は次の行です。

まとめ

図12 書く・翻訳する・動かすを、合うまで往復します

図12:書く・翻訳する・動かすを、合うまで往復します。

要るものがそろいました。 class という箱、その中の main、画面に出す println、行末のセミコロン、javac と java です。

この先は書く・翻訳する・動かすを往復します。 止まっても、思った文字と違っても、書くところへ戻る。 一度で通らないのがふつうです。

止まったときに見る場所は4つ。 行末のセミコロン。 大文字と小文字。 全角スペース。 保存した文字コード。

次回は「エラーの読み方:赤い字のどこを見るか」。 今回わざと出した文を材料に、どこから読めば直せるのかを固めます。

タイトルとURLをコピーしました