トップページ⇒tech
1001コメント323KB

【初心者・ネタ】Java質問・相談スレ【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
さーじゃんじゃん質問しよう。
お前らとりあえずがんがってください
そして誰か教えてください。

関連スレ
初心者無視! Java相談室 その9
http://pc.2ch.net/test/read.cgi/tech/1021555964/
調べようとする優秀な奴は↑へどうぞ。

0446デフォルトの名無しさんNGNG
あきらめてどっかいっちゃったかな。
0447デフォルトの名無しさんNGNG
import java.io.*;
public class Thankyou {
  public static void main(String[] argv) {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String str = null;
    while (true) {
      try {
        str = in.readLine();
      } catch (IOException e) {
        e.printStackTrace();
        break;
      }
      if (str != null && str.equals("こんにちは")) {
        System.out.println(str);
      }
      if (str == null || str.equals("quit")) {
        break;
      }
    }
  }
}
あたしはてっきりこういうことかと。
0448429NGNG
>>444
一行で「こんにちわ/ありがとう/ごめんなさい」をコマンドラインから
入力(文字列の間に/で区切って)後、何個目?と表示して「3」と入れたら

「ごめんなさい」

と表示する感じです。

>>446
頑張っていました・・・
0449デフォルトの名無しさんNGNG
public class KonNichiWa{

 public static void main(String[] args){
  if(args[0].equals("1"))
   System.out.println("こんにちは");
  else if(args[0].equals("2"))
   System.out.println("ありがとう");
  else if(args[0].equals("3"))
   System.out.println("さようなら");
 }
}
0450デフォルトの名無しさんNGNG
>>448
わかった。
1行入力は良いな? BufferedReader#readLineあたりを使う。
String line = reader.readLine();
とか。

次はbeginを0にしといて、
end = line.indexOf('/', begin);
で1文字ずつ'/'の位置を探す。

endが負なら'/'がbegin以後に無いと言うことなので、
line.substring(begin) で文字列が切り出せる。

endが0以上なら、
line.substring(begin, end)で次の'/'の前までを切り出せる。
begin = end + 1; としてこれを繰り返す。
0451429NGNG
>>445
中学の宿題で明日提出期限なんです。
いくら考えてもわかりませんでした。。。
0452デフォルトの名無しさんNGNG
StringTokenizer 使え
0453デフォルトの名無しさんNGNG
StringTokenizer t = new StringTokenizer(line,"/");
0454452,453NGNG
>>429
思いっきり前に出てるじゃんか。
StringTokenizer
0455デフォルトの名無しさんNGNG
もっとがんがん質問せいやー。
真剣な質問ならこたえたるでー。(寝てなければ)
0456デフォルトの名無しさんNGNG
>>429
せっかく436で答えが出てるのになんで、
>いくら考えてもわかりませんでした。。。
なんて答えが返ってくるのかと問い詰めたい。
0457429NGNG
みなさま、ありがとうございます。
StringTokenizerを使って解決できました。

朝からネットでいろいろ検索してもわからなかったです。
StringTokenizerを使うというのは常識なのでしょうか・・・
0458デフォルトの名無しさんNGNG
問題=特定の文字列で区切られた値を取り出したい
StringTokenizerの機能=特定の区切り文字でトークン(それ以上分解できない最小の単語に)分解する。
問題はStringTokenizerによって解決できるだろ?
0459デフォルトの名無しさんNGNG
>>429
罰として449のをコピペして提出しる。
0460>>435NGNG
とりあえず435は
教えてくれたみんなにありがとうと表示したらどうなんだ?
0461デフォルトの名無しさんNGNG
>>460
429=435=457じゃねーのか?
0462デフォルトの名無しさん NGNG
増毛したいのか?
0463デフォルトの名無しさんNGNG
AのスレッドでZクラスのインスタンスを生成したら
Aのスレッドの一部になるの?
BのスレッドにZのインスタンスの参照渡して
そのインスタンスを操作したらAのスレッドとして動作するの?
0464デフォルトの名無しさんNGNG
マジ最近薄くなってきたんだよね
これって職業病?
0465デフォルトの名無しさんNGNG
スレッドは、処理の流れのことです。

A スレッドでZクラスのインスタンスを作成しようとすると、
その処理は A スレッドで行われます。

