クラスとオブジェクト
 クラスからオブジェクトを生成
class Lesson6{
   public static void main(String args[]){
      String A;
      A = new String("こんにちわ");
      System.out.println(A);
   }
}
このプログラムを実行すると次のようになります。
こんにちわ

(解説)

 プログラムの中でオブジェクトを使用するには、型紙であるクラスを元にオブジェクトを作成する必要があります。これをクラスの実体化、もしくは、クラスのインスタンスの作成といいます。
このプログラムでは、文字列を扱うStringクラスの実体化を行って、そのオブジェクトの中身である文字列を表示しています。
Stringクラスの実体化は次のように行います。(4行目)
   new String("オブジェクトに代入したい文字列");
Stringの前にある「new」は、クラスのインスタンスを新しく作成するときに使う決り文句と考えてください。
int型やchar型の値に変数を入れて使うことができたように、クラスをもとに作成したオブジェクトも、変数の中にはめ込んで利用することができます。int型やchar型などのことを基本型と呼ぶのに対し、何らかのオブジェクトを入れるための型のことは参照型と呼びます。
参照型の変数は、基本型の変数と同じ要領で宣言することができます。
たとえば、Stringクラスのオブジェクトを入れるための変数を宣言する場合は、次のようにします。
    String A;
 インスタンスメソッド、インスタンスフィールド
class Lesson7{
   public static void main(String args[]){
      String A = new String("こんにちわ");
      System.out.println(A);
      int B = A.length();
      System.out.println("文字数は"+B+"です");
   }
}
このプログラムを実行すると次のようになります。
こんにちわ
文字数は5です

(解説)

このプログラムは、文字列のオブジェクトを作成し、その文字数を表示するプログラムです。まず、3行目で、Stringクラスのオブジェクトを宣言し、インスタンス化を行っています。
次に、5行目に注目してください。ここでは、Stringクラスの持つlengthメソッドを呼び出しています。lengthメソッドは自分自身(この場合は、Aが参照するStringオブジェクト)に格納されている文字列に含まれる文字の総数を数え、その結果をint型で返すという「動作」を行います。

このように、オブジェクトに直接関連付けられているメソッドで、クラスのオブジェクトを作成し、そのオブジェクトを通して呼び出しを行うメソッドのことをインスタンスメソッドと言います。「オブジェクト名.メソッド名」という形で呼び出されます。
また、インスタンスフィールドというものも存在し、これもインスタンスメソッドと同様、オブジェクトに直接関係つけられていて、クラスのオブジェクトを作成して、オブジェクトを通して呼び出しを行います。「オブジェクト名.フィールド名」という形で呼び出されます。
 クラスメソッド、クラスフィールド
class Lesson8{
   public static void main(String args[]){
      System.out.print("円周率=");
      System.out.println(Math.PI);
      System.out.print("-5の絶対値は");
      System.out.println(Math.abs(-5)+"です。");
   }
}
このプログラムを実行すると次のようになります。
円周率=3.141592653589793
−5の絶対値は5です。

(解説)

このプログラムはMathクラスを使っています。Mathクラスは名前からもわかるように、さまざまな数値処理に関するフィールドとメソッドを備えています。
3行目では、MathクラスのフィールドであるPIを呼び出しています。PIには円周率πが格納されています。PIのように、クラスに直接関連付けされているフィールドをクラスフィールドと言い、クラスのどのオブジェクトとも独立に存在します。オブジェクトごとに、円周率が異なるということはありえないからです。クラスフィールドは「クラス名.フィールド名」で呼び出されます。
同様に、クラスメソッドと言うものも存在します。クラスメソッドはクラスのインスタンスを作成せず、「クラス名.メソッド名」という形で呼び出されます。
Mathクラスにあるabsメソッドもその一つです。したがって、インスタンスメソッドのように、Mathクラスのインスタンスを行う必要はありません。absメソッドはある数値の絶対値を求めるためのメソッドです。「Math.abs(元の数値)」という形で呼び出されます。
 メソッドの書式と引数
メソッドを呼び出す際の書式は原則として次のような形であらわされます。
メソッド名(引数)
メソッド名には
そのメソッドの名前が入ります。たとえば、lengthメソッドならlengthが入ります。メソッドの後ろの(引数)の部分は、必要な場合のみ記述します。引数はそのメソッドを実行するために必要な「材料」のようなものです。パラメータと呼ばれることもあります。
各メソッドにどんな引数が必要なのかは、あらかじめクラスの内部で定義されています。メソッドを呼び出す際には、事前にクラスの機能をまとめたリファレンスなどでメソッドの詳細をしらべ、必要な引数を()の中に記述する必要があります。
なお、呼び出すメソッドがクラスメソッドの場合はクラス名を、インスタンスメソッドの場合はオブジェクト名を、目祖どの前に記述します。
 コンストラクタについて
