どうも。つじけ(tsujikenzo)です。このシリーズでは「ノンプログラマーのためのはじめてのJava体験」を、お送りします。今日は2回目です。
前回のおさらい
前回は、「ノンプログラマーのためのはじめてのJava体験」ということで、JDKのインストールを行い、Windowsの標準アプリだけで、Javaを動かしてみました。
今回は、「Javaでクラスを体験しよう」をお送りします。
今日のアジェンダ
- コード内の日本語に対応しよう
- Javaはすべてクラス
- コンストラクタ
- アクセス修飾子
コード内の日本語に対応しよう
前回の記事を参考に、新規Javaファイルを作成して、コンパイルする準備をしましょう。
写経するコードはこちらです。
public class Sample2_1 {
public static void main(String[] args) {
System.out.println("こんにちわ!つじけさん!");
}
}
コンパイルする準備ができました。
コンパイルしてみましょう。しかし、このような文字化けエラーが出ます。(※お使いのメモ帳アプリケーションによっては、エラーが出ないばあいもあります。)
Javaはコンパイル時に、日本語(2バイト文字)をパソコンが読めるように変換(エンコード)する必要があります。
コンパイルして、実行してみましょう。
エンコードすると、このように、コメントにも日本語が使えるので便利です。
//日本語のテストをするクラス
public class Sample2_1 {
//メインメソッド
public static void main(String[] args) {
System.out.println("こんにちわ!つじけさん!");
}
}
Javaはすべてクラス
ファイル名とクラス名
Javaのプログラムは、クラス単位で作成します。
Javaには、「一つのファイルに、一つのクラスを書いて、ファイル名をクラス名.javaにする」というルールがあります。
後ほど詳しく解説しますが、フォルダ内で同じ名前のクラスファイルが複数できること(ファイル名の衝突)を防ぐためです。
クラス定義とmainメソッド
Javaでは、実行用のメインコードもクラスです。
実行用Functionや、サブプロシージャを実行するJavaScriptやVBAに慣れ親しんでいるかたには、違和感があるかもしれません。
クラスを記述したJavaファイルを保存、コンパイル、実行したとき、最初に呼び出されるのがmainメソッドです。
クラスなので、クラス内にmainメソッド以外のメソッドを定義できます。
メソッドの定義と呼び出しを1つのクラスで行えることが、わたしには不思議な体験です。
public class Sample2_2 {
public static void main(String[] args) {
new Sample2_2().hello(); // => こんにちわ!
new Sample2_2().bye(); // => さようなら。
}
void hello() {
System.out.println("こんにちわ!");
}
void bye() {
System.out.println("さようなら。");
}
}
フィールド
メソッドは、動きに関する命令文でしたが、クラスには値を保管するフィールドも定義できます。
フィールドの前には、必ずデータ型を指定する必要があります。データ型を指定しないと(もしくは誤った型を指定したばあい)、コンパイルエラーが発生します。(←ここ大事です)
写経して、確認してみましょう。
public class Sample2_3 {
//フィールド
int tripleNumber = 777;
public static void main(String[] args) {
new Sample2_3().getTripleNumber(); // => 今日のトリプルナンバーは777です
}
void getTripleNumber() {
System.out.println("今日のトリプルナンバーは" + tripleNumber + "です");
}
}
コンストラクタ
さきほど、クラス内に値を保管するフィールドを定義しました。
このフィールドの値を初期値に設定するために、コンストラクタというメソッドが用意されています。
コンストラクタは、クラス内にクラスと同じ名前のメソッドを定義します。
写経して、確認してみましょう。
public class Sample2_4 {
// フィールド
int tripleNumber;
public static void main(String[] args) {
new Sample2_4(555).getTripleNumber(); // => 今日のトリプルナンバーは555です
}
//コンストラクタ
public Sample2_4(int number) {
tripleNumber = number;
}
void getTripleNumber() {
System.out.println("今日のトリプルナンバーは" + tripleNumber + "です");
}
}
アクセス修飾子
Javaには、クラス、フィールド、メソッド、のアクセス権限をコントロールする「アクセス修飾子」が提供されています。
写経コードは、後ほど。
static修飾子
また、Javaには、静的メンバー(静的フィールド、静的メソッド)を定義する「static修飾子」が提供されています。
static宣言をすると、クラスをインスタンス化しなくても、クラス内のメンバーにアクセスできます。
写経して、確認してみましょう。
public class Sample2_5 {
public static void main(String[] args) {
int num = Sample2_5.luckyNumber;
Sample2_5.getTripleNumber(num); // => 今日のラッキーナンバーは7です
}
static int luckyNumber = 7;
static void getTripleNumber(int num) {
System.out.println("今日のラッキーナンバーは" + num + "です");
}
}
複数のclass
Javaには、「1ファイルにつき1クラスというルールがある」という説明をしました。
しかし、実際には、1ファイルに複数のクラスを定義できます。
ポイントは、メインメソッドが書かれているクラス以外のクラスのアクセス修飾子を省略することです。
写経して、確認してみましょう。
public class Sample2_6 {
public static void main(String[] args) {
Dog.cry(); // => ワンワン
new Cat().cry(); // => にゃー
}
}
class Dog {
static void cry() {
System.out.println("ワンワン");
}
}
class Cat {
void cry() {
System.out.println("にゃー");
}
}
宿題
宿題の提出は、Twitterまでお願いいたします。
ノンプロ研メンバーは、お好きなSlackチャンネルに提出いただければ添削いたします!
まとめ
以上で、「ノンプログラマーのためのはじめてのJava体験2」をお届けしました。
クラスの中身である、フィールド、メソッドや、コンストラクタやアクセス修飾子についてご紹介しました。
普段慣れ親しんでいるインタプリタ言語とは違い、コンパイラ言語の仕組みが少し分かったような気がします。
次回(内容未定です)、お楽しみに。