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

【初心者】Java質問・相談スレッド112【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/02/08(金) 19:48:24
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド111【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1200151522/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝のう存じます。

次スレは>>980あたりで。
0478デフォルトの名無しさん2008/02/18(月) 19:08:06
オブジェクトはフィールド、メソッド、クラス、を持つとよく聞きますが、実際にオブジェクトを生成する際、フィールド以外の物も新たに作るのでしょうか?
それとも状態を持つのはフィールドだけなのでメモリにはフィールドのみを生成するのでしょうか?
0479デフォルトの名無しさん2008/02/18(月) 19:13:44
フィールドのみと考えていい
0480デフォルトの名無しさん2008/02/18(月) 19:13:48
クラスとメソッドはほぼ一体。最初にクラスを参照したときにメモリ上に現れ static 宣言
されたフィールドとメソッドを持つ。非 static フィールドはインスタンスごとに作成される。
0481デフォルトの名無しさん2008/02/18(月) 19:16:33
>>479,>>480
素早く分かりやすい回答ありがとうございました。
ずっと気になっていたことだったので本当にすっきりしました。
0482デフォルトの名無しさん2008/02/18(月) 19:23:08
>>477
Test test = new Test(10,5);
これを上の
Test(int i,int j) {
m=i;
n=j;
に入れて、つぎにmとnに1を足すまでは分かる。

Test(Test testC) {
m= testC.m;
n= testC.n;
これどんな処理してるん?
0483デフォルトの名無しさん2008/02/18(月) 19:28:09
testCに渡された既存のTestオブジェクトの中身を
新しく作ろうとしてるTestオブジェクトにコピーしてる
0484デフォルトの名無しさん2008/02/18(月) 19:35:35
Javaのコントロールパネルの出し方教えてくれ
どこにもなくて困ってる
0485デフォルトの名無しさん2008/02/18(月) 19:36:35
test
0486デフォルトの名無しさん2008/02/18(月) 19:37:48
どういうときにコピーコンストラクタは使うの?
0487デフォルトの名無しさん2008/02/18(月) 20:09:37
オブジェクトをコピーしたいとき
0488デフォルトの名無しさん2008/02/18(月) 20:14:13
必要なクラスやライブラリが増えるとクラスパスの設定が面倒になりますが、
自分が書いたソースのクラスファイルを格納してるフォルダに全て突っ込んじゃえばいいと思うんですが、
この考え方は間違ってますか?
例えばDBのJDBCドライバを使うにはCLASSPASSに追加するかtomcatのcommon/binに入れたりするけど
前者の場合、無関係なプログラムにも影響を及ぼすし、後者の場合はコンテナを変えたらまた作業が増える。
自分が作ってるサーブレットのクラスファイルを保存してる場所にJDBCドライバを入れちゃえば全て解決な気がする。
0489デフォルトの名無しさん2008/02/18(月) 20:23:03
Javaのアルゴリズム本はどれがオススメですか?
0490デフォルトの名無しさん2008/02/18(月) 21:36:42
>488
間違ってる
クラスが増えれば増えるほどクラスパスの設定の方が、クラスの競合とかの考慮より楽になる
そんなことよりIDE使っているなら面倒な作業にはならんだろ
0491デフォルトの名無しさん2008/02/18(月) 21:41:45
プリミティブ型も実はクラスある?
判別のために例外的に形だけあるってことかな
int.classやらがあって驚いたわ。
0492デフォルトの名無しさん2008/02/18(月) 21:47:16
Integer.TYPE
0493デフォルトの名無しさん2008/02/18(月) 23:14:44
bolean b;
b=true;
?ここを教えてください。
(b==false)が新になる。

bolean b;
b=false;
?ここを教えてください。
(b==true)が新になる。
0494デフォルトの名無しさん2008/02/18(月) 23:17:06
b=!b;
0495デフォルトの名無しさん2008/02/18(月) 23:24:17
boolean
0496デフォルトの名無しさん2008/02/19(火) 03:06:22
>>491
プリミティブ型はあくまでプリミティブ型で、そのクラスといったものはない。
あるのは、プリミティブ型を表すClassクラスのインスタンスで、各ラッパークラスで定義されている。
例えば、リフレクションAPIでメソッドの引数の型を指定する時などに使ったりする。
0497デフォルトの名無しさん2008/02/19(火) 03:18:57
初心者用スレとはいえ質が低過ぎる
答える気すら起きん
0498デフォルトの名無しさん2008/02/19(火) 08:17:12
画像ファイルを手動で振り分ける簡単なソフトを書いた。
表示して、設定してあるフォルダに振り分けるだけの簡単なソフトだ。
とりあえず、予定の作業は出来るようになった。

だが、アニメーションGIFの再生がおかしいことに気づいた。
「透過色」というのが上手く扱えていないようだ。

Toolkit.getDefaultToolkit().getImage("hoge.gif");で入手したImageを
JPanelから導出したクラスのpaint(Graphics g)でdrawImageにかけているだけなのだが、
何か足りないようだ。

足りない部分は簡単に補える?
それとも、意外に面倒?
0499デフォルトの名無しさん2008/02/19(火) 08:29:49
ペイントコンポーネンツ
0500デフォルトの名無しさん2008/02/19(火) 12:26:35
JSFの使い方を教えてください
0501デフォルトの名無しさん2008/02/19(火) 13:44:08
>>500
http://ja.wikipedia.org/wiki/F-35_(%E6%88%A6%E9%97%98%E6%A9%9F)
0502デフォルトの名無しさん2008/02/19(火) 15:50:00
すみませんが、質問です。

クラス継承についてですが、親クラス、子クラスに共通して、同名のパブリッ
クなインスタンス変数があり、その初期値は親と子で違うとします。

子クラスのインスタンスを作り、それを親クラスの型の変数に代入した場合、
その変数のインスタンス変数には、親の価が入っています。

public class Parent {
public String hoge = "親";
}

public class Child extends Parent {
public String hoge = "子";
}

Parent x = new Child();
System.out.println(x.hoge); // => 親
System.out.println((new Child()).hoge); // => 子

要するに、パブリックなインスタンス変数は、子によってオーバライドできな
いのです。メソッドと違って。

どうしてこれは、こういう言語仕様になっているのでしょうか?
メソッドのようにオーバライドできてもいいと私は思うのですが。
0503デフォルトの名無しさん2008/02/19(火) 16:18:57
どうしてだろう・・・

Parent[] xArray = { new Child01(), new Child02(), new Child03()}
for( Parent x : xArray ) System.out.println(x.hoge);

みたいに同じ変数名にアクセスして子独自の値が取れたら便利そうだよね。
0504デフォルトの名無しさん2008/02/19(火) 16:21:48
実装は面倒だし(というか汚くなる)、効率の問題もある。
何より、変数をそんなに便利(に見える)にしてしまったら、
マルチスレッドとか大変になる。
オブジェクト指向の原則も何もあったもんじゃなくなるだろうが。
0505デフォルトの名無しさん2008/02/19(火) 16:24:14
>>502
子の方に新しいhogeを定義しなきゃいいんじゃ?

public class Parent {
public String hoge = "親";
}
public class Child extends Parent {
public Child(){ hoge ="子"; }
}
Parent x = new Child();
System.out.println(x.hoge); // => 子
0506デフォルトの名無しさん2008/02/19(火) 16:24:37
フィールドの隠蔽は普通に出来てるんだから面倒も効率も関係ないだろ。
0507デフォルトの名無しさん2008/02/19(火) 16:25:24
Javaはフィールドは静的解決だからだろ

以上
0508デフォルトの名無しさん2008/02/19(火) 16:28:02
>>502
言語規定には、「フィールドアクセスのために動的に表検索する必要がないので
Javaは素直な実装でも効率が良い。遅延束縛と上書きはインスタンスメソッドが
使用されるときだけJavaで利用可能となる。」とある。
ttp://www.y-adagio.com/public/standards/tr_javalang/15.doc.htm#37055
0509デフォルトの名無しさん2008/02/19(火) 16:29:50
付いていけん
馬鹿にも分かるように誰か説明してくれよ
0510デフォルトの名無しさん2008/02/19(火) 16:31:04
フィールドは静的に(つまりコンパイル時に)解決できるから効率いいよね、ってこと。
>>506は何か勘違いしているから無視してOK
0511デフォルトの名無しさん2008/02/19(火) 16:32:28
スレッドとか関係ねーじゃん。
0512デフォルトの名無しさん2008/02/19(火) 16:34:33
フィールドアクセスにはsynchronizedで制限かけられないだろーが
0513デフォルトの名無しさん2008/02/19(火) 16:36:19
つまり静的解決にすれば効率いいけど柔軟性に欠ける
動的にすれば柔軟性は上がるが実行時の効率が落ちる
そこでバランス取ってメソッドだけ動的にしたってこと?
0514デフォルトの名無しさん2008/02/19(火) 16:37:23
フィールドを動的解決するとどんないいことがあるのか例を教えてくれ
0515デフォルトの名無しさん2008/02/19(火) 16:38:39
まともな人と、ちょっと鈍い人と、どうしようもない馬鹿がいるっぽい
0516デフォルトの名無しさん2008/02/19(火) 16:38:57
>>514
答:全部メソッドでできるので不要
0517デフォルトの名無しさん2008/02/19(火) 16:40:31
何か主張があるようだが強烈な表現力のなさで何を言いたいのかさっぱりわからん。
「フィールドアクセス」 は行為であって主体じゃないから synchronized でモニタ取れるわけないだろ。
this かそれに順ずるインスタンスに synchronized かけろよ。
0518デフォルトの名無しさん2008/02/19(火) 16:44:34
Hoge hoge = new Piyo();
synchronized (hoge) {
hoge.x = "";
}
いちいちクライアントサイドでこんなことしたく無いだろ?ってことが言いたかったんだが
0519デフォルトの名無しさん2008/02/19(火) 16:47:53
>>518
それ hoge.x が Piyo のフィールドかスーパークラスのフィールドかは全く関係なくね? って事。
synchronized(hoge.x) とした時にどっちのモニター取ってるか分からなくなるというならともかく。
0520デフォルトの名無しさん2008/02/19(火) 16:50:39
>>514
悪いことの方は、以下の場合コンパイルエラーを出さないといけなくなる。

class S { int x = 0; int z() { return x; } }
class T extends S { String x = "1"; }
0521デフォルトの名無しさん2008/02/19(火) 16:52:26
それは関係ないけど、フィールドアクセスが動的だと、
何も考えずに使ってしまうようなやつが絶対いるだろ?
で、518のように書くやつなんているのか、と考えたときに、
いないだろうな、と。
0522デフォルトの名無しさん2008/02/19(火) 16:58:11
フィールドがサブクラスから書き換えられないのって
単純に、フィールドはなるべく隠蔽されるべきって考え方からだと思ってたけど違うの?
0523デフォルトの名無しさん2008/02/19(火) 17:00:49
書き換えられるよ、finalとかprivateじゃなければ
0524デフォルトの名無しさん2008/02/19(火) 17:02:02
書き換えってオーバーライドのことね
0525デフォルトの名無しさん2008/02/19(火) 17:04:11
親のフィールドをそのまま継承してるだけと、オーバーライドするのと、どう違うのか説明すれ
0526デフォルトの名無しさん2008/02/19(火) 17:10:17
>>522
それは新しい話題? カプセル化の話?

上書き(override, オーバーライド)は動的処理。
仮にフィールドの動的処理が可能なら、カプセル化は簡単に崩壊する。
// メソッドを上書きせずに、フィールドだけ上書きすればよい。
0527デフォルトの名無しさん2008/02/19(火) 17:13:37
privateメソッドがオーバーライドできないのと同じように、
privateフィールドもオーバーライドできなければ、別にカプセル化は壊れない
オーバーライドしたいのはprotectedとかpublicだけだろ?
隠蔽だかカプセル化だかとは別問題かと
0528デフォルトの名無しさん2008/02/19(火) 17:24:14
誰が正しいことを言ってるのかカオスだわ。と言いつつ私は526だったり。
言語規定を貼る作業に戻りますm(_ _)m
0529デフォルトの名無しさん2008/02/19(火) 17:32:47
さっぱりわからん
誰かねんどろいどに例えてくれ
0530デフォルトの名無しさん2008/02/19(火) 17:34:36
状況が逆なら逆で適当に自分流の解釈始めるだけだから、
決めの問題的な話題なんてどうでも良いんじゃないのか。
05315022008/02/19(火) 18:38:57
どうやら収束したようなので、お礼を言わせていただきます。皆さん、ありが
とうございました。

意外に思うかもしれませんが、自分は最初の質問以外、一件も書き込んでいま
せん。自分の分からない点は全部、他の人がツッコんでくれました。このスレ
は時々利用させていただいてますが、こんなのは初めてです。

レスの全部が理解できたとは言えませんが、大変勉強になりました。
0532デフォルトの名無しさん2008/02/19(火) 19:06:45
>>486
Javaによるアルゴリズム事典
おすすめ
0533デフォルトの名無しさん2008/02/19(火) 21:35:53
開発ではeclipse使ってるんですが、
わざわざeclipse立ち上げるまでもないちょっとしたファイルを作ったり編集したりするためのエディタが欲しいです。
具体的には、html、java、jsp、ビルドxml、単なるテキスト文…こういったファイルを編集します。
メモ帳ではあまりにも使いづらいので他を探してるのですがオススメのものは無いでしょうか
0534デフォルトの名無しさん2008/02/19(火) 21:53:56
豊丸
0535デフォルトの名無しさん2008/02/19(火) 22:00:01
サクラエディタ
0536デフォルトの名無しさん2008/02/19(火) 22:14:30
>>533
eclipseを立ち上げっぱなしにしておけばいいのでは?
0537デフォルトの名無しさん2008/02/19(火) 22:14:58
vim だな。
0538デフォルトの名無しさん2008/02/19(火) 22:33:13
Mule。
馴れれば結構使える(と思う)けど馴れるまでが大変(だろうな)
0539デフォルトの名無しさん2008/02/19(火) 22:34:12
eclipseのエディタ機能だけ使うことが出来る?
わざわざプロジェクトとか作らないで
0540デフォルトの名無しさん2008/02/19(火) 22:38:44
>>538
× Mule
○ Meadow
0541デフォルトの名無しさん2008/02/19(火) 22:40:44
viとかvimって極度に嫌ってる人がいるよね
史上最悪のエディタだとか
0542デフォルトの名無しさん2008/02/19(火) 22:42:03
んなこと言ってる時点で Sun の Java 使う資格はない。
0543デフォルトの名無しさん2008/02/19(火) 22:42:55
史上最悪のコードというのなら分かるが
エディタとしては中毒性が高い。
0544デフォルトの名無しさん2008/02/19(火) 23:08:38
viとvimって何が違うの?
0545デフォルトの名無しさん2008/02/19(火) 23:13:26
機能差が歴然。
0546デフォルトの名無しさん2008/02/19(火) 23:22:55
eclipseの補完機能が優秀過ぎるから他のどのエディタ使っても物足りなく感じる
0547デフォルトの名無しさん2008/02/19(火) 23:29:55
お尋ねします。
SortedSetを使い、ソートさせ、表示にはtoStingを使っているのですが、"[""]"の表示が出てしまいます。このカッコを表示させない方法はありますか?
もしくは、違った方法でソートの結果を出力させられるのでしょうか?
教えていただける方、よろしくお願いします。
0548デフォルトの名無しさん2008/02/19(火) 23:32:43
set.toString().substring(1, set.toString().length() - 1)
0549デフォルトの名無しさん2008/02/19(火) 23:44:12
>>548さん、早速ありがとうございます。
最後にもう1つだけ質問ですが、2つの結果を出す際に、1つ目の結果と2つ目の結果の間の","を消す方法はあるのでしょうか?
たびたび申し訳ありませんがよろしくお願いします。
0550デフォルトの名無しさん2008/02/19(火) 23:45:14
set.toString().substring(1, set.toString().length() - 1).replaceFirst(",", "")
0551デフォルトの名無しさん2008/02/20(水) 01:52:59
>>539
Remote System Explorerプラグイン入れれば、ローカルや、Telnet、FTP、SSH経由で
ファイルシステムにアクセスできる。

>>547
toStringはデバッグ出力などで使うものであって、
特定の書式にしたいのなら、自力で出力すべき。
05525392008/02/20(水) 12:32:29
>>551
ありがとうございます!まさに探してた機能でした。
0553デフォルトの名無しさん2008/02/20(水) 13:12:04
tomcatの起動について質問です。
現在linuxにtomcatを入れて開発を行っているのですが自動起動に失敗してしまいます。OS起動後に直接起動スクリプトを実行すると正常に起動します。

環境とバージョン
CentOS5.1 32bit/jdk6/tomcat6
ログには以下のような出力があります。
文字制限に引っかかるため一部省略します。
--
2008/02/20 11:47:00 org.apache.catalina.connector.Connector pause
致命的: プロトコルハンドラの一時停止に失敗しました
java.net.SocketException: Network is unreachable
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:209)
at org.apache.jk.common.ChannelSocket.unLockSocket(ChannelSocket.java:486)
at org.apache.jk.common.ChannelSocket.pause(ChannelSocket.java:283)
at org.apache.jk.server.JkMain.pause(JkMain.java:681)
at org.apache.jk.server.JkCoyoteHandler.pause(JkCoyoteHandler.java:153)
2008/02/20 11:47:01 org.apache.catalina.core.StandardService stop
情報: サービス Catalina を停止します
以下試したこと。
・自動起動を一番最後に持って行った(rc3.d/S99tomcat)
・F/Wの自動起動を停止
どなたか解決策をご存じの方がいたら教えてください。
0554デフォルトの名無しさん2008/02/20(水) 13:14:38
eth0 起動してんのかよ。
0555デフォルトの名無しさん2008/02/20(水) 13:31:36
>>554
eth0にグローバル、eth1にローカルを設定しています。

また、iptablesにてグローバルは25番のみIN/OUTを許可、ローカルは全て許可に設定しています。
iptablesの自動起動も止めてみたのですが、解決しませんでした。
0556デフォルトの名無しさん2008/02/20(水) 19:00:05
アプレットに関する質問です。
アプレットを使って画像を表示させたいのですが、
アプレットビューアを起動するコマンドを打つと上手く表示されるのですが
html形式のファイルを直接開くと画像が切れて表示されてしまいます。
htmlファイルを直接開いたときに画像が切れないように表示させるには
どうすればいいでしょうか?
よろしくお願いします。
05575532008/02/20(水) 19:11:40
自己解決しました。
環境変数がちゃんと読めていなかったようです。
0558デフォルトの名無しさん2008/02/20(水) 20:17:04
マイナスをプラスに反転させたいのですがどのように書けばいいのでしょう?
例えば-5を5にしたいです。
どなたかおたすけを・・・
0559デフォルトの名無しさん2008/02/20(水) 20:18:13
x = -x;
0560デフォルトの名無しさん2008/02/20(水) 21:17:13
Javaマルチスレッドで明示的にLockを書ける方法ってあります?

lock();
func();
unlock();

みたいな
0561デフォルトの名無しさん2008/02/20(水) 21:44:07
どうとでも書ける
0562デフォルトの名無しさん2008/02/20(水) 21:45:15
とりあえず計数セマフォ
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/Semaphore.html
0563デフォルトの名無しさん2008/02/20(水) 21:49:58
>>592
それだ。サンクス
0564デフォルトの名無しさん2008/02/20(水) 22:17:07
>>324
Tが一つのクラスだけだったらスーパークラスは一つだけですよ。

スーパーインターフェースなら妥当でしょうか
0565デフォルトの名無しさん2008/02/20(水) 22:42:05
>>564
superclassとdirect superclassの違いも知らないのか?
0566デフォルトの名無しさん2008/02/20(水) 22:43:08
direct superclass と言いたいだけとちがうか。
05675562008/02/20(水) 23:10:18
もう一度質問してもいいでしょうか(質問文が悪かった??)
アプレットを作るにはxxx.javaとxxx.htmlという2つのファイルを作りますよね
xxx.javaをコンパイルしてxxx.htmlというファイルに対してAppletviewerの
コマンドを実行してやるとその際に表示されるアプレットは画像が切れずに
キレイに表示されるのですが、xxx.htmlというファイルをクリックして
直接表示しようとすると画像が切れてしまいます。
画像が切れないように表示するためにはどうすればいいのでしょうか?
よろしくお願いします。
0568デフォルトの名無しさん2008/02/20(水) 23:13:13
ソース
0569デフォルトの名無しさん2008/02/20(水) 23:13:40
xxx.htmlでアプレット用に指定している幅と高さが画像を表示するには小さかったってオチ?
0570デフォルトの名無しさん2008/02/21(木) 00:19:41
if(1<=x<=18 & y==0){〜処理
↑見たいな感じで"<="を使いたいんですけどどうしたらいいですか?
0571デフォルトの名無しさん2008/02/21(木) 00:32:13
1 <= x && x <= 18
0572デフォルトの名無しさん2008/02/21(木) 00:32:32
日本語にすると
xは1〜18のいずれかで、かつ
yは0
ってこと?

if( (x >= 1 && x <= 18) && y==0 )
0573デフォルトの名無しさん2008/02/21(木) 01:36:17
>>569
ああ画像が切れるってそういう意味なのか。
0574デフォルトの名無しさん2008/02/21(木) 10:26:40
質問です。

HashMap<Integer,String>[] map = new HashMap<Integer,String>[3];
という配列を作ろうとしたときに、コンパイルしようとしたら

汎用配列を作成します。

というエラーが出てしまいます。調べてみてもさっぱり理解できません。
よろしければご教授お願いします。
0575デフォルトの名無しさん2008/02/21(木) 10:39:29
>>574
ジェネリクスはコンパイル時のチェック機能。
コンパイルした後は HashMap という型情報しか存在しない。
よって、その型の配列が作成される。
0576デフォルトの名無しさん2008/02/21(木) 11:48:49
つ ArrayList<HasMap<Integer, String>>
0577デフォルトの名無しさん2008/02/21(木) 15:47:43
tomcat5のJDBCレルム機構に対して、サーブレット内からプログラマが任意のタイミングでユーザ認証を済ませる方法を探しています。
contextA/auth/AuthServlet
contextA/noauth/NoAuthServlet
web.xmlで/auth/*を認証ゾーンとして指定。
NoAuthServlet内から、プログラマーが自前でユーザIDとパスワードを使って/auth/*ゾーンの認証を済ませたいのですが
どうすればできるでしょうか?
認証を済ませる=HttpServletRequest#getUserPrincipal() != nullという意味です。
■ このスレッドは過去ログ倉庫に格納されています