2010年8月30日月曜日

イベント

GUIではボタンを押したときに処理する事を、「イベント処理」event handlingといいます。

ボタンが押された時の処理記述、

bt.addActionListener(new TestActionListener());
↓↓↓↓↓↓↓↓
 class TestActionListener implements Actionlistener
    public void actionPerformed (ActionEvent e)
    {
        処理内容
     }
 ■actionPerformedメソッドはActionlistenerインターフェイスクラスのメソッドです。
■イベントを処理するクラスをリスナ
■イベントが発生するクラスをソース、たとえばボタンがソースになります。
■MouseAdapterはMouseListenerを実装した便利なクラスです。
■キーボードからの入力をした時、KeyAdapterを使います 、

KeyEventクラスのe.getKeyCode();でキーボードからの入力を

int型で受け取ります。

■GUIのイベントはWindowはwindowの閉じるボタンをおした時や、縮小や拡大などのイベントを行い
ます。

2010年8月23日月曜日

スレッドの基本

スレッド=複数の処理、
タスク=元々は軍事用語、空母や補給機などの役割をここに分けたもの、


実装方法は、
class スレッド実装クラス extends Thread{}


メインメソッド
 スレッド実装クラス cla = new スレッド実装クラス();
cla.start();//スレッド起動


↓↓↓↓↓↓↓↓↓

class スレッド実装クラス

public void run(){処理内容}


■処理を一秒間毎に処理する場合はtry&catch
のを記述し、
thread.sleep(1000);//と記述する、

■インターフェイスによるスレッドの実装
implements Runnable

を実装した、クラスを呼び出すには、
クラスのインスタンスを作る、

コンストラクタの引数でクラス変数を渡す、
Threadクラス変数.start();//スレッドの起動

■複数のスレッドが共有するフィールドの処理をする時は、メソッドに
synchronizedを指定する。

2010年8月20日金曜日

ArrayListは1次元
HashMapはキーと値を持つことが出来る、

入出力

System.out==標準出力;
System.in==標準入力;

■入出力の概念をストリームと言います。

ファイルを開いて書き込み、
new PrintWriter printwriter = new PrintWriter
(new BufferedWriter
(new FileWriter("text1.txt")))
System.exit(1)とはプログラムを終了する、番号はAPIで確認しましょう
■args[0]はコマンドラインからの入力を受け取ります。スペースで渡す時はスペースで区切りましょう。

2010年8月19日木曜日

import

/**
 *
 */
package rensei;

import static java.lang.Math.*;//(16)解答
import java.util.*;//(17)解答

import yjPlactice.Today;

/**
 * @author****
 *
 */
public class impTest1617 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // importのテストをしてみますね。
        double dbl1 = 0.0;
        double dbl2 = 0.0;

        dbl1 = 2.0;
        dbl2 = sqrt(dbl1);//6行目があるので、Math内のメソッドが単純名で呼べる

        System.out.println("root2 = " + dbl2);
        System.out.println(PI); // 23行目同様6行目があるので、
        //Math内のフィールド「PI」が単純名で呼べる

        Random random = new Random();
        // 7行目があるので、java.util内のRandomクラスが、単純名で使える。
        int r =random.nextInt(); // Random内のメソッドは任意
        System.out.println(r);
        // 上の行は、System.out.println(random.nextInt());
        // でもよいかな。int r がいらなくなる。

        Today t =new Today();
        System.out.print(t.getClass());
    }

}
/*実行結果****
root2 = 1.4142135623730951
3.141592653589793
186691675
class yjPlactice.Today
*/

例外処理

try
{
例外処理が起きそうな記述 ;//例外が発生した場合tryの以下の処理が行わない、
}
catch
{
例外処理がおきた時の処理;
}
finally
{
必ず行う処理;
}
■catchブロックが見つからない場合、呼び出し元のメソッドに戻ります。
必ず行いない処理はfinallyに記述しておきましょう。

IOExceptionは出入力のエラー、
ArrayIndexOutOfBoundsExceptionは不正インデックスによる配列参照 
など例外の種類によって使います。
Exceptionは例外処理のサブクラスを持っていいます。
処理中にExceptionIOExceptionより先に記述しておくと、すべて例外エラーが
受け取られますので、記述の順番に注意して下さい。
 

2010年8月18日水曜日

パッケージ

