- 例外の種類
Error: 重大例外(回復不能)
Exception: catch必須、プログラムで回避不可能
RuntimeException: catch必須ではない、プラグラムで回避可能 - 呼び出し元で処理する例外があるメソッドでは、定義に throwsを付加
この場合、メソッド内では該当例外のcatch処理不要
ただし、スーパー例外クラスをcatchしている場合にはcatchしないとそちらで処理されてしまうので、catch→throwが必要。
内部処理が伴う場合も、catch→内部処理→throw。 - try,catch,finally節
catch節は例外クラスごとに複数記述可能
複数記述で重複一致時は先に記述されている節で処理する
→上位クラスでのcatchを先に書くと到達不能catch節としてコンパイルエラーとなる
finally節はひとつだけ、正常/異常時ともに実施する処理を記述(close処理など)
finally節にreturn文があると異常時もreturnが実行される
→戻り値のある関数では紛らわしい
→基本としてfinally節にはreturn文を書かない - 「コンパイル時にチェックされない例外やエラー」を独自に実装する
java.lang.RuntimeExceptionを継承するのが普通 - 独自に例外を定義する方法
Exceptionクラスを継承
※呼び出し元は例外処理の記述が強制される
※独自の例外クラスを変更した場合、呼び出し元の変更が必要となる場合もある
独自の例外に置き換えてthrowする場合は- 独自例外クラスにはthrowableを引数とするコンストラクタを定義
- 受け取った例外オブジェクトから独自例外クラスobjを作成してthrow
- 例外を使うと処理の流れを変えることができる
条件文のような使い方も可能だが、例外は「例外的な処理が発生したことを通知、捕捉する」という目的のもの
→本来の目的で使用するべき
2008年12月26日金曜日
例外の構成
StringBuffer
- クリア方法
StringBuffer buf = "12345";
//内容消去
//deleteを使用
buf.delete(0,buf.length());
//setLengthを使用
buf.setLength(0);
buf.append(...) - reverseメソッド
逆並びの文字列を取得
【例】2進数表記文字列作成
最下位桁から1bitずつ検査して0/1の文字列を作成し、reverseで逆点
2008年12月25日木曜日
2008年12月19日金曜日
2008年12月18日木曜日
別クラスの利用
※同一プロジェクトのファイルで確認
pkg1.class1 から pkg1.sub.class2を参照する
- 同一ファイル内
クラス名のみで参照可能 - 別ファイル同一パッケージ
クラス内のみで参照可能 - 別ファイル別パッケージ
import追加で参照可能
クラス名完全修飾で参照可能
pkg1.class1 から pkg1.sub.class2を参照する
- importの場合
import pkg1.*;
import pkg1.sub.*;
import pkg1.sub.class2; - クラス名は完全修飾が必要
相対指定では参照できない
sub.class2ではだめ
2008年12月16日火曜日
配列
- 宣言
int a[] = new int[10];
int a[][];
int a, b[];
int func(int dt)[] 戻り値がint配列型
int[] a = new int[10];
int[][] a;
int[] a,b[];
a=(int[])b.clone();
if( a instanceof int[]) int配列型の確認
int[] func(int dt) 戻り値がint配列型
int a[] = { 1,2,3,4,5 }; 初期値を与える場合new不要 - 領域確保
int a[]; 領域未設定 =null
a = new int[10]; 領域確保、各要素は=0で初期化 - 要素数
lengthフィールドで取得(配列オブジェクトの変数?)
int a[] = new int[10];
n = a.length;
※メソッドではない - コピー
個別:a[1] = b[2];
参照:a=b; ※アドレスのコピー、実態は同じ
複写:a=(int[])b.clone(); - cloneによる複写
a=(int[])b.clone();
b配列と同じサイズの領域を確保し、先頭アドレスをaにセット
※コピー先の事前領域確保は不要
※多次元配列はそれぞれ処理が必要
int aa[][];
int bb[][];
for(int i=0; i<aa.length; i++)
bb[i] = (int[])aa[i].clone(); - arraycopyによる複写
System.arraycopy(from,0,to,0,from.length);
※各要素をコピーするので、コピー先は事前に領域確保が必要
2008年12月9日火曜日
文字コード、改行コード設定
- ソースの文字コード
全体のほかにファイル単位での設定が可能
デフォルトはファイルの種類によって違う
HTML:charsetから検出(実際のコードではなく)
java,php:全体の設定にしたがう(実際のコードではなく)
→普通のエディタだとファイル単位で自動認識なのでかなり不便
- 文字コード
設定→一般→ワークスペース
※プロジェクト単位:プロパティ→リソース
- 改行コード
Unix
設定→一般→ワークスペース
※プロジェクト単位:プロパティ→リソース
第2章 変数と定数
- 基本データ型
char 16ビット Unicode文字(\u0000~\uFFFF)
byte、short、int、long 8~64ビット符号付整数
float、double 32、64ビット浮動小数点数
※整数系はすべて符号付(charは符号無し) - 変数初期化
クラスフィールドと配列変数は自動で初期化される。
メソッド内変数は明示的に初期化必要 - 論理型(boolean)
true/false
※数値の0はfalseとなみなさない=0はエラー
while(1) も不可 → while(true)
if( <整数型変数> ) 不可 → if( <整数型変数> != 0 ) - char
文字コードはUnicode(\u0000)
16進表記(0x0000)でも、10進表記でもOK - 整数型
範囲を超える数値を代入するとエラー
→キャストすればOK,ただしキャスト先のコードで解釈した値となる
数値をそのまま書くとint
long値の場合はサフィックス(L or l)を付加する
long lval = 123456789012345L; - 浮動小数点数型
数値そのままでdouble
基本はdoubleを使用
F or f のサフィックスでfloat - 文字列
Stringクラスを使用
連結は + で str = "123" + "456";
比較はequalsメソッドで (==は別の意味、アドレス比較)
大小比較はcompareToメソッド(< は不可) - 列挙型(enum)
java.lang.Enumクラス
J2SE5.0から使用可能
finalを並べるより便利
enum Marks { CLUB, SPADE, HEART, DIAMOND }
:
Marks Card;
case marks.SPADE:
↑switch文にも使用可能
compareTo、equals等で比較
toString、name等で内容表示
変数名のみでtoStringの省略形(System.out.println(Card);で "SPADE"出力) - 任意桁の数値
BigInteger: 任意精度の整数
BIgDecimal: 任意精度の固定小数点数 - 文字リテラル
シングルクォートで囲む
System.out.println((int)'亜'); 文字コード出力 - エスケープ文字
\nnn :8進数で示す文字
\unnnn: 16進数で示す文字 - 文字列リテラル
ダブルクォートで囲む - 改行コード
\n : 0A
printlnの改行: システム依存 0D0Aや0A
printfの%n: 同上 - nullリテラル
参照型変数が有効なオブジェクトをさしていないことをあらわす
String ss = null;
readLine(); などは入力終了でnullを返す。
→状態検出に使用する
while( ( ss = fin.readLine() ) != null )
※while( ss = fin.readLine() ) ではない!! - final
final int MAX_XXX = 100; ←メソッド内定数
static final int MAX_XXX =1000; ←クラス定数
基礎知識
- 修飾子
abstruct: クラス、メソッド
final: クラス、メソッド 継承不可、オーバーライド不可
フィールド、変数 値変更不可
native: メソッド Cなどのプラットフォーム依存の言語で実装
private
protected: フィールド、メソッド 同一パッケージと継承クラスからアクセス可
public
static: フィールド クラス変数
メソッド クラスメソッド
synchronized: スレッドセーフ ロック処理をする - JARファイル
zip形式で圧縮
jarコマンドで作成、tarと同じようなオプション
>jar cvf xxx.jar ./*.class
登録:
投稿 (Atom)