2009年2月アーカイブ

コンストラクタ

サブクラスでスーパクラスのコンストラクタが呼び出されてない場合
サブクラスのコンストラクタ呼び出し直後に、暗黙にSuper();が追加されることになり、スーパークラスにはデフォルトコンストラクタが必須になる。(スーパークラスに引数有りのコンストラクタしかない場合)

クラス名

  • publicなクラスはクラス名とファイル名は同じでなければいけない。
  • public出ないクラスはファイル名は任意に出来る。

Continue文

1番内側の繰り返しの先頭に戻る。その際Whileなdの条件式がfalseの場合はWhileのなかの式が実行されない。

instanceOf演算子

Object str = new String("Hello"); if (str instanceOf String) {}→true if (str instanceOf Object) {}→true
*javaの全てのクラスはObject型を継承しているので、~ instanceOf Objectはtrueになる。

NumberFormatクラス

メソッド


  • getInstance()・・・小数点のある数値の書式化を行う、汎用数値フォーマットを作成する

  • getNumberInstance()・・・小数点のある数値の書式化を行う、汎用数値フォーマットを作成する

  • parse()・・・書式化されたデータを読み込むときに利用。返り値はNumber。

  • format()・・・書式化されてないデータを書式化する

演算子

優先順位
四則演算>比較(==)>代入(=)

|演算子
両辺にboolean式を指定する。じゃないと、コンパイルエラー。

ex.
if((i == ++j) | (i++ == j)) { ←i++の後置演算はintが返るためコンパイルエラー
}

javaコマンド

カレントフォルダを直下に移動しないでjavaコマンドを使う方法
パッケージ名~クラス名までフル指定する

ex. java org.abc.Smaple

javacコマンド

-classpathまたは-cp・・・クラスパスの設定
-d・・・パッケージに対応するディレクトリを作成する
-D・・・システムプロパティを設定する。指定時にスペースをいれない

Package文

必ず一番最初にかく。importよりも先!

Comparetorインターフェース

ソート方法のみ定義したクラスを作れる

メソッド
int compare(T o1, T o2)・・・これをオーバーライドする。第二引数にたいしてcompareToすると降順になる。

昇順の場合
import java.util.*;
class SortMethod implements Comparetor {
public int compare(Employee emp1,Employee emp2) {
retrun emp1.getId().compareTo(emp2.getId());
}

}

Comparableインターフェース

メソッド
compareTo()・・・戻り値がせいの値だった場合後ろとみなされる。
idの昇順の例

class Employee implements Comparable {
int id;
//省略
public int compareTo(Employee o) {
retrurn id. - o.id; //idの昇順
}
}

Collectionsクラス

メソッド


  • revese()・・・listないの要素を逆順に並べかえる。listがコピーされていた場合、オリジナルのlistもリバースされるので注意。

  • sort()・・・引数のlistに変更したオブジェクトはComparableインターフェースを実装している必要がある。実装して無いとコンパイルエラー。違うクラスの混ざったソートは指定しない限り、実行時エラー。自作クラスの場合はComparableインターフェースのint compareTo(T o)を実装し、ソート順序を定義する必要があるので注意。ソート順はスペース、大文字、小文字の順にソートされる。詳しくはこちら

  • binarySerch()・・・(引数2つの場合)第1引数のlistから、第2引数を検索し、そのインデックスを返す。検索対象が見つからなかったときは「-index-1」(indexは挿入されているべきインデックス)が返される。
    (引数3つの場合))第1引数のlistから、第2引数オブジェクトを検索し、第3引数はソート順序をしてする。ただし、第3引数のソートはあらかじめ行われていないと「-1」が返る。また同じソート(方法)を使用しないと正しい結果がでない。

Arraysクラス

配列を操作するクラス。

メソッド
asList()・・・指定した配列をListに変換する。コピー元と同じ順序で内容をコピーする
Sort()・・・配列は自然順序で並べ替えられる

toString()

System.out,println(obj);
上記の場合、暗黙的にtoString()が呼ばれる。

ジェネリックス

  • 左辺と右辺は原則同じ型でないといけない。しかし片方しか指定していなくても、警告は出るがコンパイルは通る。違う型だと文法的にNG(継承関係にあってもNG)。ただし左辺にワイルドカードが入る場合はOK.
  • クラスの宣言ではワイルドカードが使えないので、Tを使って表現する

