スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Java基礎の勉強に一応のケリがついた

Javaの入門サイトを見ながら、自分用チートシートをまとめた。
基本の基本は押さえたと思うので、ひとまずjavaの勉強は一段落とする。
入門サイトにはネットワークやAWT関連の説明もあったが、そこまで読んでない。それは必要になったときに読む。

クラスの継承あたりの理解が曖昧だったが、自分なりに整理された気がする。
new PrintWriter(new BufferedWriter(FileWriter(outFile)))
みたいなのも、
PrintWriterはWriterクラスを引数にできて、BufferedWriterはWriterクラスのサブクラスだから、このようにラップできると理解出来た。

あと、ErrorとExceptionの違いがわかった。
Errorはプログラムでは対処できない致命的なエラー。
Exceptionは入力内容や環境によって発生し得る例外。
RuntimeExceptionはプログラムのバグ等で発生する、予期せぬ例外。

クラスの理解がちょっと深まったので、6月10日の日記に書いた
「パラメータを一通りチェックして、一つでもエラーがあればHTML出力処理に入らずに終了する」処理
を以下のように修正した。
(追加した部分は赤字、削除した部分は取り消し線で記述)

・引数としてパラメータ行を受け取り、パラメータ値を返すメソッドを実装
・チェック結果フラグをprivateメンバー変数として追加。
 パラメータチェックで1回以上エラーがあった場合falseにする。
・チェック結果フラグの値を取得するメソッドを追加。

・エラーの場合は、System.errにエラーメッセージを出力し、throw new Error()
・呼び出し元がcatch(Error e)をし、フラグをON。チェックするパラメータが残っていたら処理続行

・パラメータチェックでエラーの場合は、System.errにエラーメッセージを出力し、チェック結果フラグをfalseにしてreturn。
 呼び出し元は、チェックするパラメータが残っていたら処理続行。

・パラメータを一通りチェック後、フラグがONならSystem.exit(-1)
・パラメータを一通りチェック後、チェック結果フラグの値を取得するメソッドを実行し、falseであればSystem.exit(-1)

もっといい実装方法があると思うが、以前よりはマシになったかなと思う。

明日は、javascriptを中心にHTMLまわりの勉強をしよう。
スポンサーサイト

Javaの勉強が進まない

Javaの復習を兼ねて、入門サイトを見返して自分用チートシートを作っている。
これが全然進まない。
作業時間が無いのだ。
これといって、やらなければならないことは無い。時間はあり余っている。
単に他のことをやっているから時間が無いだけだ。
Javaの勉強が億劫だとは思っていないので、勉強の優先度を高くしよう。
でもやっぱり、サイトを頭から読んでいくよりも、プログラミングしてる方が楽しい。
チートシート作成をサクっと終わらせて、次はjavascriptの勉強をしたい。

try,catch,throwあたりを動かしながら覚える

6月6日から作っている、「パラメータファイルみたいなのを読み込んでHTMLファイルを出力する簡単なプログラム」の簡単なテストを行った。

エラー系のテスト内容はこんな感じ
・パラメータファイルを消す
・パラメータ行を消す
・構文エラーのパラメータ行を書く
・パラメータの値を不正にする
チェックリストは作らなかったけど、ざっくりと網羅した。
catch(Exception e)とかを除けば、ほとんどの行を動かしたはず。カバレージ取得してないけど。

よくわからずに適当にtry catchを書いてたから、思ったように動かない。エラーになっても処理続行したりする。
処理を止めたいところにはSystem.exit(-1);を記述するようにした。
System.exitなんて、プロンプトから手動で実行するプログラムぐらいしか使わない気がする。

ちょっと悩んだのが、「パラメータを一通りチェックして、一つでもエラーがあればHTML出力処理に入らずに終了する」の実装。
パラメータを一つのメソッドで全部チェックする方法も考えたが、結局以下のようにした
・引数としてパラメータ行を受け取り、パラメータ値を返すメソッドを実装
・エラーの場合は、System.errにエラーメッセージを出力し、throw new Error()
・呼び出し元がcatch(Error e)をし、フラグをON。チェックするパラメータが残っていたら処理続行
・パラメータを一通りチェック後、フラグがONならSystem.exit(-1)
もっとエレガントなやり方があるんだろうけど、ループ処理で書いたのでソースコードはそんなに読みづらくない。

とりあえずJavaの基礎の基礎はなんとなく分かった気がするので、明日は入門サイトを通して読んで、構文などを自分なりにチートシートとしてまとめようと思う。
入門サイトで「えーとあれはどのページだったかな」と探すのが面倒だったから。

<2010-06-12 追記>
ErrorとExceptionの違いが理解できたので、上記のthrow new Error()はおかしいことがわかった。
この場合はErrorではなくExceptionをthrowすべき。