■パッケージの呼び出し
package パッケージ1;

public class クラス1{}


***********
上のパッケージを違うパッケージからの呼び出し
import パッケージ1;

 クラス1 cla1= new クラス1();//インポートしている
 クラス1 cla1= new パッケージ1.クラス1();//インポートしていない

2010年8月17日火曜日

eclipse導入

integrated
Development
Environment

統合された開発環境だそうです。

2010年8月5日木曜日

継承とインターフェイスの実装をやってみた、確かに便利です。

■親クラスのCarクラスに基本性能でガソリン量とナンバーを定義して、子クラスのF1クラスにターボとコースのを定義しています。追加で、
今回は、私がインターフェイスの動きを見る為に、インテーフェイスにのターボとコースの2つのインターフェイスを定義し、子クラスのF1クラスに実装しています。
*インターフェイスのtabを実装したクラスはshowTb()を必ず実装し、
*インターフェイスのcosを実装したクラスはcoss()を必ず実装し、大規模開発時にこのような
テンプレート的な物があると大変便利です。
interface tab
{
    int a = 777;
    void showTb();//ターボ力表示、実装したクラスはオーバーライドするメソッドが要ります
}

interface cos//コース表示メソッド
{
    void coss();
}
//■■■■■■Carクラス、スーパー■■■■■
class Car
{
    private int gas;
    private int num;
   
    public Car(int g,int n)
    {
        gas = g;
        num = n;
    }
    //*******ガス量:ナンバーメソッド******
    public void show()
    {
        System.out.println("ガス量:" + gas + "ナンバー:" + num);
    }

}
//■■■■■■F1クラス、サブ■■■■■
class F1 extends Car implements tab,cos//インターフェイスの実行
{
    String korsu;//F1のコース
    int tab = 10;//ターボに使う値
    public F1(String k,int g,int n)
    {
        super(g,n);//基本の値
        korsu = k;//コースの値
    }
    //*******コース名****
    public void showKorsu()
    {
        System.out.println("コース:" + korsu);
    }
   
    //******ターボ*****
    public void showTb()//インターフェイスにオーバーライドされるメソッド
    {
        System.out.println("ターボ:" + tab*a);
    }
   
    public void coss()//インターフェイスcosのcoss()メソッドにオーバーライドされるメソッド
    {
        System.out.println("コース:" + korsu);
    }
}

//■■■■■■メインメソッド■■■■■
class SapleInterface
{
    public static void main(String args[])
    {
        F1 f1 = new F1("プロス",100,7);
        f1.show();
        f1.showTb();//インターフェイスのメソッド実行、
        f1.showKorsu();//普通のメソッド
        f1.coss();//インターフェイスのメソッド実行、
        System.out.println(f1.a);//インターフェイスの定数を呼び出す事も出来る、
    }
}
■■■■■■■■実行結果■■■■■■■■■■
ガス量:100ナンバー:7
ターボ:7770
コース:プロス
コース:プロス
777

クラスの階層

■スーパークラスを2個継承したい場合に、インターフェイスを使う、
class F1 implenents インターフェイス1,インターフェイス2,インターフェイス3,//複数実装出来る
{
} 
■インターフェイスを拡張
interface f1{}
interface f2 extends f1{}

インターフェイス

interface f1//インターフェイスの宣言
{
void show();//抽象メソッド
}

■インターフェイスの構文
interface f1
{
 型名 フィールド名 = 式;//初期化、フィールドはデフォルトでpublic static finalです、定数
戻り型 メソッド名();//メソッド処理は定義しない
}

■インターフェイルを実装する、
class F1 implements f2{}

■インターフェイスの場合はフィールドとメソッドはすべて定数です。
また、処理のない、メソッドを持ちます。サブクラスのメソッドをオーバーライドして実行するなどして、
分かりやすい、処理を記述する事が出来ます。

■インターフェイスはテンプレートみたいに使うと、便利、
たとえば、サブクラスにf1のタイヤのサイズ、エンジンサイズの値の表示を実行する記述を
書いておき、インターフェイスでは、タイヤのサイズ、エンジンサイズを表示した時には、showF1();
としておくと、たくさんのサブクラスがある場合、インターフェイスshowF1()メソッド実行の時はタイヤのサイズ、エンジンサイズを表示と決められているので、テーンプレート的な役割を果たす、
 大変便利です。また、インターフェイスはフィールドがfinal定数なので内容の保持も使える、