A スレッドで作成したインスタンスを B スレッドに渡す、というのは、
両方のスレッドからアクセスできる変数に入れる、ということでしょうか。
0466デフォルトの名無しさんNGNG
Action Listenerを外部クラスで定義した。
ボタンにaddActionListenerして、
ボタンが押されるとActionListenerが
呼ばれるのは良いんだけど
ボタンと一緒に配置してるテキストフィールドとか
チェックボックスの値をActionListener側から
参照する方法はあるんですか?
0467466NGNG
age忘れた
0468デフォルトの名無しさんNGNG
>>466
いろいろなやり方があるよ。
でも、簡単なのは内部無名クラスとして定義することだね。
0469466NGNG
>>468
そうですね。
いくつかサンプルは全部内部無名クラスですね
でも、anyclass$1.classみたいなのが出来るのを
出来るだけ避けたいので外部クラスで処理してみたいです。
0470デフォルトの名無しさんNGNG
>>466
単に、anyclass$1.classみたいなのが出来るのを避けるためであれば、
元クラスの方にボタンクリックで実行したいメソッドを用意しておき、
ActionListenerクラスでは、コンストラクタで元クラスのthisを受け
取るようにして、actionPerformedでは、その元クラスのメソッドを
呼び出す、なんていう方法でいいんじゃないの。
0471466NGNG
>>470
そうですね。そうでいいんだと思います。
ちょっとわからないんですが、
>ActionListenerクラスでは、コンストラクタで元クラスのthisを受け
っていうのはどうやるんですか?
0472デフォルトの名無しさんNGNG
>>466
ActionListenerをaddするためにnewしてるよね。
例えば、ActionListenerクラスをHogeListener、元クラスをMotoClass
とすると、HogeListenerのコンストラクタを
public HogeListener(MotoClass moto){
this.moto = moto;
}
とかする。当然、HogeListenerにはMotoClass moto;っていうフィールド
があるのが前提。
で、MotoClassの中で、addActionListenerしているところで、
hogeButton.addActionListener(new HogeListener(this));
等とするわけさ。
0473デフォルトの名無しさんNGNG
>>466
言い忘れたけど、単に元クラスにimplements ActionListenerして
元クラスにactionPerformedを定義すれば、anyclass$1.classみた
いなのはできないけど、それは分ってやってるんだよね。
0474466NGNG
>>472
ありがとう
できました。
>>473
あ!本当ですね。
ただ、ソースの見栄え的に
明確にMVCを分離するには
ActionListenerは別クラスに
定義すべきだと思いました。


0475デフォルトの名無しさんNGNG
同じ機能を、ボタンや、メニューItemや、ツールバー上のボタンに
割り当てたいときは、Actionを使うと楽だよ。
0476デフォルトの名無しさんNGNG
>475
あっ、楽だね〜。
setEnabled したら全部に適応されるし。
0477デフォルトの名無しさんNGNG
背景スクロールはどんな感じで実装すれば良いですか?
0478デフォルトの名無しさんNGNG
JavaでCDを再生する方法無いでしょうか?
AudioSystemクラスでは再生できないようなのですが。
JNIを使うというのはナシで。
0479デフォルトの名無しさんNGNG
>477
画面クリアの変わりに背景画像drawImageすればよいんでない?

>478
PureJavaでは無理。
JSDLでも使いませう。
ttp://www.libsdl.org/intro.jp/whatcanitdo.html
0480デフォルトの名無しさんNGNG
指定したクラスがロードしているネイティブな外部プログラム(DLL等)を
ファイル名で知りたいんですが可能でしょうか?
外部のツールでかまわないのですが。
0481デフォルトの名無しさんNGNG
Java勉強したいんですけど、教科書何にすればいいでしょう?
演習があって、やさしい(学術書や専門書じみたやつでない)やつが
いいんですけど。
0482481NGNG
ああ、私書ける言語はありません。
0483デフォルトの名無しさんNGNG
>>481
ザ・Javaはクソなので注意。
まぁ、あの地味な表紙じゃ買わないか。
0484デフォルトの名無しさんNGNG
>>481
入門ソフトウェアシリーズの
Java言語が初心者にも見やすい。
が必ずもう一冊買うはめになる罠
0485477NGNG
>479
それは1枚絵にしろということですか?
0486デフォルトの名無しさんNGNG
JAVAってゲームパッドは使えないの?
0487デフォルトの名無しさんNGNG
>>486
ホストOS側で工夫しないと無理。
0488デフォルトの名無しさんNGNG
>486
標準のAPIだけでは無理。

