SJC-Pとりました
{試験対策}
試験勉強の時に簡単にまとめた物です。
試験内容は満遍なくでます。
正確な知識が必要なのでここに掲載されている内容では物足りないこと間違いなしですが何かのたしになれば幸いです。
1.パッケージ宣言
2.インポート宣言
3.クラス・インターフェース宣言
・main には「public static void」を付ける。public がない場合コンパイルはできるが実行は不可。
・引数名はargsでなくてもよい。
・添え字は0から。
・基本データ型の大きさと範囲は環境に依存しない。
・boolean,char以外は符号付き。
| 型 | 意味 | サイズ | 範囲 |
| boolean | 真偽値 | 1bit | true,false |
| byte | 符号付整数 | 8bit | -128〜127 |
| char | Unicode文字 | 16bit | \u0000〜\uFFFF(0〜65535) |
| shor | 符号付整数 | 16bit | -32768〜32767 |
| int | 符号付整数 | 32bit | -2^31〜2^31-1 |
| long | 符号付整数 | 64bit | -2^63〜2^63-1 |
| float | 単精度浮動小数点数 | 32bit | |
| double | 倍精度浮動小数点数 | 64bit | |
float/doubleの最大値・最小値
Float.MAX_VALUE,Float.MIN_VALUE
Double.MAX_VALUE,Double.MIN_VALUE
ディフォルト初期値
・数値 0 0.0f 0.0d
・char '\u0000'
・boolean false
| 書き方 | 意味 |
| O○○○ | 8進数 |
| 0x○○ | 16進数 |
| '\u0000' | 16進数 |
| Lかl | long |
| Fかf | float |
| Dかd | double |
・文字型はintと解釈できる。
・文字リテラルと文字列リテラルは異なる。
・nullは参照型変数に格納できるリテラル。
・文字列連結には「+」を使う。
・オブジェクトの参照していない変数でオブジェクトを使おうとした場合例外NullPointerExceptionがスローされる。
| クラス |
public abstract final strictfp |
公開 抽象 サブクラスを作れない 浮動小数点数がFP-strictという規則に従う |
| インタフェース |
public abstract strictfp |
公開 抽象 浮動小数点数がFP-strictという規則に従う |
| フィールド |
public,protected,private final static transient volatile |
値を変更できない クラス変数 シリアライズで保存しない コンパイルの最適化を止める |
| メソッド |
public,protected,private abstract final native static synchronized strictfp |
抽象 サブクラスでオーバーライドできない クラス変数 プラットフォーム依存コードで定義される クラスメソッド 実行前にロックを取得 浮動小数点がFP-strictという規則に従う |
| コンストラクタ |
public,protected,private
|
|
【修飾子について】
・インターフェースにはfinalは付けられない。
・publicを付けたクラスがある場合,そのファイル名はクラス名にしなければならない。
・どのクラスにもpublicをつけない場合,ファイル名はクラス名にしなくてもよい。
・publicはどのクラスからもアクセスできる。
・protectedは同じパッケージと派生クラスからのみアクセスできる。
・(修飾子なし) は同じパッケージからのみアクセスできる。
・privateは同じクラスのみからアクセスできる。
・メソッドのオーバーライドでは、サブクラスのメソッドのアクセス権限はスーパークラスのものと同じか、より弱いものでなくてはいけない。
・インターフェースのメソッドは、publicがついていなくても,publicになる。
・staticなメッソド内ではstaticでないフィールドを使えない。
【制限の強さ】
・private > (なし) > protected > public
優先度
| 単項演算子 | ++,--,単項+,単項-,!,~ |
| 剰余 | *,/,% |
| 加減 | +,- |
| シフト演算子 | <<,>>,>>> |
| 比較演算子 | <,>,<=,>=,instanceof ==,!= |
| ビット演算子 | & ^ | |
| 論理演算子 | && || |
| 3項演算子 | ?: |
| 代入演算子 | = |
【算術演算】
・整数の場合/による割り算では、端数が丸められる。
・%は符号を取って計算し、その答えに左オペランドの符号をつける。
【0除算】
・コンパイルエラーにならない。
・整数除算で右オペランドが0の場合,ArithmeticExceptionが発生する。
・浮動小数点で右オペランドが0の場合、例外もスローしない。
| double | 正 | Double.POSITIVE_INFINITY |
| 負 | Double.NEGATIVE_INFINITY |
| fload | 正 | Float.POSITIVE_INFINITY |
| 負 | Float.NEGATIVE_INFINITY |
【X%0】
・doubleの場合「Double.Nan」
・doubleの場合「float.Nan」
・NaNは非数。何と比較してもfalseとなる。
【論理演算】
・||,&&は左オペランドで結果が決まった場合、右オペランドは評価されない。
・|,^,&は、左オペランドの結果にかかわらず、右オペランドも評価される。
・X ? A : B では、まずXが評価され、その結果がtrueならAのみ評価され、falseならBのみが評価される。
【instanceof】
・左オペランドが右オペランドにキャストできるか判定して返す。
・右オペランドが基本データ型を使うことができない。コンパイルエラーとなる。
・右オペランドがインタフェースでもよい。
【ビット演算】
| ~ | ビット反転 |
| << | ビット列を左にシフト。右のビットは0になる |
| >>> | ビット列を右にシフト。左のビットは0になる |
| >> | ビット列を右にシフト。左のビットは1になる |
| & | 論理積 |
| ^ | 排他的論理和 |
| | | 論理和 |
| ~x | -x-1 |
【配列の宣言】
・配列要素はディフォルトで初期化される。
・インデックスはint型であるが、byte,short,charが使われるとintに昇格される。
・要素数は「配列変数.length」で取得できる。
・基本データ型の配列変数間でキャストはできない。
・1次元配列と同様に、「宣言と領域確保」と「宣言と領域確保と値の代入」を同時におこなうこともでる。
・「配列の配列」をつくることで多次元配列を実現する。各配列の要素数を同じにする必要はない。
・領域を確保する際に行数のみを指定して、要素数を流動的にすることもできる。
データ型名 配列名[][]; または データ型名[][] 配列名;
例) int num[][]; または int[][] num;
【配列の領域確保】
配列名 = new データ型名[要素数1][要素数2];
例) num = new int[3][4];
例) 要素数が違う配列
String dim[][] = new String[3][];
dim[0] = new String[5];
dim[1] = new String[3];
dim[2] = new String[8];
【final変数】
・finalな変数は値の設定が一度しかできない。
・定義場所かコンストラクタで初期化する必要がある。
【メソッド】
・戻り値があるメソッドにはreturnが必要。
・abstractなメソッド定義を書くことはできない。{}でもだめ。
・abstractとfinalは組み合わせ不可。
【矛盾する修飾子】
・private と abstract
・abstract と static
・abstract と final
【オーバーライド】
・アクセス制限はスーパークラスと同じか、緩い制限にしなくてはいけない。
・finalなメソッドはオーバーライドできない。
・staticメソッドをオーバーライドして非staticにすることはできない。
【オーバーロードとオーバーライド】
| オーバーロード |
メソッド名が同じで仮引数が異なる。 |
| オーバーライド |
継承関係にあるクラスで、メソッド名、仮引数、返り値型が同じ。 |
【コンストラクタ】
・thisは同じクラスのコンストラクタ、superはスーパークラスのコンストラクタをあらわす。
・thisやsuperを書かなければ、super();がはじめに呼び出される事になる。
その場合にはスーパークラスに引数をとらないコンストラクタが必要。
【抽象クラス】(abstract)
・継承クラスによって完成する。
・抽象メソッドを持つクラスは抽象クラス。
・インスタンスを生成できない。
・抽象メソッドがなくても抽象クラスにできる。
・実装クラスで抽象メソッドを実装しなくてはいけない。
【インタフェース】(interface)
・フィールドは自動的にpublic static finalになる。
・メソッドは自動的にpublicな抽象メソッドとなり、その定義は実装クラスで書く。
【オブジェクト指向】
・カプセル化
・継承 is-a
【ネストクラス】
・staticなネストクラスの生成では、外側のクラスのオブジェクトを必要としない。
・非staticなネストクラスの生成には、外側のクラスのオブジェクトが必要。
【メソッド内のクラス】
・メソッド内のクラスからは、外側のクラスのフィールド、メソッドのfinalな引数、メソッド内のfinalな変数にはアクセスできる。
・メソッド外のネストクラスには、アクセス修飾子、staticをつける事ができるが、メソッド内のクラスにはつけられない。
・外側のクラスのフィールドは、そのフィールドのアクセス修飾子が何であっても、メソッド内のクラスからアクセスできる。
・メソッド内のクラスにアクセス修飾子をつける事はできない。
【無名クラス】
・クラスの定義とオブジェクトの生成を同時に行う。
・クラスを拡張して作ることができる。
・インタフェースを実装して作ることもできる。
【基本データの型変換】
・暗黙の型変換の基本は拡大変換である。
・文字列と結合する場合、文字列に変換される。
・booleanは他の方に暗黙変換されない。キャストもされない(コンパイルエラー)。
・参照型から基本データ型への変換はない。
・複合代入演算子では暗黙的な変換がなされる。左辺にあわせる。
・byte,short,charの算術演算は,オペランドをintに数値昇格してから実行される。
・intからbyte,short,charへの縮小変換は代入時のみ。
1. byte →short → int → long → float → double
2. char → int → long → floa → double
【参照型の型変換】
・暗黙の型変換の基本は拡大変換。
サブクラス → スーパークラス
サブインターフェース → スーパーインタフェース
クラス → そのクラスが実装するインタフェース
インタフェース → Object
配列型 → Object
配列型 → Cloneable
参照型の配列 → 元の配列の要素が拡大変換できる要素を持つ配列型
・スーパークラスの変数をサブクラスにキャストしてもコンパイルエラーにならない。
・縮小変換になる場合にはキャストが必要。
【実行時に例外発生】
スーパークラス → サブクラス
非finalなクラス → そのクラスが実装していないインタフェース
参照型の配列 → 要素間のキャストが例外をスローする配列
【ループ】
・「break」ループ等の終了
・「continu」ループのそのステップの以後の処理を中止し、次のステップに進める。
・ループ変数の初期化場所では宣言式そのものは1つしかかけない。
・whileの中にはループを続ける条件をかかなくてはならない。
・whileの判定条件はboolen。
【条件分岐】
・switchのcaseでbreakがないと次のcaseも実行される。
・switchに使える型はbyte,short,char,intのみcaseに使えるのは,変数と同じ型に解釈できる。
変数と同じ型に解釈できる整数リテラルか定数のみ。
・for(@;A;B){}
@ループ変数初期化 メソッドを置く事も可
A条件チェック
Bループ変数更新 メソッドを置く事も可
・finallyは必ず実行される。
・キャッチされなかった例外はメソッドの外にスローされる。
・try説にcatchを続けなくてもよい。
・例外にはチェック例外(検査例外)と非チェック例外(非検査例外)がある。
・Errとそのサブクラスの例外は、一般に回復不能の問題が発生した事をあるわす。
・例外には階層がある。
・サブクラスのキャッチを先に書く。
・独自例外の定義は一般的にExceptionのサブクラスとする。
・メソッドが例外をスローするかもしれない宣言にはthrows,実際に例外をスローする場合にはthrow。
・メソッド内で検査例外が発生する可能性がある場合、その処理を書かなければならない。
・スーパークラスのメソッドが検査例外をスローする場合、サブクラスのメソッドが
スローする例外は、その例外クラスか、そのサブクラスでなくてはならない。
【RuntimeException】
ArithmeticException :0による除算など
ArrayStoreException :配列に無効な型の値を格納
ClassCastException :不適当なキャスト
IndexOutOfBoundsException :範囲外の配列要素へのアクセス
NullPointeerException :null値の変数の使用
【検査例外】
ClassNotFoundException :クラス・インタフェースがみつからない
java.io.IOException :入出力例外
java.io.FileNotFoundException :ファイルが見つからない
【アサーション】
・コンパイル時のアサーションの有効化
「- source 1.4」オプションを付けてコンパイルする。
(注意)ディフォルトは「- source 1.3」オプションを付けたものと同等で、アサーションは無効である。
実行時の有効化・無効化
-ea システムクラスを除くすべてのクラスのアサーションが有効化
-ea:クラス名 指定したクラスのアサーションが有効化
-ea:... ディフォルトパッケージのアサーションが有効化
-ea:パッケージ名 ... 指定パッケージとそのサブパッケージのアサーションが有効化
-esa システムアサーションを有効化
-da: クラス名 指定したクラスのアサーションの無効化
-dsa システムクラスのアサーションだけ無効化
(注意)オプションを複数付けた場合には、後につけたものが優先される。
【アサーションの使い方】
・privateなメソッドの引数が有効なものであるかチェックする。
・起こるはずのないことが実際に起こらないかチェックする。
・内部的なチェックにはアサーションを使い、publicなメソッドの引数のチェックなどには使わない。
・AssertionErrorはエラーなので一般にはtry-chtchで処理しない。
・アサーションのチェックをするものとして、不変条件、事前条件・事後条件がある。
【不変条件】
・内部不変条件(内部的な状態)
・制御フローの不変条件(制御が到達するかしないか)
・クラスの不変条件(クラスのオブジェクトの状態)
【事前条件・事後条件】
・事前条件(メソッドが呼び出されたときtrueであるべき条件)
・事後条件(メソッドが正常終了したとあとにtrueであるべき条件)
・ロックのチェックにはThreadのholdsLockのメソッドを使う。
・スレッドの処理として呼び出されるrunは引数をとらない。
・一度起動したスレッドをもう一度起動することはできない。IllegalThreadStateExceptionが発生する。
・スレッドのじっこう順序はスレッドスケジューラによって決められる。
・スレッドの実行は保証されない。
・優先度が高いものが先に実行される保障はない。
【使用方法】
1. Threadのサブクラスを使う方法
・そのクラスでrunをオーバーライドし,startを使う。
2. Runnableを実装するクラスを使う方法
・runを実装し、そのクラスのオブジェクトを引数にThreadをオブジェクトを生成し、startを使う。
【メソッド】
| メソッド |
意味 |
スタティック メソッド |
オブジェクト メソッド |
検査例外 |
非検査例外 |
| start |
スレッドを実行状態にする。 |
○ |
|
|
IllegalThreadException (同じスレッドを2回以上呼び出した場合。) |
| yield |
実行中のスレッドを休止させ、他のスレッドに実行のチャンスを与える。 ただし、また、同じスレッドが実行されるかもしれない。 |
|
|
|
|
| sleep |
実行中のスレッドをスリープ状態(実行不可能状態)にする。
引数で与えられた時間だけスリープさせる。 |
|
|
InterruptedExceprion |
|
| join |
スレッドを参照する変数tに対し、「t.join();」とすれば、そのスレッドの終了を待つことになる。
引数を取らないものと、ミリ秒単位の引数とナノ秒の2つの引数を取るもものがある。 |
○ |
|
|
|
| getPriority |
スレッドの優先度を返す。 |
|
|
|
|
| setPriority |
優先度を引数で与えられたものにする。
優先度はMINN_PRIORITY(1)からMAX_PRIORITY(10)まである。
ディフォルトはNORMAL_PRIORITY(5)。
|
|
|
|
|
| interrupt |
スレッドに割り込みをする。
waitで待機しいたスレッドでは,InterruptedExceptionをスローする。
|
|
|
|
|
| holdsLock |
スレッドが引数に指定されたオブジェクトのロックを持っている場合、trueを返す。 |
|
|
|
|
| run |
スレッドの処理内容を書く。Runnableにある。 |
|
|
|
|
| wait |
実行したスレッドのロックを開放しスレッドを待機状態にする。 |
|
○ |
InterruptedException |
|
| notify |
ロックの開放を待機中のスレッドに知らせる。ただし、知らせるスレッドを指定できない。 |
|
○ |
|
IllegalMonitorStateException (現在のスレッドがこのオブジェクトのモニターを所有してない場合) |
| notifyAll |
すべての待機中のスレッドにロックを開放を知らせる。 |
|
○ |
|
IllegalMonitorStateException (現在のスレッドがこのオブジェクトのモニターを所有してない場合) |
(注意)発生する例外は一部。
【スレッドの状態】
・「初期状態」「実行中」「実行可能」「実行不可能」「終了状態」
・実行不可能状態にはwaitによる「待機状態」、sleepによる「スリープ状態」、入出力などで待機している「ブロック状態」などがある。
・notify,notifyAllは「待機状態」のスレッドを実行可能状態に戻す「きっかけ」を送るが「通知」などという。
・通知を受けたスレッドは「ロック探索状態」などと呼ばれる状態になり、ロックを取得しようとする。そこでロックが取得できれば実行可能状態になる。
【同期】
・同期指定は、メソッド全体にも行えるが、一部のコードに対しても行える。
・メソッドがstaticの場合、クラスロックの指定になる。
【Math】
・finalクラスでオブジェクトを生成できない。
・メソッドはすべてpublic static。
【定数】
Math.E 自然対数eの底に最も近いdouble値
Math.PI 円周率πに最も近いdouble値
【主なメソッド】
| abs |
引数の絶対値を、引数の型の値で返す。 |
| max |
2つの引数の大きいほうを返す。 |
| min |
2つの引数の小さいほうを返す。 |
| round |
最も近い整数値を返す。 |
| double sin(double d),double cos(double d),double tan(double d) |
三角関数(引数はラジアンの角度) |
| doublie exp(double d),double log(double d) |
指数関数・対数関数 |
| double ceil(double d) |
dより小さくない最小の整数を返す。 |
| double floor(double d) |
dより大きくない最大の整数を返す。 |
| double randam() |
0.0以上1.0未満のランダムな数を返す。 |
| double sqrt(double d) |
dの平方根を返す。 |
| double pow(double d1,double d2) |
d1のd2乗を返す。 |
| double toDegrees(double d) |
ラジアンを度に直して返す。 |
| double toRadians(double d) |
度をラジアンに直して返す。 |
【ラッパークラス】
・基本データ型の値を保持するクラス。
・データを変更できない。
・保持する値の比較にはeualsを使う。
【ラッパークラスオブジェクト生成】
・「値」を引数にとるコンストラクタで生成
・文字列を引数にとるコンストラクタで生成
・文字列を引数にとるvalueOfで生成(Characterを除く)
・文字列と基数を引数にとるvalueOfで生成(Byte,Integer,Long,Shortのみ)
【値の取り出し】
・byteValue,doubleValue,floatValue,intValue,shortValue。
・Byte,Double,Float,Integer,Longに共通してあり、引数を取らず値を返す。
・booleanValueはBooleanのみ,charValueはCharacterのみにある。
【文字列から値を取り出す】
parseByte,parseDouble,parseFlot,parseInt,parseLong,parseShort。
【文字列への変換】
・toStringは自然な文字列を返す。
・toBinaryString,toOctalString,toHexStringはIntegerとLongにある。
【その他】
・isDigit,isLetterはCharacterにあり、それぞれ、引数に取ったcharが数字ならtrueを返すメソッド。
・引数にとったcharが文字ならtrueを返すメソッド。
【限界値】
・Boolean以外のクラスには、最大値を表すMAX_VALUE,最小値を表すMIN_VALUEがある。
【String】
・==とequalの違い
・文字列リテラルは同じオブジェクトである。
・newで生成したStringオブジェクトは異なるものになる。
・Stringオブジェクトの内容は変更できない。
【判定】
== 同じオブジェクトかどうか判定
eualse 同じ文字列を保持しているか判定
【主なメソッド】
| char charAt(int i) |
iの位置にある文字を返す。 |
| int compareTo(String a) |
aの文字列と辞書式順序で比較し、結果を返す。 |
| boolean eaualsIgnoreCase(String a) |
大文字・小文字は同じとみなして文字列を比較する。 |
| int indexOf(char c) |
最初にcが現れる位置を返す(なければ-1) |
| int length() |
文字の数を返す。 |
| String replace(char o,char n) |
文字列の中のoをすべてnにした文字列を返す。 |
| String substring(int i) |
位置iから最後までの部分文字列を返す。 |
| String substring(int i,int j) |
位置iから位置j-1までの部分文字列を返す。 |
| String toString() |
自分自身を帰す。 |
| String toLowerCase() |
すべての文字を小文字にした文字列を返す。 |
| String toUpperCase() |
すべての文字を大文字にした文字列を返す。 |
| String trim() |
両端から空白を取った文字列を返す。 |
【インタフェース】
| Collection |
コレクションの階層のルート。 |
| List |
順序付けられたコレクション。要素の重複可。 |
| Map |
キーとデータを対応させるコレクション。キーの重複不可 |
| Set |
重複のないコレクション。 |
| SortedMap |
ソートされたマップ。 |
| SortedSet |
ソートされたセット。 |
| Iterator |
反復子。繰り返し処理。 |
【クラス】
| AllayList |
Listを実装。 |
| HashMap |
ハッシュを使用。null可。Mapを実装。 |
| Hashtable |
ハッシュを使用。null不可。Mapを実装。 |
| HashSet |
ハッシュを使用。Setを実装。 |
| LinkedList |
連結リスト。Listを実装 |
| TreeMap |
Mapを実装。 |
| TreeSet |
Setを実装。 |
| Vector |
Listを実装。 |