Javaメモ


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

メソッド名の後ろにつけるthrowsはエラーがこのメソッド内で出てくることを呼び出し側に明示。

class Hoge{
  void hugaMethod() throws Exception { ... };
}


python基準で書いてます。

完全なる誰得メモです。


#jythonコード
from java.lang import System
from java.io import *

reader = BufferedReader( InputStreamReader( System.in ) )

try:
  line = reader.readLine()
except IOException,e:
  print e.detail
else:
  print line

javaはBufferedReaderを使う。

BufferedReader InputStreamReader System.in

がおまじないなんてなかなか覚えにくい。

System.inは標準入力。

InputStreamReaderは読み込み専用のストリーム。

でストリームを読むにはBufferedReaderが必要。

…ということでいいのかな。


#jythonコード
from java.lang import Math

Math.random()

Mathはjava.langに。


javadoc用のタグ。


>|java|

public static final int MAX_QUESTION = 10;

P79より引用

constよりも柔軟な気がする。


try{ ... } catch(Exception e){ ... }


文字列オブジェクトを==で比較してしまうと

オブジェクトidの比較になる。

演算子のオーバーライドが無いからしゃーない。

それがjavaの綺麗な所だったりもするし。

"hoge".equals("hoge")

for文は螺旋階段

昔はあんまり納得できなかっただろうけど、

末尾再起をやったあとだとなおさらそう思う。


文字列メソッドの一部

String#replase(char oldChar,char newChar)

replaseにcharしか使えないのはイタイ。

おそらくstringを置き換えるものもあると思いたい。

String#substring(int beginIndex)

String#substring(int begin, int end)

stringからindex以後の文字を抜き出す。

オーバーロードで引数違いのヤツもある

#jythonコード
string[begin:end]ってこと。

String#trim()

ホワイトスペースを抜く。

do-whileがあるのは地味にありがたい。

配列

int[] hoge;
hoge = new int[256];

参照をつくってnewする。

hoge = null;

参照が切れるとゴミ対象。

AS3では任意のタイミングでゴミ集めするのがあったけど、

javaにはあるのかな。

GCのコードはよくわかりまへん。

上巻では大体こんな感じ。

下巻流し読み

ちゃんとしたオブジェクト指向をやってない僕は

だいぶ流し読めない内容になってる。

プロトタイプベースの

オブジェクト指向に触れてなかったら、

もっとひどい理解だったと思う。

冒頭に出てきたクラスのメモ。

  • File
  • FileReader
  • FileWriter

ファイル操作は18章。


スタックとヒープ

変数r1が確保されている領域をスタック(stack)と呼び、
またRectangleのインスタンスが確保されている領域をヒープ(heap)と呼びます。

p22引用

初歩的な所だけど、勘違いしてた自分。

ヒープ=>木構造とメモリのヒープ領域は別物なんですね。

スタックの話はなんとなくしかイメージできないので、

いつかx86でも、なにかのVMでもいいんだけど、

触って弄ってみたい所ではある…。


修飾子

final

finalな変数は定数よろしく大文字にしとく。

イミュータブルオブジェクトが作りやすそう。

abstruct

よく使う。abstructクラスは一部が仮想関数・・・じゃなかった、

抽象メソッドになってるクラス。

全部抽象メソッドになってるのはインタフェース。

抽象メソッドっていうの良くないと思うんだ。

別に中身が無いことが抽象的なわけじゃないし。

シグネチャ定義済みメソッドとかどうでしょう。

synchronized

synchronizedメソッドであることをあらわす。(16章へ)

native

java以外の言語で書かれたメソッドであることを表す。

toStringメソッド

pythonの__str__や__unicode__に当るメソッド。


super();

でスーパークラスのコンストラクタの呼び出し。

もちろん引数も入れられる。

this();

で自身のコンストラクタを呼び出し。

コンストラクタのオーバーロードを行っている時に、

