トップページ⇒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あたりで。
0002デフォルトの名無しさん2008/02/08(金) 19:49:30
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java標準低速GUI 6 AWT/Swing
ttp://pc11.2ch.net/test/read.cgi/tech/1190807478/l50
■ SWT は --
Java 高速GUI SWT 3
ttp://pc11.2ch.net/test/read.cgi/tech/1164877399/l50

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part16
ttp://pc11.2ch.net/test/read.cgi/tech/1198816379/l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 7
ttp://pc11.2ch.net/test/read.cgi/tech/1180010672/l50

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 64 ★★
ttp://pc11.2ch.net/test/read.cgi/tech/1196543694/l50
0003デフォルトの名無しさん2008/02/08(金) 20:57:15
ダウンロードできてインターネットに繋がって無くても読める
javaの入門書のようなものありませんか?
0004デフォルトの名無しさん2008/02/08(金) 21:14:42
テンプレのリンクを探せばどこかにあると思ったよ。
動画で見るJava入門、みたいなのを。
どこかの大学のサイト
0005デフォルトの名無しさん2008/02/08(金) 22:58:31
■ J2SE 1.4.0
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/index.html
■ J2SE 5.0 (1.5.0)
ttp://java.sun.com/j2se/1.5.0/ja/
■ Java SE 6
ttp://java.sun.com/javase/ja/6/
0006デフォルトの名無しさん2008/02/08(金) 23:30:09
staticって何ですか?
クラスをオブジェクトするときに使いやすいだけ?
0007デフォルトの名無しさん2008/02/09(土) 00:11:24
>>6
newしなくても呼び出せるメソッドみたいな感じ?
0008デフォルトの名無しさん2008/02/09(土) 00:11:56
>>1 乙
0009デフォルトの名無しさん2008/02/09(土) 00:29:00
charAt()でバイナリ取得はできました。
以下の2つは分かりませんでした。
System.out.println(String.codePointAt((int)s.charAt(0)));
System.out.println(s.getBytes(s.charAt(0)));
0010デフォルトの名無しさん2008/02/09(土) 00:37:52
codePointAtは1.5系みたいなのであきらめました。
0011デフォルトの名無しさん2008/02/09(土) 00:51:44
JDKをインストールしたいのですが、ダウンロードするページで

Windows x64 executable
jdk-6u4-windows-x64.exe 38.88 MB

Windows Online Installation
jdk-6u4-windows-i586-p-iftw.exe 0.36 MB

Windows Offline Installation
jdk-6u4-windows-i586-p.exe 71.28 MB

のように3つ選択肢があるんですが何が違うのでしょうか?
2番目はインストーラーをダウンロードせずにネットから直接インストール?
3番目はインストーラーをダウンロード?ってことですかね
1番上は何でしょうか…
0012デフォルトの名無しさん2008/02/09(土) 00:51:50
getBytes("ASCII")ですか。そのままでしたね。
0013デフォルトの名無しさん2008/02/09(土) 01:22:25
javaで自分のパソコンのグローバルIPとホスト名って取得できますか?
またどのような関数を使えばいいのかわかりません><

ググってみるとjava以外ではいろいろ書いてあるのに、javaになるとヒットしないので。。
よろしくおねがいします!
0014デフォルトの名無しさん2008/02/09(土) 01:26:36
InetAddress.getAllByName(InetAddress.getLocalHost()); とか何とか
0015デフォルトの名無しさん2008/02/09(土) 01:27:35
やっべー、
InetAddress.getLocalHost().getAllByName()
0016デフォルトの名無しさん2008/02/09(土) 01:38:46
>>15
ありがとうございます!!
無事できましたー!
0017デフォルトの名無しさん2008/02/09(土) 08:30:29
昨日は勝手にjavaのアップデートが勝手にダウンロードされました
調べてもプログラミング言語がウンヌンで、javaとは何なのか必要なのかわかりません
PCでインターネットや、画像や動画視聴しかしない僕には必要なのかどうか教えてください

0018デフォルトの名無しさん2008/02/09(土) 10:29:36
>>17
気にしないでおk
0019デフォルトの名無しさん2008/02/09(土) 10:33:36
>>11
1番上のは64ビットWindows用
2番目と3番目は32ビットWindows用
オンラインインストールはインストーラの皮だけ、実際にインストール開始したときに必要な中身を都度ダウンロードしてくる
オフラインインストールは中身全部込みのインストーラ、インストール時にネット接続不要
どっちでも好きなほうをどうぞ
0020172008/02/09(土) 12:31:56
>>18
わかりました ありがとう
削除します
0021デフォルトの名無しさん2008/02/09(土) 14:03:12
質問です。参考書などでは【2つほど】変数の型(intやchar)などとは別に
stringの解説がされています