PureJavaでなくてよければ↓
DirectInputとかのラッパー
ttp://www.hardcode.de/jxinput/
Java3DのInputDeviceとしても使えるらしい。

あと、JavaGameProfileにも入力用のAPIが入るらしい。
0489デフォルトの名無しさんNGNG
>>488
JavaGameProfile
http://jcp.org/jsr/detail/134.jsp
0490デフォルトの名無しさんNGNG
thisについて質問です。
よく
drawImage(img,0,0,this);とかaddActionListener(this);
と色々なところで使われますが、一体このthisは何者なんでしょうか?
その都度に必要なインスタンスの参照を渡すという解釈でよろしいのでしょうか?
0491デフォルトの名無しさんNGNG
サブクラスで拡張し、そのインスタンスをスーパークラスのオブジェクトにした場合
拡張した部分は有効なのでしょうか?
また、有効ではない場合、スーパークラスからまたサブクラスのオブジェクトに
戻すと元のサブクラスだったときに設定してあった変数の中身などは
有効になのでしょうか?
0492デフォルトの名無しさんNGNG
>>490
× その都度に必要なインスタンス
○ カレントオブジェクト
0493デフォルトの名無しさんNGNG
>>491
>スーパークラスからまたサブクラスのオブジェクトに戻す
キャストするってこと?
0494デフォルトの名無しさんNGNG
>>491
public class Parent{
}

public class Child extends Parent{
public void showMessage(){
System.out.println("OK");
}
}

public class ExtendsTest{
public static void main(String[] args){
Parent child = new Child();
((Child)child).showMessage();
}
}
0495デフォルトの名無しさんNGNG
>>494
試してみました。分っかりました!
スーパークラスのインスタンスになってる時はダメで、
また元に戻せば有効になるんですね!
ありがとうございました!!

>>492
ちなみにカレントオブジェクトってどういうのですか?
クソ素人野郎なので分からないことばかりですみません。

>>493
そのとおりです。
0496デフォルトの名無しさんNGNG
>>495
カレントオブジェクト:そのキーワード(this)が実行されているオブジェクト。
簡単に言うなら、その"this"という単語から、外に向かって
最初に行き着いたクラス(から作られたインスタンス)

だから、490の例でいえば、そのカレントクラスは前者:ImageObserver
後者:ActionListener を実装しているから、そのような扱いが出来るってこと。

で、thisの使い方は、ここで説明した「カレントオブジェクトの参照」の他に
もう一つあるのでちゃんと調べておくと良いです。
0497デフォルトの名無しさんNGNG
>495

class Parent{
public void showMessage(){
System.out.println("BAD");
}
}

class Child extends Parent{
public void showMessage(){
System.out.println("OK");
}
}

public class ExtendsTest{
public static void main(String[] args){
Parent child = new Child();
child.showMessage();
}
}
0498デフォルトの名無しさんNGNG
490より>>496さんへ
 なんとなくですが、わかりました。
 どうもありがとうです。
0499デフォルトの名無しさんNGNG
SUNの所にあるチュートリアルを読んでSwingを勉強しているのですが、
以下のコードがよく分からないので質問します。

//コード
JButton convertTemp;
...
convertTemp.addActionListener(this);←ココが分かりません。
...
public void actionPerformed(ActionEvent event) {
...
}
//終わり

convertTemp.addActionListener(this);を実行するとなぜactionPerformed
を呼び出して実行するのでしょうか?

addActionListenerのプロトタイプは
addActionListener(ActionListener l)となっています。

「this」というのは、オブジェクト自身のことですよね?なぜ明示的にactionPerformedを
呼び出していないのに、それが実行されるのですか?

http://java.sun.com/docs/books/tutorial/uiswing/mini/thirdexample.html
0500デフォルトの名無しさんNGNG
>>499
>なぜ明示的にactionPerformedを
>呼び出していないのに、それが実行されるのですか?
この場合、actionPerformedを呼び出すのは、JVMのイベントディスパッチ
スレッド。つまり、ボタンが押されたら自動的に呼び出されるという
こと。
また、このクラスは、implements ActionListenerと定義されていて、
public void actionPerformed(ActionEvent event) を定義しているの
で、立派にActionListenerとして働くことができる。
0501499NGNG
>>500
どうもです。
うーむ、オブジェクト指向の基礎が抜けているので、もう一度復習してみます。
それとイベント関連のメカニズム、スレッドが分かってないんでそれも勉強します。
ありがとうございやした。
0502デフォルトの名無しさんNGNG
public class A{
...
}