Set<Integer>の入ったリストを作る場合の書き方

List> list =new ArrayList>();

多態性とジェネリックス記法(ワイルドカード)


  • ・・・そのクラスとサブクラスを許可。クラス名のかわりにインタフェース名もextndsで可能。ただしこれを利用して作成された変数に要素を追加するとコンパイルエラー

  • ・・・そのクラスとスーパークラスを許可

  • ・・・どのクラスも許可。ただしこれを利用して作成された変数に要素を追加するとコンパイルエラー

スレッドとジェネリックス
writeメソッドの引数になるのは直列化可能なオブジェクトだけ。直列化可能なオブジェクトとはserializableインターフェースを実装したクラスのオブジェクトの事。その為以下のような書き方になる。

void write(Listextends Srializable> list) {・・・}

独自のジェネリックスメソッド記法
構文例

public void func (T t) {};

引数にはextendsを利用して型の範囲を指定できない。

ジェネリックスを使用しないリストの場合
ジェネリックスを使用しない場合、取り出したオブジェクトの型はObject型になる

List list = new ArrayList()
for {Animal a: list} { ←ここでコンパイルエラー
・・・}

hashメソッド

定義
public int hashCode()

規則


  • equals()で2つのオブジェクトが等価とされた場合、どちらのオブジェクトでhashCode()が呼ばれても、結果は同じ整数値にならなければならない。

  • equals()で2つのオブジェクトが非等価の場合、どちらのオブジェクトでhashCode()が呼ばれても、結果は同じ整数値になってもかまわない。

  • equals()をオーバーライドしたら、hashCode()もオーバーライドする必要がある。この規則を守らなくてもコンパイルエラーにはならない。

  • equals()で等価とされても、一度アプリを終了したら同じ整数値が返されるとはかぎらない

equalsメソッドをオーバーライドしない場合
ObjectクラスのhashCode()が呼ばれる。

注意
transient(一時変数、直列化しない変数)は直列化復元された時、hashコードが変わることがあるので使用しないほうが良い。

equalsメソッド

定義
public boolean equals(Object obj)

==との違い
==は同じ参照かを比較する
equals()は意味的に同じかを比較する


オーバーライド
クラスでequals()をオーバーライドしないと、Objectクラスのequalsが呼ばれ、==と同じ意味になる

注意
transient(一時変数、直列化しない変数)は直列化復元された時、hashコードが変わることがあるので使用しないほうが良い。

Mapのキーになるクラスはequals()とhashCode()をオーバーライドしないと想定した結果にならないので注意。

Hashtable                          


  • 同期化しているキー値をもnullは不可。

HashMap


  • キーをハッシュコードにより管理

  • キーにnullは1つだけ許す。

  • 値のnullは重複可

  • 同期化してない

  • equals()とhashCode()をオーバーライドしてない時、既に同じキーが登録されていたら、新しい値に書き換えられてしまう。

  • LinkedHashMap

    • 順序つきのHashMap

    • 要素同士が双方向にリンクしている



SortedMap(マーカー)


  • TreeMap

    • ソート済みのMap

    • ソートはキーが昇順に並べ替えられる。つまり順序が決まっている



HashSet                               


  • ハッシュコードで要素を管理

  • 要素の重複は認めず。(ハッシュが同じで、equals()の結果が同じものは2つ登録できない)

  • 順序を問わない場合に使用(つまりソートしない)

  • LinkedHashSet

    • 順序つきのHashSet

    • 要素同士がリンクしている

    • hashCode()がオーバーライドされていないと、同じ要素を追加した時に、ObjectのhashCode()が呼ばれ別のオブジェクトと判断される。その為、同じようそのものが登録できてしまうので注意




SortedSet(マーカー)

  • TreeSet

    • ソート済みのSet



LinkedList                               


  • 要素同士が双方向にリンクしている

  • 挿入や削除が高速

  • 同期化してない

  • キューの機能も持つ


PriorityQueue


  • 要素に順序あり

  • 作成時に引数に指定された順序規則によって整列する。引数無しの場合は自然順。

  • 優先度の高いものから処理

  • 同期化してない


共通メソッド
メソッド

  • offer()・・・引数にしてしたオブジェクトをキューに追加

  • peek()・・・キューの先頭にあるオブジェクトを返す

  • poll()・・・キューの先頭のオブジェクトを取得して、キューから削除する。何もキューから無くなったらnullを返す。