これまでのプログラムでは、Stringクラスのインスタンスの作成を
String A = new String(こんにちわ);
という方法で行ってきました。
このように、あるクラスのインスタンスを作成する際には、「new」という単語の後にクラス名を記述し、続く()の中に必要な引数を入れるという手順を踏む必要があります。
new クラス名 (必要な場合は引数)
実は、この「クラス名 (引数)」というところでは、そのクラスのコンストラクタと言うものを呼び出しているのです。コンストラクタはクラスのインスタンスを作成するために使われる特殊なメソッドで、newにつづけてコンストラクタを記述すると目的とするクラスのインスタンスを作成することができると言う仕組みになっています。
コンストラクタ名の後ろに続く()の中に入れる引数のデータ型や個数は、それぞれのクラスによって異なります。また、1つのクラスかが引数の個数や型の異なる複数のコンストラクタを持つことも珍しくありません。
 コメント
Javaで記述したプログラムには、コメントを入れることができます。コメントとは、「プログラムコードの中にあるがプログラムコードとは認識されない部分」のことで、//に続けて記述された文字列や数値などはすべてコメントとみなされます。
//以降に書き込まれた内容は、コンパイルの際にはすべて無視されるので、コメントの中には何でも好きなことを記述することができます。
Javaのコメントには単一行コメントと複数行コメントの2種類があります。
//で始まるコメントは単一行コメントと言って、//からその行の終わりまでが1つのコメントとして扱われます。
    <単一行コメントの使用例>
     //変数を宣言して値を代入する
     int A = 12;
複数行コメントは文字通り複数行にわたって記述されるコメントのことで、こちらは、/*と*/でコメント全体を囲みます。
    <複数行コメントの使用例>
  /*
    絶対値を計算するプログラム
    作成日: 2002.3.1
  */
コメントにはなんでも好きなことを書き込むことができると説明しましたが、一般的にコメントは、プログラムコードの説明や覚え書きなどを記述するのに利用されます。
プログラムコードは、言ってみれば英単語と数字の羅列であって、そこに書かれていることを読み取って理解するのは困難なことです。プログラムを書いている最中はわかるかもしれませんが、何週間、何ヶ月後になると、書いた本人ですらプログラムコードの内容を読み解くのに苦労してしまいます。
そのようなときに、プログラムコード内に書きこまれたコメントが非常に役に立ちます。簡単にでも説明文が入っていれば、少なくともその部分がどのような役割を果たしているのか、おおまかに理解することができるからです。
 配列
★配列とは★
アパートやマンションには「○○アパート」などの名前がついていて、それ自体が1つの単位として成り立っています。しかしその中にはさらに101号室、201号室…という具合に1つ1つの部屋があり、これらもまた1つの単位として数えることができます。
このように、ある名前の変数の中に複数の部屋を作り、そこにそれぞれ別の値を入れて管理することができるのが配列です。
★配列の仕組み★
配列は複数の値を入れる部屋が集まってできた、いわば変数の集合体のような形をしています。
それぞれの部屋のことを要素とよび、これらの要素は0から始まる連番によって管理されています。この連番のことをインデックスといい、配列の各要素にアクセスするにはこのインデックスを使います。インデックスは言ってみれば、アパートの部屋についている部屋番号のようなものです。
なお、1つの配列に含まれる要素はすべて同じ型である必要があります。
class Lesson9{
   public static void main(String args[]){
      //配列を宣言してインスタンスを作成する
      int myarray[] = new int[3];

      //配列に値を入れる
      myarray[0] = 5;
      myarray[1] = -7;
      myarray[2] = 48;

      //要素数を表示する
      System.out.println("配列myarrayの長さは" + myarray.length);

      //要素を表示する
      System.out.println(myarray[0]);
      System.out.println(myarray[1]);
      System.out.println(myarray[2]);
   }
}
このプログラムを実行すると次のようになります。
配列myarrayの長さは3です

−7
48
★配列を使うには★
プログラムの中で配列を扱う際には、次のような手順に従います。
@配列の宣言
A配列のインスタンスを作成
B配列の各要素にアクセス
C特定の要素に値を代入
以下、それぞれの処理について見ていきましょう。
@配列の宣言
配列を使うためのファーストステップは配列を宣言することです。配列の宣言は通常の変数の宣言とほぼ同じで、次のような書式で行います。
    型名  変数名[ ] ;
型名にはその配列で管理したいデータの型を指定します。配列を宣言する場合には、変数名の後ろに[ ]を続けて記述する必要があります。
A配列のインスタンスの作成
配列を宣言したら、次はその配列のインスタンスを作成します。Javaでは、配列は一種のオブジェクトとして扱われます。通常の変数は単に宣言するだけで使うことができたのに対し、配列形変数の場合にはインスタンスの作成が必要なのはそのためです。配列のインスタンス作成には次のような書式を用います。
    変数名 [ ] = new 型名 [ 要素数 ] ;
変数名には、あらかじめ宣言しておいた変数の名前を、型名には、宣言時に指定した方を、要素数にはその配列にもたせる要素の数を指定します。
また、@の宣言とAのインスタンスの作成を1行でまとめて行うこともできます。サンプルプログラムの4行目ではこちらの方法を用いています。
B配列の要素にアクセスする
配列の各要素にアクセスするには、先ほども説明したように、インデックスを用います。配列のインデックスは0から始まり、1,2,3,4,5,6・・・というように、1刻みで順番に振られていきます。
たとえばサンプルプログラムのように要素数3の配列であれば、0から始まり、2で終わります。
C配列に値を入れる
配列のいずれかの要素に値を入れる(代入する)には、代入演算子の=をつかって次のように記述します。
     変数名 [ インデックス ] = 代入したい値;
