Author: switch over

A big outdoor sports lover & A IT engineer.

勝負

 仕事・生活・日常・日々坦々と過ごしていると忘れていくものがたくさんある。
 学生の頃はスポーツ・恋愛・勉強・・・とにかく勝負にこだわって生きていた。絶対に負けたくないことばかりがたくさんあった。勝ったり負けたりを繰り返し、でも最後には勝ちたいって。それだけ人とぶつかることは多くあったが、争いあうこと競い合うことで何よりも成長できた。
 世の中うまく渡っていくには、なるべく人とぶつからないようにぶつからないように柔軟に生きていったほうがいいのであろう。だが、何か忘れている。心の底から湧きあがってくるなにか魂をこめられるようなことがしばらくないような気がする。生きてる甲斐がしない。泣いたり笑ったり感動したり傷ついたり・・・喜怒哀楽がない。年齢を重ねるごとに感受性が鈍くなっているのがよくわかる。それはいた仕方がないことなのかもしれない。誰もが私と同じような無機質な想いを抱きながら日々過ごしているとして、それでも夢とロマンをもって生きていたって――――――
 そうだ、俺は勝負をしていない。男だったら勝負し続けるべきだ。男はいつの時代も戦って生きるのだ。自分に克つ。克己もいいが、他人との勝ち負けがはっきりでるスポーツなどをする。やられたら包み込むなんていわないで、やられたらやり返す。本気でぶつかって勝負してからでないとわからないこともある。それでしか味わえないものもある。
 あれこれ考えていたって人生は待ってくれない。お金を貯めることだけに日々追われ、気がついたら病院のベット上でチューブだらけになっていたなんてことにならないためにも、今すぐにでも自らアクションをおこそう。

14-10.Object

 
 

10.Object 
 Objectクラスはすべてのクラスの親クラスである。このクラスで定義されているメソッドはすべてサブクラスであるすべてのクラスで使用できる。逆に言えばこのクラスのメソッドは必要に応じてサブクラスでオーバーライドする必要があるということである。特にequalsメソッド、toStringメソッド、cloneメソッドはオーバーライドすることをおすすめする。
 

import java.langObject

コンストラクタ
Object()
      通常このクラスのインスタンスを作成する必要はない。
 
メソッド
pretected
Object
clone()
      自分自身の複製を作成する。例えばメンバー変数がint型などのプリミティブ型の場合はそれらをコピーするだけでよいが、メンバー変数に他のクラスのインスタンスがある場合、そのインスタンスの参照先をコピーするだけでよいか、それともそのインスタンスの複製をそのクラスのcloneメソッドを呼び出して作成する必要があるかは、クラスによって異なり、これはプログラマに任される。
      cloneメソッドを実装した場合はclone可能であることを示すために、Cloneableインターフェースをインプリメントする。逆にCloneableをインプリメントしていないクラスのcloneメソッドを呼ぼうとした場合にはCloneNotSupportedExceptionが投げられる。
boolean equals(Object obj)
      引数で与えられたインスタンスと自分自身が同じならばtrueを返す。クラスによって同じという概念が異なる場合がある。例えばメンバー変数にあるクラスが定義されている場合はその参照先が同じ(==演算子を使用する)ならば「同じ」と定義するのか、その中身が同じ(そのクラスの equalsメソッドを呼び出す)ならば「同じ」と定義するのかは、プログラマに任される。
String toString()
      このクラスの文字列表記を定義します。例えばデバッグ情報などを表示させたい場合には、このクラスのメンバー変数の値をすべて文字列に変換する。
      オーバーライドしない場合は、クラス名とそのインスタンスのハッシュコード(16進数)が返されます。ハッシュコードとは、すべてのインスタンスに固有の数字で、実行される度に異なる値になることもある。プラットフォームによって異なりますが、Windowsの場合はそのインスタンスが生成されたメモリアドレスがそのままハッシュコードになる。
void notify()
      このオブジェクトのモニターで待機中のスレッドを 1 つ再開する。詳しくは スレッド間通信参照
void notifyAll()
      このオブジェクトのモニターで待機中のスレッドをすべて再開する。詳しくは スレッド間通信参照
void wait()
      こ他のスレッドがこのオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すまで、現在のスレッドを待機させる。詳しくは スレッド間通信参照
void wait(long timeout)
      こ他のスレッドがこのオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すか、指定された時間(単位はミリ秒)が経過するまで、現在のスレッドを待機させる。詳しくは スレッド間通信参照
   

10.パッケージ

10章 パッケージ
1.パッケージとは
 パッケージとはクラスやインターフェースをひとまとめにしたものである。 
 例えば、ファイルが多くなってくると同じカテゴリのファイルは新しいフォルダを作成してそこに移動して、ファイルを整理する。Javaでも同じようなことができる。つまり、同じカテゴリのクラスやインターフェースは1つのパッケージにしている。
 ディレクトリと同じように、パッケージを階層構造にすることもできる。
 Javaでは標準で様々なクラスが用意されているが、これらも機能のカテゴリごとに分類され、パッケージ化されている。例えば、ネットワーク関係のクラスは「java.net」というパッケージに各クラスがしまわれている。これは、「java」パッケージという意味になる。そのほかにも「java.util」、「java.lang」など多くのパッケージが用意されている。