Listインターフェースの実装

ArrayList


  • ランダムアクセスを実装している。

  • 反復処理の速度が速い

  • 同期化してない


Vector


  • ランダムアクセスを実装している。

  • 同期化している

  • 古いクラス


LinkedList


  • 要素同士が双方向にリンクしている

  • 挿入や削除が高速

  • 同期化してない

  • キューの機能も持つ

イテレーター

  • コレクションに対して順番にアクセス(リニアアクセス)を提供
  • 拡張For文のカッコ内には利用不可

コレクション

List, Map,Set , Queueの構造
List


  • インデックスで値を管理

  • 値は重複可能

  • 順序有り

Map


  • キーと値を組み合わせて管理

  • キーの重複は不可。値は重複可。

  • 順序なし

Set


  • 重複のないオブジェクトを管理

  • 順序無し

Queue


  • 待ち行列として管理(プリンタのキューみたいな感じ)

  • 値は重複可能

  • 順序有り


命名規則
定義(インターフェース)・・・単数形 ex.Collection
実装(クラス)・・・複数形 ex.Collections

集約

集約関係
あるオブジェクトが別のオブジェクトを1部分として所有する関係。=has-a関係=part-of関係
以下のようなものもhas-a

public intarfacace TestA()
public class TestB {
private TestA a; ←ここで実装はしてないが、この書き方はOK
}

オートボクシング

  • Object型に基本データ型を参照させようとした場合、オートボクシングでコンパイルエラーにはならない
  • String型のデータはInteger型に自動変換できない、コンパイルエラー。*コマンドライン引数などで注意

オーバーライド

  • final修飾子がついているものはオーバーライドできない.
  • 引数の情報がまったく同じでないとコンパイルエラー。

JVMがargsオブジェクトを作成するので、ヌルポにはならない。

オーバーロード

  • 引数の型、個数、並びが一致するメソッドは同一クラス内に複数定義できない。
  • 返り値は一致している必要がある。
  • アクセス修飾子は何でもかまわない。

Thread

メソッド


  • run()・・・実行するスレッドの処理を行う。publicで定義されているのでオーバーライド時注意。runメソッドが始まると優先順位の高いスレッドが出来ても終了まで続行、その後スレッドも終了する。

  • start()・・・スレッドを実行可能な待機状態にする
    *一度実行したスレッドを再び実行することはできない。以下は実行時エラー。
    t.start();
    t.start();


  • sleap()・・・実行中のスレッドを指定したミリ秒一時停止にする。なお時間指定必須。要try~catch文

  • yield()・・・現在実行中のスレッドを休止させ、他のスレッドを実行可能にする。

  • join()・・・スレッドが終了するまで、他のスレッドを待機させる。要try~catch文


*synchronizedブロックを抜けるとロックが解除されて、実行可能になる


static変数にアクセスする複数スレッドの場合
メソッドの途中でスレッドが切り替わる可能性もある。ので、static変数が中途半端に変更されているタイミングもある。


同じオブジェクトを参照しているスレッドの場合
以下のようなケース

A a = new A();
new thread(a).start();
new thread(a).start();

この場合staticな変数の場合と同じで、両方のスレッドが同じaオブジェクトを参照している。


匿名クラス内でのRunnableインターフェースの実装

public static void main (String args[]) {
Runnnable r = new Runnble() { ←匿名クラス内ではインターフェースだがNewできてしまう。
public void run() {
・・・
}
};
}


同期化


  • syncronized(a) {・・・}というブロックではオブジェクトaに対してロックがかかる。文字列を追加する順番などに便利。staticな感じになる。

  • syncronizedメソッドでは参照しているオブジェクトのロックフラグを取得する。同じオブジェクトを参照しているスレッドが二つあった時、スレッドaがフラグを取得したらaのrun()が終了するまでスレッドbはフラグを取得できない。

  • syncronized() {・・・}の()にはオブジェクトを指定しないとコンパイルエラー。基本データ型はNG。this()この場合そのクラスの指定はOK。
    syncronized(A.class) {・・・} という感じで利用



Objectクラス