public class B{
...
}

public class Main{
...
}

のようなプログラムをコンパイルするためには
イチイチソースを3つに分けて
javac A.java
javac B.java
javac C.java
のようにコンパイルしなくてはならないのですか?
0503デフォルトの名無しさんNGNG
やってみりゃすぐわかるだろうが。
0504デフォルトの名無しさんNGNG
やってみたんですが、
Main.java
をコンパイルするとpublicなclassやinterfaceは
A.java B.javaのように定義しろって言われました。
ですが、AというクラスでクラスBのインスタンスを生成し、
クラスBではクラスA型の変数を宣言しているので
切り離すことが出来ないんで、どうしたらいいんだろうと思いまして。。。
0505デフォルトの名無しさんNGNG
>>502は、あれだ。自分の時間を節約するためなら
他人の時間を平気で浪費しても罪悪感をもたないタイプだ。
0506デフォルトの名無しさんNGNG
切り離すことができないって、実際に分けてやってみたのか?

0507デフォルトの名無しさんNGNG
実際に分けてやってみました。
もう一度やってみます。
0508デフォルトの名無しさんNGNG
クラス定義ファイルを分けたから
インスタンス化できないなんてことはない
文法がおかしいだけだろ
0509デフォルトの名無しさんNGNG
おっしゃる通り文法ミスでした。。。
コンパイルできました。
申し訳ありませんでした。
ありがとうございました。
0510   NGNG

質問ですが、

br は BufferedReader のクラス変数
str は String のクラス変数

であってますでしょうか?インスタンス変数ではないんでしょうか?

import java.io.*;

class Sample
{
....public static void main(String srgs[]) throws IOException
....{
........System.out.println("整数を入力して下さい。");

........BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
........String str = br.readLine();
........int num = Integer.parseInt(str);
........System.out.println(num + "が入力されました。");
....}
}
0511デフォルトの名無しさんNGNG
>>502
その前に main()にしれ
0512デフォルトの名無しさんNGNG
>>511
ハァ?
0513デフォルトの名無しさんNGNG
String srgs[]
0514デフォルトの名無しさんNGNG
>>513
ハァ?
0515デフォルトの名無しさんNGNG
ここは初心者が集まるスレなんですね?
0516デフォルトの名無しさんNGNG
>510
ローカル変数です。
0517デフォルトの名無しさんNGNG
>>511はあれだ、ちっとだけ Java を覚えて Main クラスを作るときに main(String srgs[]) にしたいんだな。
0518   NGNG
>>516
クラスか、インスタンスか、と聞いて、ローカルと答えるのはなぜ?
0519   NGNG
っていうか ローカルなら自クラス内で宣言しなきゃいけないと思うんだけど?
0520デフォルトの名無しさんNGNG
どちらも違います。
0521   NGNG
>>520
んじゃ なんですか?
0522デフォルトの名無しさんNGNG










スレが腐ってるから馬鹿しか いないぞ 質問者!!!!!










 
0523   510NGNG
あっわかった。

br は BufferedReader のクラス変数
str は String のクラス変数

じゃなくて

br は BufferedReaderクラス の変数
str は Stringクラス の変数

でした。ありがとうございました。
0524デフォルトの名無しさんNGNG
>>510
あ?くろーとさんはうちじゃおことわりだよ!
0525デフォルトの名無しさんNGNG

よし、次
0526デフォルトの名無しさんNGNG
Cd = Cd
Ad = As
な感じのAlphaCompositeが欲しい。
おまいら こんな時どうしますか。
0527422NGNG
私は、「フウリン」と申します。
現在クソスレを立てる仲間を集めています。
目的は家庭用ゲーム板にクソスレを立てまくることです。
その数に限りはなく、同時に立てたいのです。
一応目標は、150を目指しています。
そこで相談なのですが、クソスレを立てる仲間を募集しています。
現在、15名近くしかいなくて、同時に150立てるには絶望的です。
必ず一人一個というルールでやるので、150人ほしいのです。(規制くらわないために)
もし私の目的に応じてくれる方がいたら助かります。
では、最後に立てる状況までについて説明します。
1  まず、このコピペをさまざまな所に貼ってください。
2  そして、決行時間5月30日の午前0時、つまり夜の12時に家庭用ゲーム板にクソスレを1個立ててください。
   それで終了です。