サンプルプログラムでは、7行目から9行目で配列に値を代入しています。
12行目では、配列の要素数を求めています。配列の要素数は
      配列名.length
で求めることができます。
 多次元配列
Lesson9で利用した配列を1次元配列と呼びます。これに対して、Javaでは2次元またはそれ以上の配列を作成することができます。Javaの多次元配列は、配列の配列として実装されます。Lesson10のプログラムでは、2次元配列を使っています。
class Lesson10{
   public static void main(String args[]){
      //配列を宣言してインスタンスを作成する
      int myarray[][] = new int[3][2];

      //配列に値を入れる
      myarray[0][0] = 5;
      myarray[0][1] = -7;
      myarray[1][0] = 48;
      myarray[1][1] = 2;
      myarray[2][0] = 8;
      myarray[2][1] = -13;

      //要素を表示する
      System.out.println(myarray[0][0]);
      System.out.println(myarray[1][0]);
      System.out.println(myarray[2][1]);
   }
}
このプログラムを実行すると次のようになります。
5
48
-13
★2次元配列を使うには★
2次元配列の使い方には、1次元配列とそれほど大きな違いはありません。1次元配列と同じように、4つの手順を踏んで利用することができます。
@配列の宣言
A配列のインスタンスを作成
B配列の各要素にアクセス
C特定の要素に値を代入
以下、それぞれの処理について見ていきましょう。
@配列の宣言
2次元配列を使うには、やはりはじめに変数を宣言してやる必要があります。変数の宣言は1次元配列の場合とほぼ同じで、次のような書式で行います。
    型名  変数名[ ] [ ] ;
型名、変数名の記述までは1次元配列と同じですが、変数名の後に続けるカッコが2つに増えています。要素の次元が1つ増えるため、インデックスを指定するためのカッコももう一つ余分につけてあるのです。
A配列のインスタンスの作成
2次元配列のインスタンス作成には次のような書式を用います。
    変数名 [ ] [ ] = new 型名 [ 要素数 1 ] [ 要素数2 ] ;
これも1次元配列の場合とほぼ同じですが、インスタンスの作成時には、2つの要素をそれぞれ別個に指定します。要素数1と要素数2が同じである必要はありません。
また、@の宣言とAのインスタンスの作成を1行でまとめて行うこともできます。サンプルプログラムの4行目ではこちらの方法を用いています。
B配列の要素にアクセスする
2次元配列の各要素へのアクセス方法も基本的には1次元配列と同じ考え方ですが、各要素のインデックス指定方法が少し複雑です。
C配列に値を入れる
配列のいずれかの要素への値の代入も、やはり同じ要領で行います。
     変数名 [ インデックス1 ] [ インデックス2 ] = 代入したい値;
サンプルプログラムの2次元配列には、次のような具合に値が代入されています。
2つめの要素
1つ目の要素 0 1
0 −7
1 48
2 ー13
 オブジェクトの配列
class Lesson11{
   public static void main(String args[]){
      //配列を宣言してインスタンスを作成する
      int myarray[] = new String[3];

      //配列に値を入れる
      myarray[0] = new String("あいうえお");
      myarray[1] = new String("かきくけこ");
      myarray[2] = new String("さしすせそ");

      //要素を表示する
      System.out.println(myarray[0]);
      System.out.println(myarray[1]);
      System.out.println(myarray[2]);
   }
}
ここでは、基本データ型の配列の作り方について説明しましたが、オブジェクトの配列を作ることも可能です。1次元でも多次元でもかまいません。作成手順は基本データ型のときと同じです。4つの手順を踏んで利用することができます。
@配列の宣言
A配列のインスタンスを作成
B配列の各要素にアクセス
C特定の要素に値を代入
このプログラムを実行すると次のようになります。
あいうえお
かきくけこ
さしすせそ
 コマンドライン引数
class Lesson12{
   public static void main(String args[]){
      //コマンドライン引数を表示する。
      System.out.println(args[0]);
      System.out.println(args[1]);
      System.out.println(args[2]);
   }
}
Javaアプリケーションのプログラムにはmainメソッドが必ず存在します。このメソッドは引数を一つとります。これはStringオブジェクトの配列(プログラム2行目のカッコの中)です。これらのオブジェクトはユーザーがコマンドラインに入力した引数を表します。ここでは、コマンドライン引数を取得する方法について説明します。
コマンドライン引数の個数はargs.lengthという形で取得することができます。これはint型です。
ここの引数はargs[0] , args[1] , args[2] ,…で操作します。
このプログラムはコマンドラインから次のように呼び出します。
 java Lesson12 abc 128 あえいうえお 
このとき、出力は次のようになります。
abc
128
あえいうえお