上記の
「パラメータを一通りチェックして、一つでもエラーがあればHTML出力処理に入らずに終了する」の実装
を、例外をthrowしない方法に修正した。
修正内容はこちら

知らずに「推奨されてないAPI」を使ってしまった

昨日に引き続き、「パラメータファイルみたいなのを読み込んでHTMLファイルを出力する簡単なプログラム」を修正。

パラメータファイルに書いたパラメータが、
param=""
みたいになときに、うまく空文字列""を認識してくれない。

調べたところ、java.util.StringTokenizerクラスでは、連続する区切り文字は一つと見なしていた。
"を区切り文字としてStringTokenizerクラスを使うと、空文字列""は認識されない。
StringTokenizerの引数returnDelimsを使えばいいのだが、処理がちょっと長くなる。

API仕様書を良く読んだところ、
StringTokenizer は、互換性を維持する目的で保持されているレガシークラスであり、新規コードでは使用が推奨されていません。この機能の使用を考えているなら、String の split メソッドまたは java.util.regex パッケージを代わりに使用することをお勧めします。
と書かれていた。
「Java入門」で検索して一番上に出てきたサイトで、「有用な(?)クラス群」の一つとしてStringTokenizerが紹介されてたのに。
古いサイトではよくあることなんだろう。これからは気をつけよう。
結局、API仕様書に従ってStringTokenizerをString.splitに置き換えた。

パラメータファイルも充実してきたので、機能追加はしばらくいらないかなと思っている。
明日は、エラー処理も含めてちゃんとテストしてバグ出ししようかな。

昨日作ったJavaプログラムをちょっと修正

昨日作った「パラメータファイルみたいなのを読み込んでHTMLファイルを出力する簡単なプログラム」を使って
極めて私的な作業をした。
作業しながら、「このパラメータを追加した方がいいな」と思ったパラメータを少し追加した。
パラメータファイルをチェックする処理や例外処理を追加したが、エラー系の処理のテストはしていない。
とりあえず動くものを作るのが目標で、テストは後回しにしている。
でも例外処理まわりの動きがよくわかっていないので、近いうちに動かしながら覚えていきたい。

今やっている極めて私的な作業のケリがつくまで、「作業のついでにJavaの勉強」という感じでやっていこう。

一応Javaプログラム完成

昨日の日記で書いた「パラメータファイルみたいなのを読み込んでHTMLファイルを出力する簡単なプログラム」だが、何とか動くものができた。
複数のクラスを作成して、まともに動くJavaプログラムを組んだのは初めてだと思う。

関数みたいなのを作って実行したいんだけど、どうやって実装するんだ?と迷った。
結局「メソッドしかないクラス」を作ってそのメソッドを関数みたいに使ったんだけど、これでいいのだろうか。
クラス設計の概念みたいなのをほとんど理解してない。

ファイル入出力も、ストリームの概念がよくわかってないし、
new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile,true), "UTF-8"))
みたいなのを理解できてない。Webで検索したら出てきたソースをパクっただけ。

そして今日一番ハマったのが、
「UTF-8で出力したはずなのに、テキストエディタで見たらSJISと表示される」現象
パクったソースだから、何がおかしいのかよくわからない。
手元にちゃんと動くプログラムが無いから、何が正しいのかもわからない。
デバッガとかも使って色々やった結果、
半角英数字はUTF-8もSJISも同じ文字コード
が原因だとわかった。
正しくUTF-8で出力してるんだけど、全部半角英数字だからエディタでSJISと判定してた。
わかってる人に聞いたら瞬時に原因判明するんだろうけど、問題解決方法の訓練の一貫と考えよう。

さて明日はどうするか。作りたいHTMLファイルは何種類かあるから、今日作ったプログラムを洗練させるか。
エラー処理ほとんど入ってないし。

HTMLの勉強のつもりが、Javaに手を出す

HTMLとCSSの勉強をしようと、ちょっとしたことをまとめたHTMLファイルを作ろうとした。
レイアウト後回しで、とりあえず作ってみたが、項目をいちいち書いていくのが面倒になった。
そこで動的にHTMLを生成しようと思ったのだが、
・低スペックのノートPCしかないので、Webサーバを立てる気にならない
・極めて私的なことなので、外部のWebサーバにアップしたくない
ためにPHPなどで記述するのは見送り。

で、パラメータファイルみたいなのを読み込んでHTMLファイルを出力する簡単なプログラムを組むことにした。
せっかくだから勉強を兼ねてJavaで作る。

今日やったこと
・JDKとEclipseのダウンロード&インストール
・Eclipseの簡単な設定。日本語化とビルドできるところまで。

プログラムのざっくりとした仕様はまとまったので、明日からJava入門サイトを見つつ本格的に作っていく。
プロフィール

himax64

Author: 南西
30代後半の無職です。
就活もせずダラダラ生きてます。
作ったもの

最新記事
人気記事
検索フォーム
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
QRコード
QRコード
カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。