なお、このレスに対する返答は要りません。
皆が、各自の意思で行ってください。
必ずあなたと同じ考えを持ち、クソスレを立ててくれる方は現れます。
やってはいけないことも、皆でやれば怖くありません。
一緒に家庭用ゲーム板を破壊しましょう!
では、5月30日の午前0時から祭りが始まることを祈りつつ、私、「フウリン」の話を終わらせていただきます。
みなさん、よろしくお願いいたします。



0528デフォルトの名無しさん NGNG
廃れた参照とはなんでしょうか?
0529仕様書無しさんNGNG
>>510
br は BufferedReaderクラスのインスタンスもしくはオブジェクト
str は Stringクラスのインスタンスもしくはオブジェクト

と普通は言うと思うぞ
もしくは

br、strはmainメソッドのローカル変数

だ。細かいようだが言葉は正しく使わないとあとで泣きを見ることになる
0530デフォルトの名無しさんNGNG
さらに細かいこと言うぞ。
参照変数の事を「オブジェクト」と呼ぶと痛い目に遭うぞ。

Vector v = new Vector();
Data d = new Data();
d.setA(1);
v.add(d);
d.setA(2);
v.add(d);
  ↓
javaは値渡しであることだけ頭に入れとくと、
「Aが”1”と”2”のDataオブジェクトを追加したはずなのに、
 Aが”2”のDataオブジェクトが二つ入ってる!」
と言うことになる。

俺は意地でも「〜オブジェクトへの参照」と呼ぶようにしている。
0531デフォルトの名無しさんNGNG
分かりにくいな。
Dataオブジェクトは”A”というメンバを持つと思ってくれ。
0532   510NGNG
>>529 >>530
詳しい説明感謝です。その辺の説明を編集して本にはさんでおきます。

そういう意味で解釈しているんですけど、本に書いてある言葉が間違っているのかな?と質問させていただきました。

本に間違った説明があることってよくありますからね。
0533HOENGNG
>>531
メンバはC/C++系の呼び名と思われ

JavaはプリミティブTypeを除けば「ポインタ(Refference型)」しかないわけだから
オブジェクトは参照に決まっている。だから  >>530 の
>>俺は意地でも「〜オブジェクトへの参照」と呼ぶようにしている。
は正しい。

C++でいえば
BufferedReder *br = new BufferedReader();
と書くところを、クラスオブジェクトはReffer型しかないにきまっているJavaは わざわざ * をつかわないだけ。

BufferedReader br = new BufferedReader()
brはBufferdReaderクラスのインスタンスオブジェクト。
0534HOENGNG

C/C++
ポインタ dから参照するときに d->setA(1);

Java
実体から参照するときは d.x

何度も言うがJavaはプリミティブ型を除けばポインタ(参照)しかない。
わからなければ また質問しれ 管理age
0535デフォルトの名無しさんNGNG
いつもお世話になっています。また、質問をさせてください。

よく、
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
のようなコードを見かけます。ところが、最後にin.close();をしている本と
していない本があります。一般に、ファイルを開く場合なら、私の知る限り100%
closeしているのに、System.inのときは、たいていの教科書がcloseしていない
のです。
今のところ、動作に問題はないのですが、不安です。
System.inの場合もcloseした方がよいのでしょうか、それとも不要なのでしょうか?

よろしくお願いします。
0536デフォルトの名無しさんNGNG
不要。
使わないなら明示的に閉じてよし。
0537535NGNG
>>536
やはりそうなのですか。ありがとうございます。
安心して寝れます。
0538デフォルトの名無しさんNGNG
インスタンスオブジェクト?
0539デフォルトの名無しさんNGNG
すみませんほんとDQNな質問なんですけど
バッファってなんですか?
0540デフォルトの名無しさんNGNG
>>535を読んで、俺も不思議に思った。
>>536が「不要」と言い切る理由は、System.inは別に閉じる必要がないということ?
今見たら、結城さんの本ではたしかにcloseしてるんだよね。
彼は几帳面ということなのかもね。

あと関連して、普通の本では、バッファ付きのWriterでもあんまりフラッシュして
ないような気がするけど、closeするときにフラッシュされると考えてよいのかな?

横からスマソだけど、教えてください。
0541デフォルトの名無しさんNGNG
>>529, 530

「細かいようだが言葉は正しく使わないとあとで泣きを見ることになる」
「と呼ぶと痛い目に遭うぞ。 」

実際に泣いたり、痛い目にあうことは無いと思うけど、この台詞は
鋭く正しいことを言っていると思います。

