サイトロゴ
この章で行う学習内容
 

パッケージ・インポート
パッケージ
パッケージとは、クラスをフォルダ分けし、管理したものであり
種類や機能毎にクラスを纏めておくことができる。
利点
①フォルダ分けされているので、ファイルの管理が行いやすくなる。
②フォルダが異なれば、同じ名前のクラスも作成できるようになる。
パッケージの作成
パッケージの開始となるフォルダを作成します。
フォルダの下に、更にフォルダを作っていくことで、パッケージが作成できます。

クラスファイルを作ります。
この時、必ずパッケージ宣言をします。
パッケージ宣言とは、このクラスはどのパッケージに存在しているかを、宣言することです。
構文
								package パッケージ名(フォルダ名); 
							
パッケージ宣言のルール
①必ずプログラムの先頭に記述すること
②パッケージは一つしか宣言できない
③パッケージ名はフォルダ名と同じにすること
インポート
通常、何かしらのクラスを実行した場合は、 同じパッケージ内に存在しているかどうか探しに行きます。 同じパッケージに存在していなければ、エラーとなってしまいます。 機能毎などでパッケージ分けしたクラスを使えないのでは意味がありません。 そこで、違うパッケージに存在しているクラスでも使えるようにする方法がインポートです。
インポートの仕方
利用するクラスにインポート宣言をし、他のパッケージにあるクラスを利用できるようにします
構文
								import 使用するクラスがあるパッケージ名.クラス名; 
							
インポート時のルール
①利用したいクラス名まで指定する
②インポートは複数することが出来る
③クラス名には拡張子は必要ない
例文1
								package dish.foods.meat;
								//①import dish②.foods.seasoning.③Pepper;
								//①import⇒インポート宣言
								//②.⇒フォルダの区切りはピリオドを使う
								//③Pepper⇒異なるパッケージにあるPepperクラスを使用するのでインポートを行う
								public class Beaf {
									public void addPepper ( ) {
										Pepper pepper = new Pepper();
										//インポートしているのでPepperクラスの生成が可能
									}
								}
							
 

javadoc
javadoc
コメントを記述していくのですが、そのコメントの書き方が若干かわります。
今までは // コメントや /* コメント */ でしたが、javadocのコメントでは
/** コメント */ になります。
これをクラス、フィールド、メソッドの上に書いていけばそれがjavadocになります。
例文 クラス
								/**
								* 計算機クラス
								*
								* @author RJC太郎
								*/
								public class Keisanki {
								}
							
例文 フィールド
								/** 名前 */
								private String name;

								/** 年齢 */
								private int age;
							
例文 メソッド
								/**
								* 引数で渡された数値を足し、結果を返す
								*
								* @param num 足し算する数値
								* @param num2 足し算する数値
								* @return 足し算結果
								*/
								public int plus ( int num , int num2 ) {
								 int ans = num + num2;
								 return ans;
								}
							
docタグの説明

タグの種類 説明
@author п 著作者 著作者を記述します。
@param п 引数名 п 説明 引数名とその引数の説明を記述します。
@return п 戻り値の説明 戻り値の説明をします。
@throws п 例外クラス名 п 説明 例外の名前とその説明を記述します。
пは半角スペースを表しています。

引数が複数ある場合は@paramを複数記述します。
throws(例外)に関しては別レベルで学習します。
Javadoc生成
javadocのコメントが書き終わったら、実際にjavadoc(説明書)を生成します。
javadocを生成するには、eclipseの「メニュー」→「プロジェクト」→
「javadocの生成」を選択します。
javadoc生成対象プロジェクトを選択し、後はjavadocの生成オプションを指定して 「終了」ボタンクリックでjavadocが生成されます。
 

static
static変数とは
static変数とはstatic修飾子がついている、クラスのフィールドのこと
インスタンスを生成しなくても、アクセスできます。
「クラスに固有」なので、すべてのインスタンスがそのフィールドを共有します。
利点
①インスタンスを生成しなくてもアクセスすることが出来る
構文
宣言方法
								修飾子 static 型 変数名;
							
「static」がついていること以外は今までの変数と宣言方法は同じです。
使用方法(呼び出し方法)
								クラス名.static変数名
							
