駆け出しプログラマーのJava雑記帳
Amebaでブログを始めよう!

Javaだけじゃない。

WEBアプリケーションの開発。
これはもうJavaだけの問題じゃない。

このJavaに付随する様々な物が、厄介ではある。

サーブレット・JSP。
JSPってソースの形がHTMLそのものというか、HTMLなのだが、
フレームワークであるStruts(ストラッツ)で使われるタグライブラリ
(例えば、入力フォームのHTMLタグ「<input type="text" name="kazunari">」
みたいなのを「<html:text property="kazunari">」たいに書いたりする。)
や、最近ではSAStrutsなるものもあったりと、

フレームワークは便利な反面、覚えたり理解に努める部分が多いので、
それが自分にとって結構辛かったりする。

何を書きたいのか分からなくなってきたな・・・

見るところ、このアメブロのアドレスの最後が「.do」になっているところを見ると、
このサイトもStrutsで動いているのだろうか??

まあ、いっかww

簡単なArrayListの使い方を書いてみた。

Listというものがある。

ArrayListとLinkedListがあるが、

今までArrayListしか使ったことない。

調べてみると、使い方によってはどちらかが高速、低速になるのだとか。


ふーん。。。


配列っていうのは


String[] str = new String[3];

str[0] = "りんご";

str[1] = "みかん";

str[2] = "バナナ";


みたいな感じで使うのが基本のようだが、これってあらかじめ入れ物のの数が決まっている。。。

入れなきゃいけない数が分からん時はどうするのだ・・・?


こんな時にListを使う。


//Listを使用するためにインポートをします。

import java.util.ArrayList;
import java.util.List;


public class TestArrayList {

public static void main(String args[]){

//char型の配列を準備する。char型は文字リテラルを格納出来る型。
//「文字」なので一文字だけです。

char[] ch = {'お','か','あ','さ','ん','け','ー', 'き'};

//List型の配列を準備し、newして使えるようにします。
//<Character>というのは、ジェネリックスと呼ばれるもので、
//このList型は全てCharacter型でしかやり取りしません!と宣言しているものです。
//他の型を入れようとするとコンパイルエラーとなります。
List<Character> list = new ArrayList<Character>();

//addメソッドを使って、char型の配列をListにどんどん入れていきます。
//lengthはchに格納されている数を整数で返します。
//この場合だと「ch.length」は「8」という数字が返ってきます。
for(int i=0; i<ch.length; i++){
list.add(ch[i]);
}

//getメソッドを使って、char型の配列を出力します。
//size()はListに格納されている数を整数で返します。
for(int i=0; i<list.size(); i++){
System.out.print(list.get(i));
}

//見栄えよくするために改行しています。
//"\n"で改行されます

System.out.println("\n");

//ちなみにfor文はこんな感じで書くことも出来ます。
//char:変数の型
//ok:変数
//list:出力するListの変数名
for(char ok : list){
System.out.print(ok);
}

}

}


【出力結果】

おかあさんけーき

おかあさんけーき


息子がだだをこねているようです。

ArrayListはaddメソッドによってaddすると、後ろへ後ろへどんどん値を格納していきます。

そしてそれを取り出す時はgetメソッドを使います。


list.get(i);


iはfor文で回っているので、一番最初は0が来ますよね?

なのでlist.get(0);となりますが、これは「0番目に入っているものをgetせよ」ということです。

for文のiの値が1ずつ増えていって、Listの値を最初から順番に出力しているんですね。


Listの基本中の基本です、多分(笑)



お母さんと息子のケーキプログラム(参照型)

/**

*

*息子クラス(メインメソッド)

*

*/

