対象:C言語経験者 / クラスの概念・main の構造・出力メソッドを理解します
HelloWorldを見ながら、C言語と何が違うかを確認しましょう。
#include <stdio.h>
int main(void) {
printf("Hello!\n");
return 0;
}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
一番目立つ違いは「クラスで囲まれています」こと。Javaではすべてのコードをクラスの中に書く。
クラスはこの授業の後半で詳しく学ぶ。今の段階では「プログラムを入れる箱」と考えてください。
| ルール | 例 |
|---|---|
| クラス名とファイル名(拡張子除く)は完全一致(大文字小文字も) | HelloWorld.java → public class HelloWorld |
| クラス名は大文字始まりが慣習(Javaの命名規則) | HelloWorld, Calculation |
| クラス名は数字始まり不可 | 01Hello はエラー → フォルダで番号管理 |
Javaのmainは呪文のように見えるが、1つずつ意味があります。
static・publicは後の単元で詳しく学ぶint main(void) {
/* 処理 */
return 0;
}
public static void main(String[] args) {
// 処理
// return不要(voidだから)
}
| C言語 | Java | |
|---|---|---|
| 関数/メソッドの場所 | ファイルに直接書く | クラスの中に書く |
| 戻り値 | int(return 0) | void(return不要) |
| 引数 | void または int argc, char *argv[] | String[] args(常にこの形) |
| コメント | /* */ のみ | // ・/* */・/** */ の3種類 |
C言語の printf に相当するものが3種類あります。
println は print + ln の組み合わせ。
| 部分 | 意味 |
|---|---|
print | 印字する・出力します |
ln | line(行)の略。「1行分出力して改行」という意味 |
println = 「1行出力して次の行へ」。print だけだと改行しない。printf("...\n") と printf("...") の違いと同じ発想。
| メソッド | 動作 | C言語で言うと |
|---|---|---|
System.out.println(x) | xを出力して改行します | printf("%s\n", x) に相当 |
System.out.print(x) | xを出力。改行しない | printf("%s", x) に相当 |
System.out.printf(書式, x) | 書式指定して出力。改行は\nで | printf とほぼ同じ |
System.out は長い。C言語の printf と違って毎回書く必要があります。これはJavaの仕様。
+ 演算子)Javaでは + を文字列に使うと、文字列同士をつなげることができます。
String a = "Hello"; String b = "World"; System.out.println(a + " " + b); // → Hello World
さらに、文字列と数値を + でつなぐと、数値が自動で文字列に変換されます。
int x = 10;
System.out.println("xの値は: " + x); // → xの値は: 10
printf("xの値は: %d", x) と書く必要があった。"文字列" + 変数 と書けるため、単純な出力なら printf を使わなくてよい。
int a = 3;
System.out.println("結果: " + a + 2); // → 結果: 32 ← 文字列連結が先に起きる
System.out.println("結果: " + (a + 2)); // → 結果: 5 ← カッコで計算を先に
"結果: " + 3 で "結果: 3"(文字列)になり、その後 + 2 がまた文字列連結になってしまう。
実習1
02_Output フォルダに Output.java を作って実行しましょう。
public class Output {
public static void main(String[] args) {
// println:出力して改行
System.out.println("1行目");
System.out.println("2行目");
// print:改行しない
System.out.print("A");
System.out.print("B");
System.out.print("C");
System.out.println(); // 改行だけ
// 文字列 + 数値 → 自動で文字列に変換して連結される
int x = 10;
System.out.println("xの値は: " + x);
System.out.println("計算結果: " + (x * 2)); // カッコで計算を先に行う
// printf:書式指定
System.out.printf("整数: %d%n", x);
System.out.printf("小数: %.2f%n", 3.14159);
}
}
実行結果:
上の「文字列の連結」で説明したとおり、"文字列" + 数値 + 数値 は左から順に文字列連結になります。
"計算結果: " + x * 2 は * が + より優先順位が高いので 10 * 2 = 20 が先に計算され、たまたま意図通りになります。
しかし "計算結果: " + x + 2 と書くと "計算結果: 102" になってしまう。カッコで明示しますのが安全な習慣。
%n と \n の違いは?\n は改行文字(Unix系では LF)。%n は実行環境に合った改行コード(WindowsではCRLF)を自動で選ぶ。
試験では \n が使われることが多い。実際のコードでは %n が推奨されることもあります。
System.out.println() は引数なしで呼べる。改行だけ出力されます。
実習2
03_Profile フォルダに Profile.java を作って実行しましょう。
変数に値を入れて、自己紹介文を出力するプログラムを作る。
public class Profile {
public static void main(String[] args) {
// 変数の宣言と代入(C言語とほぼ同じ)
String name = "Taro"; // 文字列はStringを使う
int age = 20;
double height = 170.5;
boolean isStudent = true;
// 出力
System.out.println("=== 自己紹介 ===");
System.out.println("名前: " + name);
System.out.println("年齢: " + age);
System.out.printf("身長: %.1f cm%n", height);
System.out.println("学生: " + isStudent);
}
}
実行結果:
| C言語 | Java | 違い |
|---|---|---|
char name[]または char *name | String name | Javaでは文字列はString型(クラス)。ポインタ不要。 |
int | int | ほぼ同じ。Javaでは常に32ビット。 |
double | double | 同じ。 |
int(0か1) | boolean | Javaにはboolean型があります。値はtrue/false。 |
stringではエラーになります。boolean型を文字列に連結すると、自動的に"true"か"false"の文字列に変換されます。
C言語ではintを使って0/1で表現していたのと対比しましょう。
Javaでは'A'(シングルクォート)は1文字のchar型。"Taro"(ダブルクォート)が文字列(String)。
C言語と同じルール。
// 1行コメント(C言語にもある) /* 複数行コメント C言語にもある */ /** JavaDocコメント * ドキュメント生成ツール用。Javaだけにある。 * クラスやメソッドの説明を書く。 */
頻出ポイント
| よく問われること | 正しい答え |
|---|---|
| 最初に呼び出されるメソッド | mainメソッド |
| コメントの種類 | 3種類(// / /* */ / /** */) |
printlnとprintの違い | printlnは改行あり、printは改行なし |
booleanの値 | trueまたはfalse(C言語の0/1ではない) |
| 文字列の型 | String(大文字始まり) |
public class Q {
public static void main(String[] args) {
System.out.print("A");
System.out.print("B");
System.out.println("C");
System.out.println("D");
}
}
答え:
理由:print は改行しないため A・B・C が繋がる。printlnで改行。次の println で D が出力されて改行。
public class Q2 {
public static void main(String[] args) {
int a = 3;
System.out.println("答え: " + a + 2);
System.out.println("答え: " + (a + 2));
}
}
答え:
理由:1行目は "答え: " + 3 で"答え: 3"になり、さらに + 2 で文字列連結になり "答え: 32"。
2行目はカッコで先に計算するため 3 + 2 = 5 になってから文字列連結。
| ポイント | 内容 |
|---|---|
| クラス | プログラムを入れる箱。ファイル名と一致させる。 |
| main | JVMが最初に呼び出す入口。形は決まっています。 |
| println | 出力+改行。一番よく使います。 |
| 出力のみ(改行なし)。 | |
| printf | 書式指定。%d・%f・%s など。 |
| String | 文字列型。大文字始まり。C言語のchar配列に相当。 |
| boolean | C言語にはない。true/falseを持ちます。 |
| コメント | //・/* */・/** */ の3種類。 |