インスタンスは生成しないので、インスタンス名ではなく、クラス名を使用して呼び出します。
インスタンス変数とstatic変数の違い
インスタンス変数
インスタンス毎に生成される変数
static変数
クラスに生成される変数
プログラム実行時に自動的に生成される変数
構文
								public class Car {
									/** メーカー */
									public static String maker;
									staticフィールド
									/** 色 */
									public String color;
										(インスタンス)フィールド
										 /**
										 * フィールドの値を表示する
										 */
										 public void show ( ) {
										 System.out.println( "メーカー:"+ maker )
										 System.out.println( "色:"+ color )
									 }
								}
							
次のmainクラスでcarクラスのインスタンスを生成後
各フィールドに値をセットする。その値をshowメソッドで表示してみましょう
								public class StaticSample {
									public static void main ( String[] args ) {
										// ヴィッツ生成
										Car vitz = new Car();

										// メーカー名にトヨタをセット
										Car.maker = "TOYOTA";

										// 色にグレーをセット
										vitz.color = "グレー";
										// 表示メソッドを呼び出す
										vitz.show();
									}
								}
							
showメソッドを呼び出した結果
									メーカー:toyota
									色:グレー
								
セットした値が表示されています。ここまでは今まで通りです。
mainクラスでcarクラスのインスタンスをもう1つ生成後static変数、インスタンス変数にそれぞれ値をセットし、showメソッドを呼び出します。
								public class StaticSample {
									public static void main ( String[] args ) {
										// ヴィッツ生成
										Car vitz = new Car();
										// メーカー名にトヨタをセット
										Car.maker = "TOYOTA";
										// 色にグレーをセット
										vitz.color = "グレー";

										// march生成
										Car march = new Car();
										// メーカー名に日産をセット
										Car.maker = "日産";
										//色にブルーをセット
										march.color = "ブルー";

										// 表示メソッドを呼び出す
										vitz.show();
										//表示メソッドを呼び出す
									}
								}
							
showメソッドを呼び出した結果
									メーカー:日産
									色:グレー
									メーカー:日産
									色:ブルー
								
vitzのメーカー名はmarchと同様の日産が表示され、 先ほど表示されていたtoyotaが表示されていない。 色はインスタンス毎のフィールドの為、 それぞれ先ほどセットしたグレー、ブルーが表示される static変数は「クラスに固有」なので、 インスタンスを複数生成しても同じ変数を見ている。
staticメソッド
staticメソッドとはstatic修飾子がついているメソッドのこと。
フィールド同様、インスタンスを生成しなくてもアクセスできる。
構文
宣言方法
								修飾子 static 戻り値 staticメソッド名(引数・・・){}
							
「static」がついていること以外は今までのメソッドと宣言方法は同じです。
使用方法(呼び出し方法)
								クラス名.staticメソッド名
							
インスタンスは生成しないので、インスタンス名ではなく、クラス名を使用して呼び出します。
例文
								public class Words {
									/**
									* 朝の挨拶を表示する
									*/
									public static void morning ( ) {
									//staticメソッド

										System.out.println( "おはよう" );
									}
								}
							
次のMainクラスでWordsクラスにあるmorningメソッドを呼び出してみましょう。
								public class StaticSample {
									public static void main ( String[] args ) {
										// staticメソッドの呼び出し
										Words.morning();
										morningメソッドはstaticメソッドの為、
										//インスタンスは生成せず、クラス名.メソッド名で呼び出す
									}
								}
							
morningメソッドを呼び出した結果
morningメソッドを呼び出した結果
									☆おはよう☆
								
staticメソッドのルール
staticメソッドから、インスタンスメソッドやインスタンス変数にアクセスすることはできません。
何故なら、インスタンスメソッドやインスタンス変数はインスタンスが無ければ
使用することは出来ませんが、staticメソッドはインスタンスを生成しなくても使用することができます。
要するに、staticメソッド内で、インスタンスメソッドを呼ぶ際、 そのメソッドを呼ぶ為に必要なインスタンスが生成されているとは限らないからです。
staticを使用する際の注意点
static変数、staticメソッドはインスタンスを生成しなくても
実行時に自動的に作られる。(作られるということはメモリ上に確保されるということ) その為、1度しか使用しないもの、プログラムの最後まで使用しないものまで作られてしまう為、 クラス数が多くなった場合に、非常にメモリを消費してしまう恐れがある。
インスタンスを生成しなくてもよい為、非常に便利だと思われたかもしれないが、
全てをstaticにせず、使用する際は、注意をして使用する必要がある。
 