メソッド


  • wait()・・・指定した時間が経過するまで待機させる。オブジェクトはロックされている必要がある(synchronizedブロック内かsynchronizedメソッド以外で利用すると実行時エラーになる)。例外処理必須

  • notify()・・・wait()で待機中スレッドを1つ再開する。オブジェクトはロックされている必要がある

  • notifyAll()・・・wait()で待機中スレッドを1つ再開する。オブジェクトはロックされている必要がある

  • equals()・・・==(同じオブジェクトを参照しているか)と同じ意味。

printfメソッド

書式化して文字列を返すメソッド。

  • booleanに浮動少数や文字列など、nullとfalse以外のものが入るとtrueになる。警告は出ない。
  • 浮動少数てfにnullを指定すると警告が出るが実行可能。nullが表示

Scannerクラス

空文字列(デフォルト)を区切りにして文字列などを分解できる。
分割されたデータをトークンという。
トークンは適切な基本データ型で取り出される


メソッド


  • 次のトークンがあるかないか、どんな型でもをチェック・・・hasNext()

  • 次のトークンをInt型として読み取る。読み取った型がintでなければ実行時エラー・・・nextInt()

  • 次のトークンがint型であることをチェックする・・・hasNextInt()

  • 区切り文字をセット・・・useDelimiter()

正規表現をするクラス

Macherクラス
booleanを返すもの


  • 入力シーケンスの全体とマッチング・・・mathes()

  • パターンとマッチする次の部分のシーケンスを探す・・・find()

それ以外の返すもの


  • パターンが見つかった開始位置を返す・・・start()

  • パターンとマッチした文字列を返す・・・group()

日付操作

明日の日付を作る場合


  1. 今日の日付を取得 Date d = new Date();

  2. 日付を追加する為のCalenderオブジェクトc生成。抽象クラスなのでgetinstance()でつくる。

  3. 日付操作のためDateクラスのオブジェクトをCalenderクラスに代入 c.srtTime(d);

  4. 日付を追加。2で作ったCarenderオブジェクトに日付を足す c.add(Carender.DATE,1)

  5. 日付をフォーマットする場合はDateFormatクラスのformat()を利用する。ただしformat()クラスは引数の型がdateなのでdに代入する。 d = c.getTime();

  6. 日付書式にロケールを設定する DateFormat df = DateFormat.getDateInstance(DateFormt.LONG, Locale.ITAlY);

  7. フォーマットする df = format(d);

指定した日付をDateFormatで読み込む場合
DateFormat.parse()を利用。formatと逆の動きをする

直列化

  • SerializableなクラスがSerializableでないメンバ変数を持っていた場合、読み書きしようとすると読み書きのメソッドで実行時エラー(NotSerializableException)が起こる。
  • 集約されているクラスも直列化される
  • スーパークラスが直列化可能な場合は、サブクラスも可能。


直列化されないもの


  • transient・・・直列化しないことを指定する。

  • static・・・直列化されない

  • スーパークラスが直列化可能でなく、サブクラスがSerializableを実装してない場合

直列不可スーパークラスと直列化可スーパークラスを持つサブクラスの直列化読み書きの場合


  1. 書き込み時・・・直列化の不可のスーパークラスの値は保存されない。

  2. 読みこみ時・・・直列不可スーパークラスの値はコンストラクタが呼び出され、その値がセットされる。transient指定の時はnullになる。


BufferedReaderクラス

メソッド
write()・・・引数に入れた文字を書き込む。改行しない。
newRine()・・・改行を入れる

存在しないメソッド
writeLine(), print(), println()

ファイルの入出力

入力


  1. ファイルオブジェクトを作成する・・・Fileクラス

  2. ファイルオブジェクトを引数にして、作成できるストリーム・・・FileReaderクラス(1文字ずつ読み込む)

  3. FileReader(かReader)を引数にして、作成できるストリーム・・・BufferedReaderクラス(文字をバッファリングする)

Fileクラス

メソッド
list()・・・ディレクトリにあるファイルおよびディレクトリを文字配列で返す
File(path, FilenName)・・・指定したパス+ファイル名でファイルオブジェクトを作成
exsits・・・ファイルの存在を確認する。

staticなメンバ変数
File.separator・・・環境に依存した区切り文字を追加

String型

  • 参照内容は不変。つまり文字列連結などをすると、オリジナルの参照は捨てて、新しい連結された文字列を参照する。
  • String型のメソッドなどで操作しても、操作した結果を代入しなければ、オリジナルの文字は変更されない。
  • mainメソッドのローカル変数と各メソッドの変数はコピーされ、各メソッドの変数は参照するものが変化する。
  • +演算子で文字列を追加できるのはStringだけ。StringBufferなどはコンパイルエラーになる。