認識として両方変数の型でchar=1文字変数 string=文字列と理解しているんですが、理解が間違っているんでしょうか?
0022デフォルトの名無しさん2008/02/09(土) 14:08:02
stringは無いがStringなら有る
大文字小文字の区別は重要
charは1文字、Stringは文字列、ってのは合ってる
0023デフォルトの名無しさん2008/02/09(土) 14:18:06
文字変数でなく、文字な。
Stringは文字列。

String str = "a";
char c = 'a';
人間にとっては同じだけど、プログラム上は違うので注意。
0024デフォルトの名無しさん2008/02/09(土) 14:30:17
>>22>>23
ありがとう、つまり同じような認識で使ってもいいわけですね。

もう一つ聞きたいのですが
class a1{
   public static void main(String args[]){
     if(args.length>=1) 〜以下命令文
〜以下略

上のプログラムのargs.length ここの部分がいまいちよくわからないのですが、
argsはただの配列なのにクラス名の部分に書かれています。

length関数が特殊なんでしょうか?それともargsがクラス名?
お願いします
0025デフォルトの名無しさん2008/02/09(土) 14:46:49
>>24
入門書1冊やってからこい
0026デフォルトの名無しさん2008/02/09(土) 14:56:38
>>24
lengthは配列オブジェクトのフィールド
argsオブジェクトのlengthフィールドが1以上かどうかを判定している
ってかクラス名の部分ってなんだよ
0027デフォルトの名無しさん2008/02/09(土) 15:01:32
>>24
この場合、args は配列型の変数で、length は、配列型の public final なフィールド。
0028デフォルトの名無しさん2008/02/09(土) 15:22:22
激しくすれ違いだが 「バカでも使えるように」 を仕様書で伝えるときどう表現してる?
0029デフォルトの名無しさん2008/02/09(土) 15:23:47
フールプルーフ
0030デフォルトの名無しさん2008/02/09(土) 15:25:27
>>26>>27
ありがとう
インスタンス化したメソッド.メソッド名();
の形式だと理解していた。
よくわからないから読み返してきます。
0031デフォルトの名無しさん2008/02/09(土) 15:26:30
フューエルセーフか?ちとちがうかw
前のユーザーはバカよけいれといてねとか言ってたけどw
0032デフォルトの名無しさん2008/02/09(土) 15:30:43
Stringは文字列の変数と考えていいんですよね
変数名.メソッド;
でも問題ないんですか?
0033デフォルトの名無しさん2008/02/09(土) 15:31:22
スレ移ります
すみませんでした
0034デフォルトの名無しさん2008/02/09(土) 15:34:09
>>32
問題って何がだ
何がわからんのかわからん
0035デフォルトの名無しさん2008/02/09(土) 15:35:05
>>32
ここは初心者スレだが、初心者に一から言語仕様を教えるスレじゃねーんだよ
この本一冊読んでから来い
http://www.amazon.co.jp/dp/4798107972/
0036デフォルトの名無しさん2008/02/09(土) 15:38:13
>>31
安全そうな燃料ですね。
0037デフォルトの名無しさん2008/02/09(土) 15:54:12
>>34
>>35
?
0038デフォルトの名無しさん2008/02/09(土) 16:15:32
スレのレベルが低下してる
住人も然り
プログラマって10聞いて1しか返ってこないやついるから困る
出世できないのもよくわかるよな
0039デフォルトの名無しさん2008/02/09(土) 16:17:55
まるで昔はレベルが高かったような言い草だが。
0040デフォルトの名無しさん2008/02/09(土) 16:23:36
1聞いて10理解すれば問題なし
0041デフォルトの名無しさん2008/02/09(土) 16:32:22
理系の人間はみんなそうだ
特にプログラマは酷いなwww
何年もがんばった自分の知識を基準にして話し出す
文系の女の子が可哀相だ
0042デフォルトの名無しさん2008/02/09(土) 16:34:38
スイーツ板?でどうぞw
0043デフォルトの名無しさん2008/02/09(土) 16:36:14
女の子なら何時間でもかけて親切丁寧に教えてあげるよ!
野郎どもは死ぬ気でがんばれ
0044デフォルトの名無しさん2008/02/09(土) 17:04:33
普段、コンストラクタの引数が要らない場合はコンストラクタを省略してフィールド宣言時に初期化してるのですが、
フィードル初期化は宣言時にするのとコンストラクタ内でするのとでは、タイミングなどの違いがあるそうですが
どんな感じで使い分けるものなんでしょうか?
0045デフォルトの名無しさん2008/02/09(土) 17:09:45
タイミング違ったっけ? フィールド宣言時に初期化するコードを逆コンパイルしてみ。
スーパークラスのコンストラクタが終了した後に初期化するのと変わらない。
0046デフォルトの名無しさん2008/02/09(土) 17:10:12
一緒
フィールドの初期化のコードはバイトコードレベルで見るとコンストラクタの中に入っている
見た目とか気分の問題
0047442008/02/09(土) 17:19:47
一緒ですか!ならば宣言時にやるほうが簡潔ですね。
どうもありがとうございました。
0048デフォルトの名無しさん2008/02/09(土) 18:26:15
private static *** instance = new ***();
public static *** getInstance(){return instance;}
private $$$ data;

public ***(){data = $$$.getInstance()}
public $$$ get$$$(){return data;}

$$$も同様にシングルトン

と言う感じで、シングルトンのフィールドにコンストラクタで
シングルトンを植え付ける連鎖を何回か行うと
get$$$()でnullが返ることがあります。何故なんでしょうか?
クラスが参照されると同時にinstanceにインスタンスが入るはずなのに…

public get$$$(){return $$$.getInstance();}
だとそう言う事は起こりません
0049482008/02/09(土) 18:27:16
済みません間違えました。
コンストラクタはprivateです
private ***(){data = $$$.getInstance()}
0050デフォルトの名無しさん2008/02/09(土) 18:33:14
質問です
UMLより機能的なツールなんか使ってますか
参考までにお願いします
0051デフォルトの名無しさん2008/02/09(土) 19:26:44
一番自由度が高くて表現力のあるツールは
紙とペンかな・・・・
自由度が高いので使い手の能力に左右されがちだがな。
0052デフォルトの名無しさん2008/02/09(土) 19:27:12
連想配列で、キーと値を交互に配列に入れる簡単な方法はありますか?
ソースのa,b,c,d,e,f(文字列)からAという配列を作りたいです。
A[a] == b
A[c] == d
A[E] == f
0053デフォルトの名無しさん2008/02/09(土) 19:32:06
HashMap でも使え
0054デフォルトの名無しさん2008/02/09(土) 19:56:27
main関数の実行時に与える引数についてですが、
1種類のString配列では表せない情報を与えたい時はどうすればいいのでしょうか?
例えば、複数の文字列とオプションを実行時に指定させたい場合、
プログラム側では文字列とオプションの区別が付けられません。
0055デフォルトの名無しさん2008/02/09(土) 20:07:39
>>54
順番で区別するとか、
先頭に '-' や '@' や '/' がついてたらオプションとか、
文字列は "文字列" みたいに引用符で括るとか、
やり方はいろいろある。好きな方法を使え。
0056デフォルトの名無しさん2008/02/09(土) 20:17:55
その引用符の使い方だとシェルに取り払われるような。
0057デフォルトの名無しさん2008/02/09(土) 20:24:07
javac ?で参考になるべ
argsをパースするのは自力で作る
0058デフォルトの名無しさん2008/02/09(土) 20:25:24
HashMap の方は同期がとられず、というのは簡単に言うとどういう意味ですか?
HashMap はJDK1.2に対応していますか?
0059デフォルトの名無しさん2008/02/09(土) 22:01:26
>>58
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/HashMap.html
> 導入されたバージョン:
> 1.2

同期云々の話も上のリンク先の記述からだと思うのだが、文章そのまま。
逆に、Hashtable の方は同期がとられて、null の場合はない。
> HashMap クラスは Hashtable と同じと見なしてもかまいませんが、
> HashMap の方は同期がとられず、null の場合もあります。

何故同期が取られないのか、については、設計上の方針。
Collections.synchronizedMap(Map) を使う。
更に、iteratorを使う場合には、更に同期処理が必要。詳しくは API 仕様に。
0060デフォルトの名無しさん2008/02/09(土) 22:20:53
>>58
HashMap が同期(synchronized)されない、というのは、簡単に言うと、
複数のスレッドから同時にアクセスすると壊れるよ、という意味です
0061デフォルトの名無しさん2008/02/09(土) 22:30:36
>>51
ありがとう
でも一挙動でコーディングできれば最適なんですがねえ
0062デフォルトの名無しさん2008/02/09(土) 22:32:42
>>48
なんだろうねぇ。
とりあえず、遅延初期化をする必要が無ければ、instance を
public static final *** INSTANCE にするのはどうだろう。
0063デフォルトの名無しさん2008/02/09(土) 22:32:55
Java SE Development Kit 6 Update 3をとろうと思うのですが無料なんですか?
0064デフォルトの名無しさん2008/02/09(土) 22:36:06
>>50
UML は確かに機能的な面も強調される表記法でもあると思うが、
そもそもの目的は、数ある表記法を名の通り"統一"したものだしなぁ
0065デフォルトの名無しさん2008/02/09(土) 22:40:12
>>59,>>60 ありがとう、いい配列です。
0066デフォルトの名無しさん2008/02/09(土) 23:15:05
>>62
ありがとうございます。やってみましたがダメでした
うまくいかないソースを削ってサンプルを作ってみました

class A {
final static A INS = new A();
private B b;
private A(){b = B.INS;}
B getB(){return b;}
public static void main(String[] args) {
System.out.println(A.INS.getB().getC().getA().toString());
}
}

class B {
final static B INS = new B();
private C c;
private B(){c = C.INS;}
C getC(){return c;}
}

class C {
final static C INS = new C();
private A a;
private C(){a = A.INS;}
A getA(){return a;}
}
0067デフォルトの名無しさん2008/02/09(土) 23:16:15
字数の関係でAに便宜的にmainを載せましたが
class D {
public static void main(String[] args) {
System.out.println(A.INS.getB().getC().getA().toString());
}
}
としてもやはりjava.lang.NullPointerExceptionでした
0068デフォルトの名無しさん2008/02/09(土) 23:21:02
>>66
そりゃ無理だ
new A();
をやってる途中にB.INSが必要で、
B.INS = new B();
には C.INS が必要で、
C.INS = new C();
の中では A.INS が必要だがまだ new A() やってる途中なので A.INS は代入されてないから null
0069デフォルトの名無しさん2008/02/09(土) 23:40:00
>>66
単に循環参照
コレだけみると設計再検討だが、なんか理由があるとして…

ま、getAやらの部分で、a を遅延初期化すれば問題ない。
if (a == null) { a = A.INS; } return a;

仮にマルチスレッドでまわしても、A.INS は確定した後で、常に一つだから
null チェックで二度三度上書きしたところで得られる値は変わりはしない。
0070デフォルトの名無しさん2008/02/09(土) 23:42:19
>>68
なるほどエラーが発生する原因は分かりました
>>69
ありがとうございます

staticフィールドにインスタンスを作るシングルトンという事で気軽に使いすぎてました。反省
0071デフォルトの名無しさん2008/02/09(土) 23:45:35
先生!Stringがfinalであるヌリットを教えてください!!
StringBuffer使えってのはなしで。
0072デフォルトの名無しさん2008/02/09(土) 23:47:50
>>71
http://www.ibm.com/developerworks/jp/java/library/j-jtp02183/
0073デフォルトの名無しさん2008/02/09(土) 23:54:04
すいません、エロい人教えてください。。。

クラスは、インスタンス化によりオブジェクト(実体)となって
はじめて使用できると思うのですが、
main()を持つクラスは、コンパイルされた時点で
インスタンス化されるのでしょうか?
0074デフォルトの名無しさん2008/02/09(土) 23:56:02
>>73
staticメソッドとstaticフィールドはインスタンスではなくクラスに属するのでインスタンスがなくても使える
0075デフォルトの名無しさん2008/02/10(日) 00:19:54
>>48
コンストラクタ以外で data に値を設定するコードを書いてないのに発生するなら
コンストラクタが完了してない状態で呼んでんじゃねーのか。final 付けてないのに
その部分だけ出されてもどっかで設定してんじゃねーのとしか言えないが。
0076デフォルトの名無しさん2008/02/10(日) 01:16:43
>>74
早速のご回答ありがとうございます。
新しい考え方をゲットできました。
「インスタンスに属する」と「クラスに属する」
0077デフォルトの名無しさん2008/02/10(日) 01:43:33
Stringの中のスラッシュの数を計算するメソッドのサンプルをください。
s = "aa//a/aa"; から3を取得するものです。
0078デフォルトの名無しさん2008/02/10(日) 01:52:43
文字列を最初から調べていって"/"と一致した時にint変数をインクリメントすればいいだけじゃないの
0079デフォルトの名無しさん2008/02/10(日) 02:20:26
>>77
横着。先頭と尻尾に "/" を追加して確かめてください。
何にもマッチしないときは、長さ1の配列が返るので、負数にはならない、はず。
System.out.println(s.split("/", -1).length - 1);
// 一応、何が起きてるかを表示
System.out.println(java.util.Arrays.toString(s.split("/", -1)));
0080デフォルトの名無しさん2008/02/10(日) 02:52:07
String s = "123";
int i = (int)s;
数値にするにはどうしたらよいですか?
0081デフォルトの名無しさん2008/02/10(日) 02:54:37
>>80
int i = Integer.parseInt(s) でおk
0082デフォルトの名無しさん2008/02/10(日) 03:09:09
Javaでコールバック処理を行いたいんですが、どうするのが
一般的ですか?
0083デフォルトの名無しさん2008/02/10(日) 03:12:37
>>81 ありがとう
0084デフォルトの名無しさん2008/02/10(日) 03:53:37
ttp://blog.livedoor.jp/mikuriyahiroto/archives/50829394.html
のページにあるプログラムをEclipseで実行するとエラーが出てしまいます

ちなみにエラーの文章は
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:66)
at Logintest.main(Logintest.java:20)
とでて、
Logintest.java:20の内容は
HttpClient client = new HttpClient();
です。

java素人なので全然わかりません。。。よろしくおねがいします!
0085デフォルトの名無しさん2008/02/10(日) 03:54:45
JARをパスに追加しろ
0086デフォルトの名無しさん2008/02/10(日) 03:59:16
eclipse3.3で初めてJUnit(4)のテストコードを書いています。
このテストコードをマウスを使わずに
キーボードだけで素早く実行するにはどうしたらいいのでしょうか?
0087842008/02/10(日) 04:07:18
>>85
お返事ありがとうございます
外部jarの追加でしっかり追加したはずなんですが

できてなかったのですかね。。。
0088デフォルトの名無しさん2008/02/10(日) 04:46:10
>>87
OROが足りないんだろ。
追加しろ
0089デフォルトの名無しさん2008/02/10(日) 05:11:25
↑俺なんてかっこいいんだと思ってるwww
0090デフォルトの名無しさん2008/02/10(日) 06:37:26
>>88
oro追加してみましたけどインポートされた org.apache.oro は一度も使用されていません。と出てしまいます。
コンパイルエラーの文章も依然変わりません...('A`)ウムム
0091デフォルトの名無しさん2008/02/10(日) 08:33:24
Javaをググッてみました
初心者向けということなのでNetbeansをインストールしましたが
使い方がさっぱり分かりません。
最初は普通のエディタの方が良いでしょうか?
0092デフォルトの名無しさん2008/02/10(日) 10:49:56
>>84
commons.logging パッケージのクラスが見つからないというエラー。
ということで、そやつを取ってきてパスに入れれば…進展があるはず
0093デフォルトの名無しさん2008/02/10(日) 11:08:39
質問です。
JAVAから外部のアプリケーションに対して操作を行うにはどのようにすればよいでしょうか。
例えばWindows標準のメモ帳に対して文字列"abc"を入力する、といったものです。
よろしくお願いします。
0094デフォルトの名無しさん2008/02/10(日) 11:15:45
Robot
0095デフォルトの名無しさん2008/02/10(日) 11:18:27
あるいは SWT の非公開 API
0096デフォルトの名無しさん2008/02/10(日) 11:25:42
>>93
もっと上手い方法があるのかねぇ。

// 例外はうまく処理してちょ
Runtime.getRuntime().exec("notepad.exe");
Robot robot = new Robot();
Thread.sleep(2000);
robot.keyPress(KeyEvent.VK_A);
robot.keyPress(KeyEvent.VK_B);
robot.keyPress(KeyEvent.VK_C);
0097デフォルトの名無しさん2008/02/10(日) 11:28:11
>>94
!! こんなクラスあったんだ。しかも1.4から標準で。知らんかった……。
0098デフォルトの名無しさん2008/02/10(日) 11:30:51
Robotなんて名前がそのまんまなクラスがあるとは・・・。
私は始めたばかりですが、もっとリファとか読まないといけませんね。
ありがとうございました。
0099デフォルトの名無しさん2008/02/10(日) 13:28:12
>>82

コールバックされるオブジェクトの参照を、する方に渡す。
メソッドのアドレスを渡すような考え方はしない。
コールバックされるクラスがいろいろあるなら、
目的のメソッドを定義した interface を作って、
それらのクラス全員に implements させる。
0100デフォルトの名無しさん2008/02/10(日) 13:35:19
クラスは,C言語における構造体の配列みたいだと思ったのですが、
あっているでしょうか?
0101デフォルトの名無しさん2008/02/10(日) 13:37:44
たぶん間違い。
構造体のような使い方もできるがもっと色々できる。

PCはゲーム機の本体のようなものですか?のような質問。
■ このスレッドは過去ログ倉庫に格納されています