thisに引数を指定してやればそっちが動く。

super()が呼び出されていないコンストラクタでは

コードの最初にsuper()が挿入される

is-a関係とhas-a関係

継承。一方は委譲。

has-a関係は合成と呼ぶ。

継承のよさはリファクタリングで読んだので割愛。

@Overrideはつける

「フィールドとメソッドが持つ意味」

コンストラクトを変えるような

拡張をしてはいけない。

フィールドにある名前がかぶったとき、

スーパークラスのフィールドが隠れる=>ハイディング

変数もハイディングできるのね。あんまりしないけど。


finalメソッドはオーバーライド付加。

virtualよりもいいよね。


例外

例外ってなんだ?って思ってた当時を振り返ってみると、

初めから実行時エラーって言ってくれたなら、

もっと早く理解が進んだのにと思う。

ただJavaの場合はちょっと意味合いが違うとは思うけど。


>>投げられているのはクラスではなくインスタンス

P82

Javaってクラスの参照を変数に代入したり

できるもんなんだろうか。

プロトタイプパターンになりそうだけども。


p89

ネットワーク処理

URL url = new URL("あどれす")

new BufferedReader(new InputStreamReader(url.openStream()) )

にすればurlopenみたいに使える。


try{
  FileReader reader = new FileReader("filename");
  ...
}catch(FileNotFoundException e){
  ...
}catch(IOException e){
  ...
}

お待ちかね。ファイル処理。

BufferedReaderを利用すると

データを読み込む際にバッファリングが行われ、

読み込みが早くなるとのこと。

new BufferedReader(new FileReader("filename"));

google...

BufferedReaderはReaderオブジェクトを引数にとる。

Reader#read(char[] cbuf, int off, int len)

Reader#close()

の2つのメソッドを持つオブジェクト。

public FileReader(String fileName) throws FileNotFoundException;

p87引用

throwの後に送出される可能性のある例外を記述。

ここらへん僕は適当すぎるので、

しっかり設計して書いておきたい所。


ExceptionにはThrowableインタフェースが実装されている。

おなじくThrowableなインタフェースを実装したクラスには

Errorがある。

Errorは動作を継続することが不可能な時に投げられる

オブジェクト。

Exceptionは正しく例外処理を行って

動作が継続することを期待するときに

投げられるオブジェクト。

だから例外=実行時エラーとは一概には

言い切ることができない様子。

ぎょっとしてpythonでも調べてみたけど、

Exceptionしか見つけられなかった。

また、Exceptionを継承したRuntimeException以外にも、

コンパイル時にチェックされる例外もあるようで、

Javaの例外は奥が深い。

P93はもう一度読んでおく必要あり。

スタックトレース

スタックトレースの中身ってcatch節や、

except節じゃないと取れないのかな。

atexit(callback);

のcallback内でひっぱってきたいんだけど・・・。

ちなみにjava版atexitは

Runtime.addShutdownHook(Thread hook);

あとでここのサイトさんも見る。

http://www.techscore.com/tech/Java/JavaSE/Thread/6/

finally

try-elseできないので、

後始末が結構重要になるのではと予想。

pythonにもfinallyはあるのだが…。

自作例外を作るに当って:

RuntimeExceptionやErrorの拡張クラスは避ける。

try節などのコンパイル段階でわかる例外処理の記述ミスを

検出してくれない。


ここまでくると結構内容が濃い。

内容が濃いと感じるってことは得るものが多いって事だな。

threadのRunnableインタフェースは16章。


今日は寝るっ。(2011/10/13)

全体を通して。

コンパイルするのが面倒すぎる。

これにテストと設計もやるのが普通のプログラマと考えると、

今mavenとEclipseもイライラしながら触ってて、

ビルドの自動化も勉強して・・・。

肝心のアーキテクチャやらアルゴリズムも

あと半年で触らなきゃならないと思うと、

ホントに死んじゃうんでないかと。