パッケージ  解説
java.lang Javaの中核を成す機能を担うクラス群
java.util ユーティリティ機能を提供するパッケージ
java.net ネットワーク機能を提供するパッケージ
java.io 入出力機能を提供するパッケージ
java.awt Javaの基本的なGUI機能(AWT:Abstract Window Toolkit)を提供するパッケージ
java.awt.event AWTの中でもイベントの機能(ボタンが押された場合など)を提供するパッケージ
 
2.パッケージの宣言 
 あるクラスをあるパッケージに格納するためにはいくつかの手続きが必要になる。一つ目はjavaファイルにパッケージ名を格納すること、二つ目はパッケージ名と同じディレクトリをつくり、そこにjavaファイルを格納することである。
1)Javaファイル(ソースファイル)の最初に
package packageName 
と記述する。 
packageNameはパッケージ名をあらわし、例えば下記のように記述する。
// entertainmentパッケージとして定義
package entertainment
// entertainmentパッケージの中のTVパッケージとして定義
package entertainment.TV
2)ディレクトリ
 パッケージ構成と同じディレクトリを構成する必要がある。つまり、上の例ではentertainmentパッケージとしたjavaファイルは、「entertainment」というディレクトリの中に格納する必要があり、entertainment.TVパッケージとしたjavaファイルは、「entertainment\TV」というディレクトリの中に格納する必要がある。
3)パッケージの指定 
 異なるパッケージのクラスを指定する場合は、「パッケージ名.クラス名」として参照する。詳しくは下記の例を参照。
4)例  
PackageDemo.java

public class PackageDemo{
    public static void main(String args[ ] ){
     // パッケージ内のクラスを参照する場合は「パッケージ名.クラス名」として参照する
        testPackage.A a = new testPackage.A( );
        testPackage.B b = new testPackage.B( );
        a.a1( );
        b.b1( );
     }
}
   

testPackage\A.java

// testPackageパッケージとして定義
package testPackage;

public class A{
     public void a1( ){
          System.out.println("a1");
     }
}
   

testPackage\B.java

// testPackageパッケージとして定義
package testPackage;

public class B{
  public void b1( ){

          System.out.println("b1");
     }
}
   

C:\java>javac PackageDemo.java

C:\java>java PackageDemo

a1
b1

C:\java>

 
3.クラスパス
 「entertainment.TV」というクラスを指定した場合、javaは以下のような場所を探す。
 1.カレントディレクトリの中の「entertainment」ディレクトリの中のTV.class
 2.Javaが標準で用意されているクラス郡の「entertainment」パッケージの中のTV.class
 しかし、これだけでは、自分で部品として使えるようにしたクラス群をパッケージとして作成した場合や、便利なパッケージをダウンロードしてきた場合、いちいち自分がこれから作ろうとするディレクトリにすべてコピーしなくてはならなくなる。これでは不便なので、一度部品として切り分けられるようにして作ったパッケージは、ある特定のディレクトリにおいておき、これを指定しておけば、いろいろなプログラムからそのパッケージをいつでも参照することができる。その設定がクラスパスである。
C:\java>set classpath=c:\java\mypackage;c:java\downloadpackage

C:\java>set classpath
CLASSPATH=c:\java\mypackage;c\java\downloadpackage

C:\java>

 クラスパスはUNIXやWindowsでは環境変数で設定する。
 このように設定すると、javaは
 1.カレントディレクトリの中の「entertainment」ディレクトリの中のTV.class
 2.c:\mypackage\entertainment\TV.class
 3.c:\downloadpackage\entertainment\TV.class
 4.Javaが標準で用意されているクラス郡の「entertainment」パッケージの中のTV.class
という手順でTV.classを探しに行く。
 
4.import
 testPackageパッケージ内のAクラスを指定するのに「testPackage.A」と記述した。このように「パッケージ.クラス名」と指定する方法を完全修飾名を指定するという。
 しかし、この方法は、わざわざパッケージを名をしてしなければならないので面倒である。そこで、あらかじめ「testPackage」を使うとJavaに指定してやれば、わざわざ完全修飾名で指定しなくてもすむ。つまり、C言語でいう「#include」のようなものである。Javaでは「#include」ではなく「import」というステートメントを使用する。
 importはjavaファイルのはじめに記述し、そのjava内で使用するクラスをimportの後に、「パッケージ名.クラス名」の形式で宣言する。そのパッケージ内のすべてのクラスを宣言したい場合は、クラス名を「*」として指定する。まだ、複数のパッケージを指定することもでき、その場合はimport行を何行も列挙する。
 以下に例を示す。左側は完全修飾名を指定して記述した場合で、右側はimportを使用して、使用するパッケージを宣言した例である。以下の二つの例は同じになる。
PackageDemo.java

public class PackageDemo{
    public static void main(String args[ ] ){
     // 完全修飾名
          testPackage.A a = new testPackage.A( );
          testPackage.B b = new testPackage.B( );
          a.a1( );
          b.b1( );
      }
}
   

PackageDemo.java

import testPackage.*;

public class PackageDemo{
     public static void main( String args[ ] ) {
     // 完全修飾名
          A a = new A( );
          B b = new B( );
          a.a1( );
          b.b1( );
      }
}

testPackage\B.java

// testPackageパッケージとして定義
package testPackage;

public class B{
  public void b1( ){
              System.out.println("b1");
     }
}
   

C:\java>javac PackageDemo.java

C:\java>java PackageDemo
a1
b1

C:\java>