>>947 try {
URL url = new URL("
http://www.google.com/");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
try{
conn.setRequestMethod("GET");
}
finally{
conn.disconnect();
}
} catch(IOException e) {
}
とでもするのがいいんじゃなかろうか。
>>952 これってfinally節を必ず実行するの?おれはこう書いてた。
HttpURLConnection conn = null;
try {
URL url = new URL("
http://www.google.com/");
conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
} catch(IOException e) {
...;
} finally{
if(conn != null){
try{
conn.disconnect();
} catch(IOException e){}
}
}
>>953 openConnectionがちゃんと実行されるなら、必ずdisconnectしてよいのではなかろうか。
接続されなくて例外が発生すればそのままそとのcatchに逝く
>>953の書き方だとむだな条件判断と、connのスコープがむだに広いのでなんか嫌な感じ。
ただ、そもそもここまで気を使って書くこともすくない。
>>949 だからねーつってんだろうが。char なんて色んな言語にあるわい。
Java に限った話じゃないっつの。
>>954 httpに限らず953みたいな書き方は普通だと思うな。
ファイルストリーム周りとか。過去スレでちょっと
もめた?気もするけど最終的には異論はなかったはず。
finally節中、何もしないcatchのコメントの書き方
とか違う方面で話は進んだ気がする。
>>956 とりあえず、すっきり書けるのにまわりくどい書き方するのがなんだか。
>>955 ( ´_ゝ`)フーン
で、charってなんて読む?
大変です。これが分からないとカスピ海が埋まってしまいます。
カスピ海のためにも是非教えてください。
今、そのアプリ自身がどのディレクトリにいるかを知るのってどうするんでしょう?
>>959 勝手にうまっとけ。
それか、「アプリ」が「ディレクトリにいる」ということの定義しる。
>>957 コードの見通しが悪いだろう?
スッキリ書くのと短かく書くのは違うぜ。
>>959 言いたいことは何となく分かるが不可能だ。
>>962 クラスのパスなら
Class c = this.getClass();
String className = c.getName().replace('.','/') + ".class";
String s = c.getClassLoader().getResource(className).toString();
みたいな感じでとれるけどね。
>>960,962,964皆様ありがとうございます。カスピ海は諦めることにしました。
966 :
デフォルトの名無しさん:03/03/26 11:53
>>966 ノノノノ
( ゚∋゚) やらないか
/⌒\ /⌒\_______
| ̄ヽ二ミ ∩ _ |
|_________\_| | ___丿____|
/_____________\彡ノ_________\
‖ \ヽ ‖
ヽミ
>>959 確実な手段じゃないけど、
環境変数を得て、PATH とか CLASSPATH に書かれてる場所を片っ端から検査するとか。
このスレ全然初心者大歓迎じゃないじゃん
>>974 初心者とそれ未満のバカは明確に区別、差別される。
>>974 結構初心者にはまともに相手してると思うけど。
自分でなにもしないやつは放置だけど。
>>952-953 懐かしいネタだな。書き方の好みの問題ではなく
>>953 の方がより好ましいと説明した
のは 1 年くらい前だったか。あの時はファイルの open/close の話だったかな。
リソースの開放に関しては
>>952 でも
>>953 でも滞りなく行われるだろう。ここで問題
なのは try-catch ブロック内で例外が発生し、その影響で finally 内のリソース開放
処理も例外になった場合だ (多重障害)。
>>952 のように記述した場合、外側 catch で
捕らえられるのは「クローズに失敗した」という副作用的な情報だけである。つまり、
障害の根本原因の情報が副作用的な情報によって上書きされてしまうという弊害が出る
可能性がある。
try{
SomeResource resource = getSomeResource();
try{
// このブロックのどこかで例外が発生
} finally {
resource.close(); // その影響でこの処理も例外
}
} catch(SomeException ex){
// ここで捕らえられる例外は close に失敗したという情報であり、try ブロック
// 内で発生した例外ではない
}
ここでの話の焦点はかなりのレアケースである。だからこそ、書き方の好み云々ではなく
本番運用中の一発勝負で障害解析ができるだけの配慮がなされているかが重要と思われる。
でも
>>953 でも finally 内の catch ブロックで printStackTrace() くらいやっとい
てもよかったかもな。
また 1 年後くらいに同じネタが振られそうな悪寒。
Java 初心者が質問に答えるスレですが何か?
>>977 >多重障害
同意
try{
throw new Exception("ぬるぽ");
}
finally{
try{
throw new SomeException("ガーン");
}
catch(SomeException e){
}
}
というとき、"ぬるぽ"はどうなりますか?あぼーんですか?
>>979 なんでそんなコードが出てくるんだ… try-catch-finally の挙動分かってる?
>>980 Σ(゚д゚lll)ハンカクカナでおながいします
>>981 >>977で言えばresource.close()での例外をfinallyの中で捕まえたらどうなるの?ってことなんですが。
>>984 char=ぬるぽ
ってことで決着でつね?
>>979 ぬるぽが try-catch-finally の外に飛び出る。てか、やって見れ。
>>986 ほんとだ。
じゃ
try {
URL url = new URL("
http://www.google.com/");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
try{
conn.setRequestMethod("GET");
}
finally{
try{
conn.disconnect();
}
catch(IOException e){
}
}
} catch(IOException e) {
}
のほうが
>>953より好み。うほっ。
>>987 俺はインデントが深くなるのが気になるので
>>953 みたいな書き方をするが、
指摘した件は
>>987 でも満たしているので後は好みの問題だな。
>>988 どっちも最深3段だし、あまりインデント的には変わらなくない?
まぁ、好みの問題なのかな。
setRequestMethodで発生した例外とdisconnectで発生した例外の処理される順番というのもあるだろうけど。
それもまぁポリシーの問題か。
>>989 いや、
>>987 でいう内側の try-catch ブロック内に長々と実処理を書くことに
なるから、その部分のインデントが深くなるのが気になるだけ。
993 :
デフォルトの名無しさん:03/03/26 21:21
>>954 そもそも気を使って書く癖をつけなさい。
>openConnectionがちゃんと実行されるなら、必ずdisconnectしてよいのではなかろうか。
openConnectionがちゃんと実行される保証はどこにもない。
「connがnullでない場合=ちゃんと実行されている」だから
if(conn != null)と聞くのは正しい。っていうか定石。
オープン出来なかったコネクションを終了時にクローズしようとする方が
激しく気持ち悪い。JDBCで同じことやってみろ。悲しい結末になる。
要は、気を使えってことだ。
>>953からスコープがどのくらいなのか、厳密にはわからないだろう。
ここで生成したコネクションを今後どう使うかわからんだろ?安全な範囲で
広いスコープにしておくのは常識。
無駄に広いなんて言えない。むしろ、良い例なのだ。
>>988-989 インデントにはスペース二個が最適
よって気にならず
誰か次スレよろ。
漏れスレ立てられない。
次スレ立てる人へ、
次スレ立てるときはテンプレートが全てレスされるまで常にsageでテンプレートをレスしてください。
>>993 openConnectionが実行されないということは例外が発生してるはずだろ。
だから、disconnectの時点では必ずopenConnetionしてる。
>>995 スレを立てると一番上に上がるのですが?
1000GET!!!
静かだねぇ
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。