ラッパークラス

int == double(doubleに変換される)
Integer==double(doubleに変換される)


Integer i1 = 10; の場合
intデータを自動的にラッパークラスに変換して、代入できる


Integer型
==・・・同じオブジェクトを参照しているjか
.equals・・・同じint型の値を含むかどうか。意味的に同じならOK。


AutoBoxingの効果
ラッパークラスが自動生成される場合、メモリの効率化のため同じオブジェクトを参照する場合がある。以下の場合。


  • true、false

  • -128~127の整数

  • \u0000~\u007fの文字

初期値
参照型の初期値はnull。null値であるラッパークラスを基本データ型似変換するとヌルポ(実行時エラー)が発生する。

ValueOfメソッド

文字列をラッパークラスに変換するメソッド

アサーション

不変条件、メソッドの事後条件、ロックステータス事前条件などをチェックするのに利用できる。
デバッグ時のみ有効。

構文


  • assert 条件式;

  • aseert 条件式 : 出力する式;
    falseの場合は出力する式を表示し、そこでAssertionErrorが発生しプログラム終了する

コマンドラインでのスイッチ


  • 有効化・・・-ea

  • 無効化・・・-da


指定の順序はあとのものが有効。ただし範囲を狭める指定(ex. -ea;\:クラス名)がある場合はそちらが有効になる

例外

例外をスローするメソッドを定義する場合は、宣言末端に throws 例外が必要。無いとコンパイルエラー。ただしRuntimeExceptionの場合はthrowsしなくてもいい。

try-catch文


  • catchブロックは書かなくてもコンパイルエラーにはならない。ただし例外が起きた場合実行時エラー

  • catchブロックでは例外の順序に注意。スーパークラスのexeptionがサブクラスのexceptionより先に定義されていると到達不能コードでコンパイルエラー

  • finalyブロックは例外が発生しても、しなくても実行される

For文

式の順序

ex.
for (i = 0; i < 3; i++) {
//iを表示
}


  1. iを0に初期化

  2. i<3か条件式をチェック(ここでfalseの場合は終了)

  3. iを表示

  4. iに1を足す

  5. 2に戻る(falseの場合はfor終了)



  • 2番目の条件式を書かない→無限ループ

  • 2番目の条件式を書かない。かつそのFor文のなかに処理がある→到達不能コードがある場合コンパイルエラー

ジェネリックスと拡張For文
Objectクラスはサブクラスに暗黙的にキャストできない。

List list = new ArrayList();
for (Animal animal: list) {・・・}  ←ここでコンパイルエラー

switch文

String型を判定しようとするとコンパイルエラー。

短絡評価

&&・・・左オペランドがfalseだった時、評価終了
||・・・左オペランドがtrueだった時、評価終了

If文

条件式
条件式の部分にはboolean型以外の結果を返すものを入れてはだめ。コンパイルエラーになる。
=(代入)なので注意。

staticメソッド

  • mein文とかクラスに1つだけあるあるメソッド。
  • staticメソッドから同クラスのインスタンス変数、インスタンスメソッドにアクセスできない。インスタンスが存在しないと、インスタンス変数なども存在しえないから。インスタンスを生成してからならアクセスできる。
  • staticメソッドないでthisキーワードは使用不可。コンパイルエラー

インポート

静的インポート
staticメンバだけをインポートしたい時に使う


  • import static パッケージ名.クラス名.staticメンバ;

  • import static パッケージ名.クラス名.*;

配列

Arrays(配列を操作する実装)はあるがArray(定義=インターフェース)は存在しない。
配列は下記のとおり明示的に領域を確保する必要がある。確保されていない配列にアクセスしようとするとヌルポになる。領域を確保するのはコンパイル時でなく実行時なので、コンパイルエラーにならない。

ex.
String s[] = null;
s[0] = "Hello";

作り方


  1. NEWする方法

  2. データ型 変数名[] = new データ型[要素数]
    ex. float f[] = new float[3]

  3. 初期値を入れてしまう方法


    • データ型 変数名[] = new データ型[] {値1,値2};
      ex. float f[] = new float[] {1f, 2f};
      *右辺にデータを設定する場合は、要素数を記述できない

    • データ型 変数名[] = {値1,値2};
      ex. float f[] = {1f, 2f};