オーバーロード
オーバーロードとは
同一クラス内で同じ名前で複数のメソッド、又は、コンストラクタを定義すること
但し、引数の数や型が異なるもの。
*同じ名前でも引数が異なると別のメソッド、又は、コンストラクタとして扱われる。
例文(メソッドのオーバーロード)
								public class Keisanki {
									public int plus ( int i , int j ) {
									//引数がint型2つのplusメソッド
										int ans = i + j ;
										return ans;
									}
									public int plus ( int i , int j , int k) {
									//引数がint型3つのplusメソッド
										int ans = i + j + k ;
										return ans;
									}
								}
								//引数の数が異なる為、コンパイルエラーにはならない
							
次のMainクラスでKeisankiクラスにあるplusメソッドを呼び出してみましょう。
								public class OrverSample {
									public static void main ( String[] args ) {
										Keisanki keisanki = new Keisanki();
										keisanki.plus ( 3, 5 );
										//引数がint型2つのplusメソッドが呼び出される
										keisanki.plus ( 2, 7, 4 );
										//引数がint型3つのplusメソッドが呼び出される
									}
								}
							
メソッドのオーバーロードの注意点
オーバーロードは原則として、引数の数や型が異なるだけで
同じ処理を行うメソッドを作る場合に使うようにします。
同じメソッド名でありながら、異なる処理を行うメソッドを作ると
メソッド名が表す処理内容に一貫性がなくなる為
開発しづらく、又、読みづらいプログラムになってしまいます。
例文(メソッドのオーバーロード)
								public class Human {
									private String name;
									private int age
									public Human ( String name ) {
									//引数がStringt型1つのコンストラクタ
										this.name = name;
										this.age = 0;
									}
									public Human ( int age ) {
									//引数がint型1つのコンストラクタ
										this.name = "匿名";
									this.age = age;
									}
								}
								//引数の数が異なる為、コンパイルエラーにはならない
							
次のMainクラスでHumanクラスのインスタンスを生成してみましょう。
								public class OrverSample {
									public static void main ( String[] args ) {
										Human hA = new Human( "佐藤" );
										//引数がString型1つのコンストラクタが呼び出される
										Human hB = new Human( 24 );
										//引数がint型1つのコンストラクタが呼び出される
									}
								}
							
 

オブジェクト型

オブジェクト型とは?
javaで扱う型にはプリミティブ型(int、char、boolean等)以外に、オブジェクト型というものがあります。
(※オブジェクト型のことを参照型ともいいますが、詳細は別のレベルで説明します)
オブジェクト型は文字列型、クラス型、配列型の3つに分類できます。
オブジェクト型の種類
文字列型
1文字以上で構成された文字列は、Stringというクラスのオブジェクトです。
例文
								String str = "abcd";
								String str = new String("abcd");
								//同じ意味
							
クラス型
java言語が定義しているクラスや、プログラマが作成したクラスがこれに該当します。
								MyTest mt = new MyTest();
							
配列型
同じ型(プリミティブ型、オブジェクト型)のデータを複数格納できるオブジェクトです。
例文
								int[] numArray = new int[2];
								numArray[0] = 1;
								numArray[1] = 2;

								String[] strArray = new String[2];
								strArray[0] = "abc";
								strArray[1] = "def";
							
NULL

NULLとは?
オブジェクト自体が値を持たない事を示す特別な文字です。
今までプリミティブ型では、初期値の設定の時に下記のような処理をしていました。
例文
								int i = 0 ;
								double d = 0 ; 
							
オブジェクト型では、初期値の設定時に下記のように処理をします。
								String str = null ;
								int[ ] arrayInt = null ; 
							
ここで注意してほしいのは、string型における初期値の設定時です。
下記の例を見てください。
								String str = null ;	//---①
								String str = “”;	//---② 
							