抽象クラス

■abstract class F1{}//abstractの修飾子が付いたものは、オブジェクトを生成できない、
New出来ない
■ abstractは処理内容が定義されてないメソッドを持ちます。
■instanceof演算子

if(クラス変数 instanceof F1)//クラス変数がF1クラスか調べている、

2010年8月4日水曜日

サブクラス・スーパークラスのコンストラクタの動き、

メインメソッドからスーパークラスコンストラクタ引数3個があり、サブクラス引数4個のコンストラクタがあると定義し、メインメソッドからスーパークラスインスタンス生成のコンストラクタに引数3個をわたした場合、スーパークラスのコンストラクタ引数3個だけが呼び出されます。この時、サブクラスのコンストラクタは呼び出されません
また、メインメソッドでサブクラスのインスタンス生成、引数4個のコンストラクタを実行した場合、
サブクラスの引数4個のコンストラクタの中で自動的にsuperメソッド実行され、
スーパークラスには、引数無のコンストラクタを定義していないのでエラーがでます。
エラーを回避するには、 superメソッドに引数3を渡すか、スーパークラスに引数無のコンストラクタを定義する必要があります。

クラスの階層をつくる

■スーパークラス⇒サブクラス1⇒サブクラス1_1⇒サブクラス1_1_1と出来ます。
スーパークラスを指定しないextends 指定を行わない時は、オブジェクトクラススーパークラスになり、Object クラスは、クラス階層のルートです。すべてのクラスは、スーパークラスとして Object を持ちます。配列を含むすべてのオブジェクトは、このクラスのメソッドを実装します。
■JavaのクラスはすべてObjectクラスを継承しています
public String toString(){}ではObjectクラスのtoStringメソッドをオーバーライドしています。
■equals()メソッドは、同じオブジェクトを指しているか、調べる時に使います。帰り値はbooleanです。
Stringクラスequals()メソッドは、オブジェクトが同じを調べるのではなく、文字列が同じか調べている。

*Objectクラス:equals(Object obj)
          このオブジェクトと「等価」になるオブジェクトがあるかどうかを示します。
*Stringクラス:equals(Object anObject)
          この文字列と指定されたオブジェクトを比較します。
■getClassメソッド:getClass()
          この Object の実行時クラスを返します。class クラス名 = オブジェクト.getClass();
が戻り値はクラス名です。

2010年8月3日火曜日

final ファイナルの概要

■finalなメンバークラスはサブクラスを拡張できません。
■finalなメンバーメソッドはサブクラスを呼び出しできません。
■finalなメンバーフィールドは値を変更できません、また、定数なは、大文字英数字で指定します。
public fainal int NUM = 1;//と大文字英数字で指定します。
あと、初期化も指定してください、呼び出すときは、「クラス名.NUM」で呼び出します。

スーパークラスと同じ名前のメンバを使う

サブクラスからスーパークラスのメソッドの呼び出し、
//F1クラスはスーパークラスです。
//F2クラスはサブクラスです。
class F2 extends F1
{
  public void showF()
   {
     super.showF();//スーパークラスのshowFメソッドの呼び出し
   }
}
スーパークラスのフィールドにアクセス
class F1
{
 int i; //サブクラスと同じ名です。
}

class F2 extends F1
{
 int i;//スーパークラスと同じ名で
  public void showF()
  {
   super.i = 2;//スーパークラスのフィールド、変数iにアクセス
   i = 1; //サブクラスのフィールド、変数iにアクセス
  }
}

オーバーライドとオーバーロード

■オーバーロードはメソッドな同じで、引数や型が違うメソッド、
■オーバーライドは、サブクラス・スーパークラスでメソッド名・引数・型が同じメソッドを定義すること。

■どんな時に使うか考えている、
//F1:スーパークラス
//F2:サブクラス

F1クラスのメソッドを使う時は、良いマシーンを作るチームの時はF1クラスのメソッドを呼び出し、
悪いマシーンを作るチームの時は、F2クラスのメソッドを呼び出すとかかな?・・

スーパークラスの変数でオブジェクト

サブクラスのオブジェクトはスーパークラスの変数でも扱えます
F1 f1 = new F2();//とか出来ます。
■javaはオブジェクトが違うクラスの変数でも、オブジェクト自体のクラスのメソッドが呼び出される、
■スーパークラスの変数だと、サブクラスのメソッドは呼び出せません