使い方
代入する時
当たり前だが宣言した型で代入すること

多次元配列
String s[][] = {{"1","2"},{"3","4","5"},{"6"}}の場合
1次元目が{"1","2"},{"3","4","5"},{"6"}の3つ
ex. s[1][2] ・・・{"3","4","5"}の"5"になる
    s[0][2] ・・・定義されていないので、実行時エラー
*配列は0から始まるので注意

拡張for文で使う時

a[] = {1,2,3 };
for (int val: a) {} ←「a[]」と書かないことに注意

列挙型

宣言
[修飾子] enum 列挙型名 {
 要素1、要素2、要素3.・・・

利用する時
クラス名.列挙型データ名.データ値


クラス内に定義できるが、メソッド内には定義できない

クラス変数

static変数とも言う。
インスタンスがなくても。クラス名.static変数名でアクセス可。ただし、別パッケージだとpublicなどが必要。
クラスのオブジェクト全体で共有される。
計算時に注意

ローカル変数

  • メソッド内で局所的に利用される変数。メソッドのブロック内で利用されるブロック変数もこの1種。
  • staticは指定できない。
  • 暗幕的に初期化できないので明示的に初期値を設定する必要がある。

アクセス制限

下に行くほど制限が強くなる


  • public・・・どこのクラスからでもOK

  • protected・・・同じパッケージか、そのサブクラスからしか呼び出せない。パッケージが違ってもアクセスできるが、インスタンスを生成できない。

  • なし・・・同じパッケージ内ならOK

  • private・・・そのクラス内のみOK

abstractクラス

基本的に実装をもたないabstractメソッドをもつクラス。
実装していてもabstractをメソッドにつけてなければOK。

  • abstractクラスにabstractメソッドがなくてもかまわない。
  • abstractメソッドにfinalをつけてもコンパイルは通る。意味はないが・・・

インナークラス

クラス内のクラス。


  • 外側のクラスのprivateな変数にもアクセス可能

  • static変数、staticメソッド、staticクラスの宣言は不可。abstract、finalのみ可能。


ローカルクラス・・・メソッドやブロック内で宣言されたクラス。アクセス修飾子やstaticは指定不可

継承

継承関係にあるもの
is-a関係=kind-of関係
*インタフェースのとその実装クラスもis-aになる。
継承は1つしか出来ないから、extendsキーワードのあとは1つしか指定できない。
継承してても、親クラスのprivateなメンバ変数にはサブクラスからアクセスできない。

コンストラクタ


  • 継承しているとき、サブクラスにもスーパークラスにも引数なしコンストラクタがないと、コンパイルエラー。サブクラスがNewされるとき、スーパーのデフォルトコンストラクタが必要だから。

  • サブクラスはスーパークラスのコンストラクタを継承できない。コンパイルエラーになる。

インターフェース

インターフェースで暗黙的に
メソッド・・・public abstract void method();と同じ
変数・・・public static final 実装してもインターフェース内の変数は変更できない。=定数。初期値を設定しないとコンパイルエラー

インターフェースのメソッドは全てオーバーライドする必要がある。もしオーバーライドされてないものがあると、コンパイルエラー。
implementされてるクラスにオーバーライドされてないものがあるときは、クラスをabstractにすればコンパイル通る。

暗黙の初期化

String・・・null

public static String str; public static void main(String args[]) { System.out.println(str); ←の結果はコマンドラインでnullと表示される }

リテラル

floatに変換OKなもの


  • 整数リテラル・・・-1,1、0xb(16進数の11)。規定値はint型

  • 文字リテラル・・・'1 '(char型)


浮動少数リテラルだがfloatに変換NGなもの

  • 浮動少数リテラル・・・3e-2。浮動少数リテラルはdubbleだから(float)もしくはFをつけてキャストすること


NGなもの

  • 文字列リテラル・・・"1"

char型

0~65535
負はだめ

修飾子

クラス名、変数名の命名規則
1文字目OK・・・英字、$、_(アンスコ)
2文字目以降OK・・・数字
いけそうでダメなもの・・・%

final
末端のクラスを意味する。このクラスを継承して、サブクラスはつくれない

予約語

  • 予約語・・・基本データ型、メソッドなどの修飾子(publicとか)
  • 非予約語・・・クラス名

アーカイブ

Powered by Movable Type 4.22-ja