①は、strという変数にnullを代入しています。この場合strの中身には、
stringのオブジェクトの実態(インスタンス)が無い状態になっています。
②は、strという変数に「""」(空文字)を代入しています。この場合、strの中身には 「""」というオブジェクトの実態は存在している事になります。 nullは上記のような代入の他に、比較演算子を使用し比較することも出来ます。
例文
								public class Null_Sample{
									public static void main(String[ ] args){
										//Stringの変数にnullを代入
										String strNull = null;
										//Stringの変数に空文字を代入
										String strKara = "";

										//それぞれを表示
										System.out.println( "null:【" + strNull + "】");
										System.out.println( "strKara:
										【" + strKara + "】");

										//比較演算子を使用しnullを判定
										if(strNull == null){
										//NULLかどうかの判定は比較演算子の「= =」をつかう
											System.out.println("strNullの中身:
												【" + strNull + "】");
										}
										// equalsメソッドを使用し空文字かどうかを判定
										if(””.equals( strKara ) ){
											System.out.println(" strKaraの中身:
												【" + strKara + "】");
										}
									}
								}
							
 

Bean

Beanとは
Beanクラスとは値の 設定・保持・取り出し をするのみのクラスの事を言い、
構文
									・フィールド(設定)
									・フィールドの修飾子はprivateにする
									・setメソッド(保持)
									・getメソッド(取り出し)
								
の3つで構成されたクラスです。
このように内部構造(フィールド)を外部(他のクラス)から隠す事(見えなくする事)をJAVA のオブジェクト指向に1つであるカプセル化と呼びます。
例文(Beanクラス)
									public class UserBean {
										/** 名前 */
										private String name;
										//フィールド(保持)

										/**
										* 引数で渡ってきたnameをフィールドに設定するメソッド
										* @param name 名前
										*/
										public void setName( String name ) {
										//setメソッド(設定)
											this.name = name;
										}

										/**
										* フィールドに保持されているのnameを取り出すメソッド
										* @return name 名前
										*/
										public String getName() {
										//getメソッド(取り出し)
											return name;
										}
									}
							
例文(Beanクラスを呼び出すMainクラス)
								public class Main {
									public static void main(Stirng[ ] args){
										//UserBeanのインスタンスを2つ生成
										UserBean ub1 = new UserBean( ) ;
										UserBean ub2 = new UserBean( ) ;

										//インスタンス名ub1を使用し名前と年齢を設定する
										ub1.setName( "Aさん" );
										ub1.setAge( 20 );

										//インスタンス名ub2を使用し名前と年齢を設定する
										ub2.setName( "Bさん" );
										ub2.setAge( 30 );
										//インスタンス名ub1を使用し名前と年齢を表示する
										System.out.println( ub1.getName( ) );
										System.out.println( ub1.getAge( ) );

										//インスタンス名ub2を使用し名前と年齢を表示する
										System.out.println( ub2.getName( ) );
										System.out.println( ub2.getAge( ) );
									}
								}
							
上記プログラムを実行した結果
名前 年齢
Aさん 20   ←ub1
Bさん 30   ←ub2
 

StringBuffer

StringBufferとは
stringbufferとは、文字列を扱う為のクラスです。では、stringとは何が違うのでしょうか?
stringは特別で、new をしなくても使えます。
今までは、「 string s = “あ”; 」でした。
これは省略しているだけで、実際には
「 string s = new string( “あ” ); 」
と同じ意味になり、今まで使ってきた「string」というのはクラス
ということになります。
クラスということは、インスタンスを生成しているということです。
stringbufferクラスも同じようにクラスですので、
インスタンスを生成しなければなりません。
インスタンスが生成されるとpcのメモリというところに値を持たせる為、
メモリの場所を新たに確保します。
例えば、次のような処理をしたとします。
例文
								public static void main ( String[] args ) {
									String s;
									for (int i = 0; i < 10; i++){
										s += i;
									}
								} 
							
実は、s += i ;も省略しているだけで、s = new string( s + i );と同じ
意味になり、このfor文では、インスタンスを複数生成していることになります。
このプログラムでは11箇所のメモリの場所を確保しているということになります。

このような処理が続くと、pcのメモリがいっぱいになってしまいます。
これを防いでくれるのが、stringbufferクラスになります。
stringbufferクラスは、確保した場所に値を追加することができます。
その為、メモリの場所は1箇所だけで済む事になります。
API

APIとは
javaにはあらかじめ数多くのクラスが「クラスライブラリ」として用意されています。
クラスライブラリとはあらかじめjavaのプログラミングに必要と思われる基本機能クラスを パッケージに分けて提供しているものです。
要は、良く使用する機能をjava側が用意してくれているというわけです。
ですが、実際にプログラムしたわけではありませんので、
どのような処理がされているのかは見ることが出来ません。
apiとはそのクラスライブラリを使用する為の「説明書」のようなものです。
どのような機能であるか、どのように使用するかが載っています。
下記のurlにアクセスすると、次のページが表示されます。
url:http://docs.oracle.com/javase/jp/6/api/
APIの使用方法 1
実際にapiを使用してみましょう。
今回はstringbufferクラスのlengthメソッドを使用してみます。
<手順1> stringbufferクラスはjava.langパッケージ以下にあるクラスです。
①からjava.langを探しクリックすると、
②の欄にjava.langパッケージにあるクラスの一覧が表示されます。
この中からstringbufferクラスを探しクリックすると、③にstringbufferクラスが出現します。
APIの使用方法 2
<手順2>
下にスクロールさせていくと、stringbufferクラスにあるフィールドやコンストラクタ、
メソッドの一覧が記載されています。
今回はこの中のlengthメソッドを使用したいので、
「メソッドの概要」からlengthメソッドを探し、lengthをクリックするとメソッド詳細画面に変わります。
APIの使用方法 3
<手順3>
詳細画面にはlengthメソッドの処理内容が記載されています。
まず、引数、戻り値が何かを確認します。
以下の【a】が指す場所を見ると引数はなしということが分かります。
【b】を見ると戻り値がint型であるということが分かります。
要するに、lengthメソッドの説明を見て、以下のようなクラスが想像できなければなりません。
例文
								public class StringBuffer {
									public int length ( ) {
									//内容は分からないが何かの処理がされる

									return;
									}
								}
							
lengthメソッド内の具体的なプログラム内容は想像できなくても良いです。
「なんとなく、文字列の長さを返すのかな」で良いです。
この「なんとなく~」を「○○するメソッドです」と言い切れるようになる為には、
実際に対象のメソッドを使用してみることです。
実際に使用し、結果を自らの目で確かめていく癖をつけていって下さい。
クラス名、戻り値、引数が分かれば、対象のメソッドは使用することができるはずです。
APIの使用方法 4
<手順4>
実際にstringbufferクラスのlengthメソッドを使用してみましょう。
							public class ApiSample {
								public static void main ( String[] args ) {
									//☆StringBufferクラスのインスタンスを生成します
									StingBuffer sb = new StringBuffer(”あいうえお”);

									int len = sb.length();
									//☆メソッドの呼び出しはインスタンス名.メソッド名ですよね。
									引数、戻り値を合わせる点も今までと同様です。
									System.out.println(len);
								}
							}							
							
<出力結果>
出力結果は「5」となりました。stringbufferの引数の「あいうえお」からどのようにすれば 「5」という数字が出てきたのか想像を膨らませてください・・・
そうです。「5」という数字は文字数のことを表していますので、 lentghメソッドは対象文字列の文字数をしらべてくれるメソッドということがわかりました。

見慣れない言葉などに戸惑うことがあるかと思いますが、
分からなければ、必ず使用してみるということを心がけてください。
 

ラッパークラス

ラッパークラス
プリミティブ型をオブジェクトとして扱えるようにする為のクラスをラッパークラスといいます。
オブジェクトがプリミティブ型を包んでいる(ラップしている)イメージです。
利点
① プリミティブ型の値を包んで、対応するクラスのインスタンスにすることが出来る
② 値を他の型に変換したりすることが出来る便利なメソッドがつかえる
ラッパークラスの種類
javaでは各プリミティブ型に対応するラッパークラスが用意されています。
プリミティブ型 オブジェクト型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
それぞれのプリミティブ型に対応したオブジェクト型をラッパークラスという
ラッパークラス
ラッパークラスの生成
プリミティブ型データのオブジェクト化は、
各ラッパークラスのコンストラクタを呼び出行います。
【int型データを保持したラッパークラスを生成する例】
								int a = 10:
									//↓  オブジェクト化
								Integer integer = new Integer(a);
							
要素数の取得方法 ラッパークラスからプリミティブ型データの取り出し
各ラッパークラスには、保持しているデータをプリミティブ型で返してくれるメソッドが定義されています。
(※詳細は各ラッパークラスのapiを参照して下さい)
【int型データを保持したラッパークラスからint型データを取り出す例】
								Integer integer = new Integer(10);
								//	↓  intデータの取り出し
								int a = integer.intValue();