人に何かを聞いたりするときに、自分の質問の仕方を細かく注意されたときは、
そこに重要な「自分が理解していない何か」があることがあります。

以下長文。しつこく説明されたい人用。

 int a = 5;
 int b = a;

このとき、b には、a に入っていた値 (5) がコピーして入れられます。
この後、a の中に入っている値を変更しても、b の中身は変化しません。

 StringBuffer sb1 = new StringBuffer("abc");
 StringBuffer sb2 = sb1;

ここではもともと sb1 に入っていた「 StringBuffer オブジェクトへの参照 」がコピーされて
sb2 に代入されます。コピーされたのはオブジェクトではなく、オブジェクトへの参照です。

この時点で、sb1 と sb2 は、同じオブジェクトを参照します。

 sb2.append("def");

この処理は厳密に言えば、sb2 の中身を変更しているのではなく、sb2 の中身である
「 StringBuffer オブジェクトへの参照 」を利用して、参照されている先のオブジェクトそのもの
を変更しているのです。

 sb1 = null;

このようにすると、sb1 の「中身を書き換える」ことになります。
もともと sb1 が指していた StringBuffer オブジェクトそのものにはなんの影響も与えません。
単に、
 「sb1 はもともと指していた StringBuffer オブジェクトを指すのをやめた、参照するのをやめた」
ということです。

sb1 はあのオブジェクトを参照するのを止めましたが、まだあのオブジェクトを参照している
参照型変数がありました。 sb2 です。

 sb2 = new StringBuffer("another string");

こうすると、sb2 に入っていた(あの)「 StringBuffer オブジェクトへの参照 」は上書きされ、
別な「 StringBuffer オブジェクトへの参照 」が代入されます。

こうなると、sb1 も sb2 も最初の(あの)オブジェクトを参照するのをやめたわけですから、
(あの)オブジェクトに含まれていた "abcdef" という文字列を取り出すことは出来ません。
どの参照型変数も参照していない(あの)オブジェクトは、(そのうち)ガベージコレクトされます。
0542541NGNG
(続き。惰性で書いてしまったので、・・。)

もう使わないとはっきりしたオブジェクトがあれば、それを参照しないように、null を代入し、
ガベージコレクトの対象になるようにするべきです。使わないのにいつまでも参照を保持している
とき、その参照を「廃れた参照」と言います。メモリリークの1つです。

例えば Vector クラスでは、remove 系メソッドが呼ばれた際には、削除する要素以降の要素を
前に詰めて要素数のカウンタを減らすだけではなく、いらなくなった要素部分に null を代入し、
廃れた参照を保持しないようにしています。その部分には、

  /* to let gc do its work */
 // Let gc do its work

のようなコメントがあります。

Vector に 100 の要素を追加し、99 の要素を remove すると、内部の配列のサイズは 100 のまま
で、最初の要素以外は全て null で埋められます。null ばかりの長い配列を保持させておくのも、
メモリリークと言えます。このような場合は、trimToSize() を呼ぶとよいでしょう。
0543HOENGNG

>>535
ガーベジコレクタというのを知っているな?これはオブジェクトのメモリ領域を開放する際、
そのオブジェクトのファイナライザ(Ffinalizer)が呼び出されるというものだ。
C++でいうところの、デストラクタに当たる。(コンストラクタの逆だな)
しかし、Javaのfinalizerはいつ実行されるかわからないのだ。

「じゃあ、close()しなくてもいいんだ?」

そうじゃない。
メモリをたくさん積んでいる状態ではなかなかガーベジコレクタが起動しないからfinalizerが
動く前に一度にオープンするファイルの数を超えてしまうかもしれない、、、
用意されているfinalizerを当てにしないで明示的にclose()する*必要*があるのだ。
誰かがかたづけてくれるからと言って闇雲に捨ててばかりではいけないのだ。
0544HOENGNG
>> 536
> 不要。
> 使わないなら明示的に閉じてよし。

JVMは以下を意識して実装することを推奨している。
ファイナライザの中でthisをstaticなフィールドに代入してしまうとガーベジコレクタの対象外となる。
よっていつまでたっても close()されない。だからメモリは解放されずにずっとそのままだ。
ちゃんとclose()してね 
0545デフォルトの名無しさんNGNG
>>539 ちったあ自分で検索汁!
http://yougo.ascii24.com/gh/05/000542.html
■ このスレッドは過去ログ倉庫に格納されています