■オーバーライド とは サブクラス・スーパークラスの同じメソッド名・同じ引数のメソッドを定義すること。

//F1クラスはスーパークラスです。
//F2クラスはサブクラスです。
//配列で扱われているオブジェクトがどのクラスでも、生成元のクラスのメソッドが呼び出されます。
F1 f1[];
f1 = new F1[2];

f1[0] = new F1();
f1[0].setCar(111,222);//生成したインスタンス元、スーパークラスのメソッドが実行

f1[1] = new F2();
f1[1].setCar(1233,432);//生成したインスタンス元、サブクラスのメソッドが実行
■1つのメソッドが状況に応じて動く事を多様性(ポリモーフィズム)という

BigDecimalを勉強しました。

http://d.hatena.ne.jp/nattou_curry_2/20090211/1234366254

に詳しく載っています。

2010年8月2日月曜日

継承クラスメソッドのオーバーライド

サブクラスにスーパクラスと同じ名前のメソッド

スーパクラスのprivateメンバはアクセスできない?

■スーパクラスのprivateメンバはサブクラスからアクセスできない?
こんな時は、スーパークラスのprivateメンバをprotectedメンバに変更する、
仕様に応じて記述しましょう。

super() スーパークラスのコンストラクタ指定

サブクラスのコンストラクタのなかで、super(x、y)
を記述すると、スーパークラスの引数2個ありのコンストラクタが呼び出され、引数が渡されて実行されます。
public F1car (int num, double b,int c)
{
  super(num,b);//スーパークラス引数2個が呼び出される、
}

メインメソッド
F1car f1car = new F1car(122,90.0,3);//サブクラスの引数3個の呼び出し、処理ではサブクラスのsuper()がスーパークラスに引数2このコンストラクタを呼び出す事になります。

this()はそのクラスの別のコンストの呼び出し、
super()はスーパークラスのコンストの呼び出し、

■分かりやすくF1を題材にしたよ


class Car//車としての基本性能
{
    private int cc;
    private int gas;
   
    public Car(int c,int g)
    {
        cc= c;
        gas = g;
        System.out.println("車としての機能排気量は" + cc + "で、" + "ガソリン量は" + gas + "です");
    }
}

class F1car extends Car//F1カーとしてのターボを追加

{
    private int tab;
   
    public F1car(int c, int t, int g)
    {
        super(c,g);//スーパクラス引数2個のコンストが呼び出しです
        tab = t;//ここはF1カーのターボを追加してます

        System.out.println("F1カーとしての機能のターボ量は" + tab + "です");
    }
}


class Sample1_1
{
    public static void main (String args[])
    {
        F1car f1carnew = new F1car(1500,2000,100);//コンストでsuper渡しで基本の車、                              //引数の100はターボに代入される
    }
}

/*********実行結果********
車としての機能排気量は1500で、ガソリン量は100です
F1カーとしての機能のターボ量は2000です

*/

継承

extends(クラスの拡張)
inheritance(継承)クラスのメンバーを受け継ぐ
superclass(元となるスーパークラス)
subclass(サブクラス、新しいクラス)

Car//スーパークラス
{
private 排気量;
private ナンバー;

  public Car()
  {
   排気量 = 0;
   ナンバー = 0;
  }
  public void setF1(cc,num)
  {
  
   排気量 = cc;
   ナンバー =num;  }
  public void show()
  {
   System.out.print(排気量、ナンバー);
  }
}

class F1car 拡張 Car//サブクラス

サーキットコース;


/メインメソッド/
public static void main(String agrs[])
{
 F1car f1car = new F1car();//サブクラスの呼び出し
  f1car.setF1(12,44);//スーパークラスのメソッドを呼び出し
f1car.show();//スーパークラスのメソッドを呼び出し
}
■サブクラスからスーパークラスのメンバを呼び出せます。継承、カプセル化、多様性がjavaの強みです。
■メインメソッドからサブクラスのオブジェクトが呼び出された時に、スーパークラスの引数無のコンストラクタが先に実行され、次にサブクラスのコンストラクタが呼び出されまあす。
■スーパークラスのコンストラクタはサブクラスに継承できません、引数無のコンストラクタが自動的に呼び出されます。