public class Musuko {


public static void main(String args[]){

String serifumusuko = "息子:";
String serifu1 = "ただいまー!";
String serifu2 = "あ、手紙だ。";
String serifu3 = "よし、戸棚を見に行こう!今日のおやつは何かな~?。";
String serifu4 = "あ、!いちごショートケーキだ!やったぁ~(^^)";

//ナレーションを入れるため、Narationクラスをインスタンス化
Naration naration = new Naration();
System.out.println(naration.serifu1 + naration.serifu5);
//お母さんクラスをnewして、参照出来るようにインスタンス化
OkaasanPutTheOkitegami okaasan = new OkaasanPutTheOkitegami();
//お母さんクラスにあるケーキを、戸棚にセットする。Todanaクラスをインスタンス化
Todana todana = new Todana();
todana.setCake(okaasan.strawberryShortCake);
//ナレーション
System.out.println(naration.serifu1 + naration.serifu6);
//息子が学校から帰ってきました
System.out.println(serifumusuko + serifu1);
//息子がテーブルにある手紙を発見します
System.out.println(serifumusuko + serifu2);
//ナレーション
System.out.println(naration.serifu1 + naration.serifu2);
//お母さんからの置手紙を、受け取ります。
String okitegami = okaasan.okitegami();
//手紙を読む
System.out.println(okitegami);
//今日のおやつは何かと楽しみにしています。
System.out.println(serifumusuko + serifu3);
//ナレーション
System.out.println(naration.serifu1 + naration.serifu4);
//息子が戸棚を開けると中にいちごショートケーキが入っていました
System.out.println(serifumusuko + serifu4);
//息子が戸棚からいちごショートケーキを取り出すため、戸棚クラスをインスタンス化
// Todana todana = new Todana();
//戸棚クラスから参照する形で、いちごショートケーキを取り出します。
String strawberryShortCake = todana.cake;

//ナレーション
System.out.println(naration.serifu1 + naration.serifu7 + strawberryShortCake + naration.serifu8);
}
}


/**

*

*お母さんクラス(手紙を書くのと戸棚にケーキをセット)

*

*/

public class OkaasanPutTheOkitegami {

public String strawberryShortCake = "いちごショートケーキ";

private String okaasan = "お母さんの手紙:";
private String okitegami = "息子へ おやつは戸棚の中にあります。 お母さんより";

public String okitegami(){

String okaasanNoOkitegami = okaasan + okitegami;
return okaasanNoOkitegami;


}
}


/**

*

*ナレーションクラス(参照するだけなのでメソッドなし)

*

*/

public class Naration {
public String serifu1 = "ナレーション:";
public String serifu2 = "息子はテーブルにある手紙を見つけました。。";
public String serifu4 = "息子はお母さんの手紙を見て、戸棚を開けました。";
public String serifu5 = "お母さんは息子に手紙を書きました。";
public String serifu6 = "お母さんはケーキを戸棚にセットしました。";
public String serifu7 = "こうして息子は見事";
public String serifu8 = "にありつくことが出来ました、めでたしめでたし。";
}


/**

*

*戸棚クラス

*

*/

public class Todana {

public String cake;

//メインメソッドでケーキがここにセットされる
public void setCake(String cake) {
this.cake = cake;
}

}


【実行結果】

ナレーション:お母さんは息子に手紙を書きました。
ナレーション:お母さんはケーキを戸棚にセットしました。
息子:ただいまー!
息子:あ、手紙だ。
ナレーション:息子はテーブルにある手紙を見つけました。。
お母さんの手紙:息子へ おやつは戸棚の中にあります。 お母さんより
息子:よし、戸棚を見に行こう!今日のおやつは何かな~?。
ナレーション:息子はお母さんの手紙を見て、戸棚を開けました。
息子:あ、!いちごショートケーキだ!やったぁ~(^^)
ナレーション:こうして息子は見事いちごショートケーキにありつくことが出来ました、めでたしめでたし。



当初、戸棚にケーキを入れる部分は、お母さんクラスからやろうと思ったんですが、

メインメソッドからセットしないと、だめっぽかったので、メインメソッドでセットしています。

お母さんクラスは実行が終わると変数がメモリから削除されてしまうから・・・ですよね?

間違ってたらすいませんm(_ _)m


ソースを自分で考えて書くっていうのは、頭使いますねww

中々良い運動だと思います、これ(仕事なんだがwww)。



参照型

「参照型」という型があるのだが…
参照型という変数がある。
その名の通り、参照するための型だ。この変数自体には値は入っていない。じゃあ、何が入っているのだ?俺も最初は何のこっちゃ分からんかったが、最近ちょっとづつ分かるようになってきた。とりあえずさっき作ったソースをUP。


class TestRefer {
//mainメソッド。Javaは「public static void main」メソッドを最初に実行します。
public static void main(String args[]){
 
     //「TestGetRefer」クラスの値を参照するために、newして使えるようにします。
     TestGetRefer testGetRefer = new TestGetRefer();
 
     //「TestGetRefer」クラスで変数の初期化がされているString型を出力します。
     System.out.println(testGetRefer.apple + "は英語で「apple」です。");
     System.out.println(testGetRefer.orange + "は英語で「orange」です。");
     System.out.println(testGetRefer.banana + "は英語で「banana」です。");
 
     }

}

class TestGetRefer {
 
     //アクセス修飾子がpublicなString型の変数を初期化します。
     //このクラスでは処理を行わないため、メソッドは記述しません。
     public String apple = "りんご";
     public String orange = "オレンジ";
     public String banana = "バナナ";

     //この「public」を「private」に変更してしまうと、
     //
TestReferクラスから参照出来なくなります(コンパイルエラーになります)。


}

【実行結果】
りんごは英語で「apple」です。
オレンジは英語で「orange」です。
バナナは英語で「banana」です。


2つのクラスを用意。
TestRefer(メインメソッドのあるクラス)
TestGetRefer(publicなString型の変数のみ初期化)

まず、
TestGetReferクラスでString型の変数を初期化。
次にメインメソッドで以下のように書く。
TestGetRefer testGetRefer = new TestGetRefer();
↑これで、TestGetReferクラスの値をTestReferクラスから参照出来るようになった。
(変数名がtestGetReferになっているが、型に付ける名前なので、別に何でもいいです。)



TestGetReferという参照型の変数testGetReferを使って、
そのクラスの中にある変数を取得。

書き方は、

参照型の変数.(ドット)参照する変数;

これで
TestGetReferクラスにある変数をTestReferクラスに持って来れます。
で、最後に
System.out.printlnで出力。

参照型って、int型とかdouble型などの「プリミティブ型」と違い、
値そのものは入っていない。
じゃあ何が入っているのかというと、参照するための情報が入っている。

うーん、なんだそれ…って思う人居そうだ。
どう説明すれば…

お母さんとその息子が居るとしよう。
お母さんは毎日、息子のためにおやつを戸棚の中にしまっておく。
お母さんは、息子に「今日のおやつはケーキよ。戸棚にしまってしまってあるからね。」
という置手紙をしておく。
それを見た息子は、指定された戸棚を見に行く。
あ、ケーキがあった。
子供は、美味しそうにムシャムシャとケーキを頬張るのだった。

みたいな感じですかね。。。

お母さんは「置手紙」というケーキがある場所を示したものを息子に渡していますよね。
この置手紙が参照型の変数と思えば分かりやすいんじゃないでしょうか。。。
で、子供がメインメソッドです。置手紙を見た子供はその情報を元に、ケーキを参照する。
で、食べる。

今度、こんな感じのソース書いてみるかな。。。

経緯だ。

今日(もう昨日だが)は、本当にヘコんだ。
だって、何にも出来なかった。
全部結局やってもらってた。

このままではいかんのだ。

ということでこのブログを利用して、自分の技術力を上げようと思い立った。
同時に、自分と同じ立場の人たちにも分かりやすく書こうと考えた。

俺はJavaのプログラマー。
でも、本当はど素人に毛が生えただけなのだ。
でも、現場ではんなこたあ関係ない。
プロフェッショナルとして、仕事しないといけないのだ。

正直、この職業に転職したことを半分後悔している。
前の仕事の方が、時間も気持ちも余裕があったから。

でも、でもだ。

ピンチはチャンスなのだ。
今日の出来事も俺にこういう技術を整理するきっかけを与えてくれたのだ。
これをバネにすればいい。

ということで、宜しくお願いします。