5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

★★Java質問・相談スレッド140★★

1 :デフォルトの名無しさん:2010/07/20(火) 17:30:09

プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

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

前スレッド
★★Java質問・相談スレッド138★★
http://pc12.2ch.net/test/read.cgi/tech/1272685619/

次スレは>>950あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/

2 :デフォルトの名無しさん:2010/07/20(火) 17:34:20
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 9
http://pc12.2ch.net/test/read.cgi/tech/1261232019/
■ SWT は --
Java 高速GUI SWT 3
http://pc12.2ch.net/test/read.cgi/tech/1164877399/

■ Java 3D APIは --
【徹底討論】Java3Dの可能性について考える
http://pc12.2ch.net/test/read.cgi/tech/1033703640/

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ)  Part21
http://pc12.2ch.net/test/read.cgi/tech/1276164970/
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 9
ttp://pc12.2ch.net/test/read.cgi/tech/1249357352/
■ Androidアプリの作成は --
【Google】Androidアプリ作成part5
http://pc12.2ch.net/test/read.cgi/tech/1279354196/

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 69 ★★
http://pc12.2ch.net/test/read.cgi/tech/1267796762/

3 :デフォルトの名無しさん:2010/07/20(火) 17:42:39
■ NetBeansに関する雑談は --
NetBeans Part6
http://pc12.2ch.net/test/read.cgi/tech/1273665879/
■ Eclipseに関する雑談は --
Eclipse統合M29【Java/C++/Ruby/Python/Perl】
※dat落ちしてるのでとりあえずここでどうぞ
統合開発環境Eclipseプラグイン開発QA
http://pc12.2ch.net/test/read.cgi/tech/1081517094/


**** 開発環境が必要の場合は ****
■ 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/

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
ttp://www.java.com/ja


4 :デフォルトの名無しさん:2010/07/21(水) 22:30:58
http://www.javadrive.jp/install/jdk/index5.html

このサイトを見ながら環境設定をしているのですが、JAVA_HOMEの設定をして
コマンドプロント上でset JAVA_HOMEを実行させても
環境変数 JAVA_HOMEが定義されていません と表示されてしまいます。

システム環境設定で JAVA_HOME=c\java\jdk 1.6.0_21

と入力し、スペル間違いは無いはずなのですが。。
どなたか解決方法わかる方いませんでしょうか?

5 :デフォルトの名無しさん:2010/07/21(水) 22:35:16
デフォのインストール場所そこじゃないよ。

6 :デフォルトの名無しさん:2010/07/21(水) 22:40:47
>>5
このサイト見ながらやってもダメですか?

7 :デフォルトの名無しさん:2010/07/21(水) 22:48:12
(JDKをインストールしたディレクトリに合わせて変更して下さい)。

8 :デフォルトの名無しさん:2010/07/21(水) 22:56:07
>>7
ちゃんとインストールしたディレクトリに変更してあります。
ちなみにF:\Java\jdk 1.6.0_21に保存したのでその場所を指定しました

9 :デフォルトの名無しさん:2010/07/21(水) 22:56:26
多分、環境変数の変更がコマンドプロンプト側で読み込まれていないだけかと思う。
説明するのめんどうだから端的に、いっぺんログインしなおして試してみるといい。

10 :デフォルトの名無しさん:2010/07/21(水) 23:02:19
>>9
ありがとうございます
一度再起動してみようと思います

11 :デフォルトの名無しさん:2010/07/21(水) 23:02:45
ところで気になる事として、"jdk 1.6.0_21"と空白入れてるな。
今回の問題の次に、"F:\Java\jdk" というファイルが見つかりません、とか出るだろうと予言。
こういう場合に jdk のコマンドを使う際には
> "%JAVA_HOME%\bin\javac.exe" test.java
とか "" で囲む必要があったと思う。老婆心。

12 :デフォルトの名無しさん:2010/07/21(水) 23:06:25
ああ、このサイトの方法はPATHに書いておくのか。
11 は不要。問題ない。

13 :デフォルトの名無しさん:2010/07/21(水) 23:12:10
解決しました。ありがとうございました
>>11さんもあらかじめ次のトラブルの予想をしてくれたようで・・・
ありがとうございます。問題なく解決できました。

最後にこんな初歩の初歩のような質問をして申し訳ありませんでした。
私もこのスレ住人のように質問に答える事が出来るくらいにJavaを理解していきたいと思います


14 :デフォルトの名無しさん:2010/07/22(木) 04:19:01
このスレ立つ度に良くなってってないか

15 :デフォルトの名無しさん:2010/07/22(木) 04:57:56
良くなってますか

16 :デフォルトの名無しさん:2010/07/22(木) 10:50:49
悪い方に良くなってるといいたいんですね

17 :デフォルトの名無しさん:2010/07/22(木) 11:51:14
>>16
もうちょっと日本語上達させてから書き込もうな

18 :デフォルトの名無しさん:2010/07/22(木) 13:13:44
javaで、オブジェトの中身(変数、メソッド)を表示させる方法ありますか?
または、ライブラリはありますか?
inspect, describeなどは無いようですが?

19 :デフォルトの名無しさん:2010/07/22(木) 13:28:18
>>18
java.lang.reflect

20 :デフォルトの名無しさん:2010/07/22(木) 14:16:01
>>17
自演お疲れ様です

21 :デフォルトの名無しさん:2010/07/22(木) 16:38:59
ネット上の解説では、reflectはクラスの中を調べるとき使う例が多いですが、
オブジェクト(インスタンス)の中身でもOKですか?

デバックでは「インスタンスの中が現在どうなってるか」って場面多いと思うんだけど、
そんなとき、インスタンスの状態調べるライブラリあってもよさそうだけど、無いですか。


22 :デフォルトの名無しさん:2010/07/22(木) 17:16:23
kill -SIGQUIT <JVMのプロセスID>

23 :デフォルトの名無しさん:2010/07/22(木) 21:55:33
>>21
自分でAPIドキュメント調べろ。19の好意に甘えるな。

24 :デフォルトの名無しさん:2010/07/22(木) 22:02:31
インスタンスの中がどうなってるか俺が見てやるよ

25 :デフォルトの名無しさん:2010/07/22(木) 22:14:54
jmap jhat

26 :デフォルトの名無しさん:2010/07/22(木) 23:12:10
質問です。
flash使いで最近javaでandroid開発を始めたものですが、
文字列で変数にアクセスする方法を調べています。

たとえば(以下as3.0コード)

var i0:int = 0;//int変数作成
trace( this[ "i" + "0" ] );//上記のi0変数にアクセスして0が出力できる

みたいな事をjavaでしたいです。
色々調べたんですが探し方が悪いのか
見つからないので方法があれば教えていただきたいです。

27 :デフォルトの名無しさん:2010/07/22(木) 23:39:34
>>26
クラスのフィールド変数ならリフレクション使えば出来る

Class clazz = Class.forName(クラス名);
Field f = clazz.getDeclaredField("i0");
f.setAccessible(true); // privateなら
int i = f.getInt(取り出したいクラスのインスタンス);

メソッド内の変数なら無理かと

28 :デフォルトの名無しさん:2010/07/22(木) 23:40:56
1.6.0_21のServer VMで下記のコードを実行すると、
毎回結果が違うんですけど、変な風に最適化が働いてループ打ち切られてる?

public static void main(String[] args) {
int a = 0;
int b = 0;
for (int i = 0; i < 0x7FFFFFFF; i++) {
a += i % 360;
b++;
}
System.out.println(a);
System.out.println(b);
}

29 :デフォルトの名無しさん:2010/07/22(木) 23:55:29
>>27
おおー、これです
早速調べたんですが、なるほど、APIで提供されている訳ですね
初めての・・・みたな本に書いてない訳だ
大変勉強になりました。ありがとうございます

30 :デフォルトの名無しさん:2010/07/23(金) 01:40:29
>>28
Eclipse3.5同梱のJRE環境に限った話では、見た感じ問題なさそう。

-1073756799
2147483647

-1073756799
2147483647

-1073756799
2147483647

-1073756799
2147483647

-1073756799
2147483647

java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode)
サーバは知らない。

31 :デフォルトの名無しさん:2010/07/23(金) 08:03:54
>>28
んなわけねーだろ、言語仕様で決まってるんだからさ
と思って実行してみたら、本当に動作がおかしいでやんのワロタ

32 :31:2010/07/23(金) 08:22:20
これでも十分おかしいな
バグデータベースに報告ある?

public static void main(String[] args) {
int a = 0;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
a = i;
}
System.out.println(a);
}


33 :デフォルトの名無しさん:2010/07/23(金) 11:16:38
ジエンオツ

34 :デフォルトの名無しさん:2010/07/23(金) 15:33:16
複数のクライアントと一つのサーバの間で、以下の機能をsocketプログラミングで作りたいと考えています。

クライアントがサーバにファイルをアップロードすると、
サーバは接続済みの全てのクライアントにそのファイルを流す。

これを実現するためのサーバ側のコードで悩んでいます。
まずアップロードされたファイルを受け取るためにソケットからinputStreamを取得しますが、
これを各ソケットのoutputStreamに流す時に、どのように実装すればいいのか分かりません。

一つのinputStreamをfor文で複数のoutputStreamに流そうとしても、最初のoutputStreamにしか流せないようです。
これはinputStreamが内部でどこまでデータを取り出したかを管理(?)してるからでしょうか。

他の案としては、一時的なファイルを作ってしまってそのファイルを複数のソケットが読めばできそうですが
どう考えても良いやり方とは思えません。

結局、巨大なbyte配列で一時的にデータを溜めるぐらいしか思いつきません。

何かよい方法は無いでしょうか。

35 :デフォルトの名無しさん:2010/07/23(金) 15:53:39
複数のクライアントが同時にファイルをUP状態でも全部メモリにおさめるつもり?

36 :34:2010/07/23(金) 16:07:30
>>35
返信ありがとうございます。

そこまで考えていませんでした。。
なるほど確かにメモリに溜めるのは無理がありますね。
ということは、ファイル化する方法は悪い方法ではないのでしょうか?
ファイル名管理したりなど少し手間がかかりそうですが。

37 :デフォルトの名無しさん:2010/07/23(金) 17:55:01
inputstreamから数キロバイトの配列に読み込んで、全部のoutputstreamへ送信
inputstreamから数キロバイトの配列に読み込んで、全部のoutputstreamへ送信
の繰り返しじゃいかんのん?

38 :デフォルトの名無しさん:2010/07/23(金) 18:05:08

ObjectAnalyzer

39 :デフォルトの名無しさん:2010/07/23(金) 18:18:42
>>34
恐ろしい
こんなコード書かれたらたまらんわ

40 :34:2010/07/23(金) 18:29:54
>>37
おおなるほど!これでいけそうです。

while (-1 != (n = inputStream.read(w))) {
outputStream.write(w, 0, size);
}
こんな感じのお決まりコードをコピペして使ってたから
出力部分はひと塊としか考えられていなかった。酷い頭の堅さだ。。
アドバイスありがとうございました。

41 :デフォルトの名無しさん:2010/07/23(金) 23:55:05
いえいえ

42 :デフォルトの名無しさん:2010/07/24(土) 13:13:07
こんにちは。

public class Parent {
  Child child;
}
public class Child {
  Parent parent;
}

こんなふうに相互に参照するとインスタンスを消しても、
参照が残ってしまってメモリリークするという噂を聞いたんですが、本当ですか?

43 :デフォルトの名無しさん:2010/07/24(土) 13:17:24
いいえ

44 :デフォルトの名無しさん:2010/07/24(土) 14:35:09
>>42
http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/ref/package-summary.html
の最後の到達可能性で言うならば、両インスタンス共に不可到達なだけなのでGCされる。

45 :42:2010/07/24(土) 14:37:12
どうもありがとうございます。
JavaのGCはそんなにアホではないですよね。

46 :44:2010/07/24(土) 14:38:24
あ、この項だけじゃ説明になってないな。スマン、なしなし。

47 :デフォルトの名無しさん:2010/07/24(土) 14:54:19
>>42
参考:Wikipedia ガベージコレクション
http://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3#.E5.AE.9F.E8.A3.85
Java
http://ja.wikipedia.org/wiki/Java#.E3.82.AC.E3.83.99.E3.83.BC.E3.82.B8.E3.82.B3.E3.83.AC.E3.82.AF.E3.82.B7.E3.83.A7.E3.83.B3
参照カウント
http://ja.wikipedia.org/wiki/%E5%8F%82%E7%85%A7%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88#.E7.9F.AD.E6.89.80


参照カウント方式だと、リークするようにも書けてしまいますが、
Javaで採用しているマーク・アンド・スイープ方式(を利用する世代別ガベージコレクション)
だと、あるオブジェクトAが別のオブジェクトBを参照していた場合でも、
A自体がどこからも参照されていなければBもGC対象になります。


48 :デフォルトの名無しさん:2010/07/24(土) 15:05:30
>>34
Streamってそんなもん。1回読んだらそれっきり。
BufferedStrem(BufferedInputStream)使えば一度読んだところにも戻れるよ。

まあ、
> 巨大なbyte配列で一時的にデータを溜める
と考え方は同じだけど。

49 :42:2010/07/24(土) 15:06:24
参照カウント0のものを解放する方法だとリークするけど、
JavaのGCは到達不可能なものを解放する方法なので大丈夫ということですね。
どうもありがとうございます。

50 :デフォルトの名無しさん:2010/07/24(土) 16:41:23
new ClassA() {
//code
}

こういうふうに書かれるものってなんですか?キーワードを教えて下さい

51 :デフォルトの名無しさん:2010/07/24(土) 18:12:30
>>50
匿名内部クラス(Anonymous Inner Class)でござる。

ttp://milkyway.merseine.nu/100java/Java/Java045.html

52 :デフォルトの名無しさん:2010/07/24(土) 20:36:15
Eclipseでbuild.xml右クリックするとant実行って出てくるけど
そういう、特定のファイル名に対して外部アプリケーションを関連付けるっていうのは
どこで設定してるの?
変更・追加可能?

53 :デフォルトの名無しさん:2010/07/24(土) 20:44:11
ライブラリ類の配布アーカイブの中にjavadocって大抵同梱されてるけど
これってeclipseから参照されたりするの?
各クラスの説明としてポップアップしたりとか

54 :デフォルトの名無しさん:2010/07/24(土) 21:04:04
>>52
設定の「一般」「コンテンツ・タイプ」のXMLのAntビルドファイルかと思う。

>>53
するする。jarのプロパティにある、ソースとjavadocを指定する項目。

55 :53:2010/07/24(土) 21:56:05
今eclipseにEXT_LIBS_DIRっていう変数を作って、
複数プロジェクトで共通の外部ライブラリは同じフォルダにまとめて参照しようとしてるんだけど
外部ライブラリっていう単位でまとめるとjavadocのファイル名が被るんだよね
index.htmlとか

普通はどうするもの?

56 :53:2010/07/24(土) 21:57:59
書いた途端自己解決した
普通にさらにサブフォルダ作ればいけるわ

57 :デフォルトの名無しさん:2010/07/24(土) 22:13:37
http://media.itc.u-tokyo.ac.jp/jsim/src/jsim/graphic/api/jp/ac/nime/computer/grpsimulator/ImgPr/FFT.html
このクラスはどうやれば使えるのでしょうか。教えてください

58 :デフォルトの名無しさん:2010/07/25(日) 03:06:54
>>57
staticメンバしかないからインスタンス作らずに、
FFT.fft(xxxx);
で呼べます。

59 :デフォルトの名無しさん:2010/07/25(日) 18:52:18
エクリプスでパッケージエクスプローラーってあるけど
パッケージってどういう単位なの?
全く関係無いプロジェクトがパッケージエクスプローラーに並列に並んでるのっておかしいもの?
階層化したい気がしてきたんだが

60 :デフォルトの名無しさん:2010/07/25(日) 19:03:15
パッケージはいくつかのクラスを適当に (だいたいは機能別に) まとめたものです
java.lang とか java.util とか java.io とかがパッケージです
自分の作ったクラスを特にパッケージ化してないのなら、デフォルトパッケージとかいうのに入ってるはずです

プロジェクトを階層化というか何かグループ化したいのなら、ワーキングセットが役に立つかもしれません

61 :デフォルトの名無しさん:2010/07/25(日) 20:00:21
>>60
ワーキングセットが求めていたものだった
thx

62 :デフォルトの名無しさん:2010/07/25(日) 20:22:22
if (Math.random() > .5) {
return frogMan;
}

ドット5ってなに?
guiceのサンプルコードにあったんだけど

63 :デフォルトの名無しさん:2010/07/25(日) 20:30:31
0.5 のことです

64 :デフォルトの名無しさん:2010/07/25(日) 22:12:03
ubuntuでsynapticから入れた
gnu.getopt.Getoptを使いたいんですが、
ない言われます.
どなたか考えられる原因をエスパーして下さい

65 :デフォルトの名無しさん:2010/07/25(日) 22:18:03
たぶん、ないんじゃないかな

66 :デフォルトの名無しさん:2010/07/26(月) 01:39:57
>>64
パッケージ名からいってJavaのコアライブラリじゃない。
何かのjarファイルをCLASSPATHに含む必要があります。

67 :飛び出せ!名無しくん:2010/07/26(月) 02:32:06
Rクラスに以下を追加したら自動的に削除されました。
public static final class id {
public static final int label=0x7f050000;
}

そして、以下のメッセージが表示されました。
R.java was modified manually! Reverting to generated version!

なぜ手動で追加できないんですか?

68 :デフォルトの名無しさん:2010/07/26(月) 07:33:31
自動生成されるファイルだからです
手動で編集してもまたすぐに自動生成されたものに上書きされますので無駄です

69 :デフォルトの名無しさん:2010/07/26(月) 14:41:54
javaプログラムから他のプログラムを起動し終了するのが目的です
Runtimeを利用して
Runtime rt = Runtime.getRuntime();
rt.exec("hoge.exe");
として起動はできたのですがそのプログラムの終了の仕方がわかりません
ご教授ください

70 :デフォルトの名無しさん:2010/07/26(月) 16:51:14
>>69
Process proc = rt.exec("hoge.exe");
//強制終了したいなら
proc.destroy();
//終了を待ちたいなら
proc.waitFor();

71 :デフォルトの名無しさん:2010/07/26(月) 17:15:25
public class B extends A { とあって、Bを直列化する場合、
AだけにserialVersionUIDを明示すればよさそうに思うけど、
Bにも明示しなければいけないとある。
何故、serialVersionUIDはAに継承できないんですか?




72 :デフォルトの名無しさん:2010/07/26(月) 17:34:24
仮に public class B extends A implements Serializable {}
みたいにフィールド宣言してないから serialVersionUID は
A に宣言してあればよいのでは? という疑問だとする。

次のバージョンで B に
public class B extends A implements Serializable { private int field; }
みたいにフィールド追加によって直列化互換性を破壊する可能性があるんだから、
B 自体にも serialVersionUID は必要。

73 :デフォルトの名無しさん:2010/07/26(月) 18:26:01
>>58
ありがとうございます。

javaはパッケージを新しく追加しなきゃいけないものとデフォルトで使えるものをどう区別しているんですか?

74 :デフォルトの名無しさん:2010/07/26(月) 20:44:21
>>28>>32を1.6.0u21 で-serverつけて実行してみたけど特にへんな結果にはならず…

75 :デフォルトの名無しさん:2010/07/26(月) 20:54:17
>>73
> パッケージを新しく追加しなきゃいけないもの
ってimportしなくてもパッケージ名を省略してクラス名だけで利用できるものっていう意味?
それは言語仕様で決まってる。
http://www.nurs.or.jp/~sug/soft/java/java26.htm

76 :デフォルトの名無しさん:2010/07/26(月) 21:25:41
>>70
ありがとうございます!

77 :デフォルトの名無しさん:2010/07/26(月) 21:34:55
>>74
なんでだろw

OS: WindowsXP pro sp3
>java -server -version
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) Server VM (build 17.0-b16, mixed mode)

>java -server Test
124278795
692451

>java -server Test
7564635
42211

>java -server Test
9223011
51427

>java -server Test
9401275
52451

>java -server Test
8854651
49379

>java Test
-1073756799
2147483647

78 :77:2010/07/26(月) 21:53:26
eclipseでコンパイルした物は変な結果になって、
jdkのjavacでコンパイルした物は正しい結果になったわ。

eclipseとjavacでコンパイルした物を、jadで逆コンパイルしても同じソースになったけど、
javapで逆アセンブルしたら、少し違うコードが出力されていた…けど俺には読めないw

79 :デフォルトの名無しさん:2010/07/26(月) 21:57:31
そんな時は黙ってZIPに固めて上げるものだ

80 :77:2010/07/26(月) 22:35:07
>>79
ttp://www1.axfc.net/uploader/Sc/so/137862.zip

81 :デフォルトの名無しさん:2010/07/27(火) 01:49:03
昔からEclipseでビルドしたクラスの挙動がおかしいことはたまにありましたよ。
特にswitch文はSun(当時)の純正VMがJava言語仕様を踏み倒した実装だった
のでEclipse側が絶対こっちが正しいと主張して、既知の非互換になっていた。
eclipseのクラス出力パスとantのコンパイル出力先を違うパスにして、antの
javacタスクにfork="true"およびexecutable="javacのフルパス"を入れると、
ant経由なら必ずJDKでコンパイルされます。

82 :デフォルトの名無しさん:2010/07/27(火) 09:09:32
>>72
serialVersionUIDで互換性維持はわかるけど、 「B自体にもserialVersionUID が必要」がわからない。
BはAを継承してるけど、AのserialVersionUID は継承できないってこと?
(仕様がそうなっているのなら、何のために)

Aを継承するB, Bを継承するCがあった場合、A, B, CのそれぞれのフィールドにserialVersionUIDを
明示せず、Aのみに明示すればよい方法はありますか。IDは全部同じ。

83 :デフォルトの名無しさん:2010/07/27(火) 10:17:21
>>82
継承はできない。java.io.Serializableの仕様に従って
B、C にはコンパイル実装依存のserialVersionUIDが勝手に付加される。

警告黙らせるだけなら
javac -Xlint:-serial B.java C.java
IDEの警告黙らせたいなら使ってるIDEのヘルプ漁れ。

84 :デフォルトの名無しさん:2010/07/27(火) 10:18:40
×コンパイル実装依存
○コンパイラ実装依存

85 :デフォルトの名無しさん:2010/07/27(火) 10:48:15
>>83
継承はできない。java.io.Serializableの仕様に従って、だけど、
たしかに、マニュアルに「明示的に宣言」とある。

次の疑問は、その理由。継承させると、どのような問題を邪気させるというのだろうか。


86 :デフォルトの名無しさん:2010/07/27(火) 11:24:04
>>85
>>72に書いてあるけど、たとえば
//バージョン1
class A implements Serializable { public static final long serialVersionUID = 0; }
class B extends A implements Serializable { }

//バージョン2
class A implements Serializable { public static final long serialVersionUID = 0; }
class B extends A implements Serializable { private int field; }

で、BがAのserialVersionUIDを継承できたとする。
するとバージョン1のBを直列化したものとバージョン2のBを直列化したものには互換性がない、
にもかかわらずserialVersionUIDが同じという事態が発生する。

serialVersionUIDは大抵privateなので
継承元がserialVersionUIDを宣言しているかを一々確認するのは、
素直にBにserialVersionUIDをつけるより手間がかかる。
serialVersionUIDが付いているかどうかだけならコンパイラは簡単にチェックできるが
AのserialVersionUIDを継承できる場合にBがAのserialVersionUIDを継承しつつ、
前のバージョンからフィールドを追加したかまではコンパイラはチェックできない。

87 :デフォルトの名無しさん:2010/07/27(火) 11:47:31
いい話だなー

88 :デフォルトの名無しさん:2010/07/27(火) 14:29:22
>>86
72の意味が理解できなく。。。

互換性ね。でも、

1)serialVersionUID=1Lで、AのインスタンスをwriteObjectでファイルに保存し、
  その後、Aのフィールドにint fieldを追加してクラスAを変更してからでも、readObjectでdeserializeできるよね。
  変更の仕方によっては、互換性なくなると思うけど。

2)もちろん、フィールド変更しなくてもserialVersionUID変更すると、互換性はない。


89 :デフォルトの名無しさん:2010/07/27(火) 16:06:40
> その後、Aのフィールドにint fieldを追加してクラスAを変更してからでも、readObjectでdeserializeできるよね。
それはとりあえずエラーが出るか否かを気にしてるだけ。
互換性があるかどうかとは関係ないし、実装が変わればエラー出ても文句言えない。

90 :デフォルトの名無しさん:2010/07/27(火) 19:13:07
エクリプスで
実行→実行の構成→Javaアプリケーション
で新規作成して共通タブから実行/デバッグのお気に入りに表示するようにチェックしたんだけど
どこに出てくるの?これ
実行のとこ開いても、「サーバで実行」「Java Bean」の2つがあるだけなんだけど
ここの一覧に出てくるのかと思ってやったんだけど

91 :90:2010/07/27(火) 20:45:13
もしかしてヒストリーとごっちゃになって出てくるのかな?

92 :デフォルトの名無しさん:2010/07/27(火) 20:59:57
エクリプスのサポート係に電話して聞け

93 :デフォルトの名無しさん:2010/07/27(火) 21:35:55
public int compareTo(Object o) {
double h1 = this.height;
double h2 = ((Student)o).height;

return h1 > h2 ? 1 : -1;
}
tp://www.lcv.ne.jp/~kenmio/yomimono/yomimono105.htm

Student型をObject引数で受け取って、それもまたStudent型にキャストしてますが、
引数を最初からStudent型にはできないのですか。
それからStudent型の引数であれば、Object引数で受け取ったからといって
引数そのものが変わるわけでもないし、わざわざキャストしなくてもStudent型
のインスタンスだとコンパイラが判断できてもおかしくないと思うのですが。
スーパークラスのメソッドをサブクラスのインスタンスからアクセスできても
その逆はできないというきまりになっているようですが、この場合の引数は
Student型と決まっているのでそれはないと思うのですが。


94 :デフォルトの名無しさん:2010/07/27(火) 21:44:51
public int compareTo(Student o)

public int compareTo(Object o)
は別々の異なるメソッドですので、
public int compareTo(Student o)
を実装しても、Comparableを実装したことにはなりません。

引数がObjectなら、Student以外のObjectを渡すことも出来るので、
本当にStudentかどうかわかりません。
publicメソッドはどこからでも呼べますので、呼び出し元は不定です。

95 :デフォルトの名無しさん:2010/07/28(水) 01:17:44
netbeansの方がsun純正って意味で変な非互換を回避できたりするのかな

96 :デフォルトの名無しさん:2010/07/28(水) 14:25:17
>>95
Eclipseはそのまま使うとIBMのjavacやらJVMが使われるから、
何も考えずに使う分には、まあそうとも言える。

けどそれってほんの入り口だし、どのIDEを使うかを決めるのには
他にももっと判断すべきことがあると思う。

97 :デフォルトの名無しさん:2010/07/29(木) 05:50:42
メモリ使用量眺めてたら、netbeansの方がeclipseより軽かったけど
普及率でeclpseを使うしかなさげ

98 :デフォルトの名無しさん:2010/07/29(木) 12:04:17
$ java Test.class
Exception in thread "main" java.lang.NoClassDefFoundError: Test/class
Caused by: java.lang.ClassNotFoundException: .home.saruno.ドキュメント.JAVA.study.Test

at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: Test. Program will exit.

ubuntu10.04、コマンドプロンプトでTest.classをコンパイル後に実行すると上記のようなエラーが出てしまいます。
eclipse上ではコンパイルも実行も出来るのですが、どうすればコマンドプロンプトで実行できますか?



99 :デフォルトの名無しさん:2010/07/29(木) 12:51:27
$ java Test

100 :デフォルトの名無しさん:2010/07/29(木) 12:59:47
ああすいません、
$JAVA Test
でも駄目です

101 :デフォルトの名無しさん:2010/07/29(木) 13:04:32
なにかnamespace使ってる?

102 :デフォルトの名無しさん:2010/07/29(木) 13:11:54
$ java -classpath . Test

103 :デフォルトの名無しさん:2010/07/29(木) 13:34:14
我々には難しすぎるので別スレで質問してください

104 :デフォルトの名無しさん:2010/07/29(木) 14:17:52
$ジャヴァ Test
としてください。(空白は全角です。)

105 :デフォルトの名無しさん:2010/07/29(木) 14:33:28
package home.saruno.ドキュメント.JAVA.study;
とかやってるだろ?

106 :デフォルトの名無しさん:2010/07/29(木) 14:57:40
/sutudyに移動してコマンドで java Test とやったら出来ました、お騒がせしました。

jaba  /home/〜〜〜/Testのようにパスの指定しての実行については調べてみます

107 :デフォルトの名無しさん:2010/07/29(木) 15:11:21
回答者が優秀なのでどんどん難問が解決していきますな

108 :デフォルトの名無しさん:2010/07/29(木) 15:47:17
そんなことどうでもいいから金くれ

109 :デフォルトの名無しさん:2010/07/30(金) 16:44:17
データを貯める場所ってLucandraに貯めるべきでしょうか?
それともデータの本体はCassandraでインデックスのみLucandraに置くんでしょうか?

110 :デフォルトの名無しさん:2010/07/30(金) 22:05:25
>>93
 メソッドhungupがクラスTelephoneで定義されているからです。スーパーク
ラス(Telephone)で定義されているメソッド(hungup)を、そのサブクラス
(CellularPhineやFixedPhone)で上書きした場合、インスタンスの型
(CellularPhineやFixedPhone)でその振る舞いが上書きしたメソッドに従う
ということになります。これをポリモルフィズムと言います。
 一方、ObjectはStudentのスーパークラスですが、インスタンス変数height
は持っていません。Object型のインスタンス変数heightについて何かしようと
思えば当然エラーが出ます。さらにポリモルフィズムはインスタンス変数では
なく、メソッドの話です。

111 :デフォルトの名無しさん:2010/07/30(金) 22:45:51
ていうか、ThreadLocalとか初めて知ったわ
難しいなLucandra

112 :デフォルトの名無しさん:2010/07/31(土) 09:31:56
>>111
StrutsとかつかってWebアプリ作っていると馴染みは薄いね
でもたまーに使わないとできない要件とかあったりするよね

113 :デフォルトの名無しさん:2010/07/31(土) 13:00:13
>>112
Javaで全然仕事したことないから分からん

114 :デフォルトの名無しさん:2010/07/31(土) 13:29:55
J2EEでフレームワークとか使わずWebアプリ作ってる会社でバイトしたことあるけど
そういう事例って結構あるもんなのかな?

115 :デフォルトの名無しさん:2010/07/31(土) 23:52:36
データベースから静的htmlファイルを一括作成したいのだが、
どういうやり方が一般的?
ある程度htmlエディタでデザインを整えたhtmlファイルがあって、
それに表を挿入するパターンなのだが。

116 :デフォルトの名無しさん:2010/08/01(日) 00:01:21
xsltじゃね?

117 :デフォルトの名無しさん:2010/08/01(日) 03:21:38
>>115
FreeMarkerだべさ

118 :デフォルトの名無しさん:2010/08/01(日) 06:00:57
ファイル名が00,01,02…のような規則的なテキストファイルを順番に読み取って
ある行の内容が入力内容と一致したらそのファイル名を出力する
といったプログラムを書きたいのですが
うまくいきません

line = reader.radLine();
がうまく機能していないようで
試しに
System.out.println(line);
で表示したところ
□a□s□dd□
のようなよくわからない文字列を表示してよくわからなくなってしまました

どなたかご教授ください

119 :デフォルトの名無しさん:2010/08/01(日) 08:25:04
困った時のJISAutoDetect

120 :デフォルトの名無しさん:2010/08/01(日) 13:11:52
わからなくなってしまましたかそうですか

121 :デフォルトの名無しさん:2010/08/01(日) 14:38:15
わからない子はどんどんしまっちゃおうねぇ

122 :デフォルトの名無しさん:2010/08/01(日) 16:09:19
よくDAOで
Hoge select() {
try{
    PreparedStatement stmt=...;
    ResultSet rs=...;
    // ...
} finally{
    try{
        rs.close();
        stmt.close();
    } catch(SQLException e) {}
}
というプログラムを見るのですが、これだとrs.close()が例外を投げた場合
stmt.close()が呼び出されないのですが、rs.close()が失敗するとstmt.close()も
必ず失敗するという決まりがあるのでしょうか?

123 :デフォルトの名無しさん:2010/08/01(日) 16:47:43
>>122
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/sql/Statement.html#close()
rs.close()が失敗するとstmt.close()も失敗するかどうかは、jdbcドライバの実装によると思うが、
closeしなくてもガベージコレクションで自動的にcloseされるみたいですね。

124 :デフォルトの名無しさん:2010/08/01(日) 22:43:10
じゃば java というような
英語の文字列と日本語の文字列を区別することは可能でしょうか


125 :デフォルトの名無しさん:2010/08/01(日) 22:52:40
Character.UnicodeBlock.of メソッドを使えばそれぞれの文字の種類はわかりますので、
その文字列中の各文字を調べてひらがなとかが混じってれば日本語だと判定するとかでどうでしょうか。

126 :デフォルトの名無しさん:2010/08/01(日) 23:15:17
netbeansでJNIやろうとしてもうまくいかないんですがC/C++のほうがおかしいのかなあ。
英語でいろいろ問題があることが挙げられてるけどあれだけでも解決しない。


127 :デフォルトの名無しさん:2010/08/02(月) 07:00:02
ここにあるコードの62行目と76行目の { } にはどんな作用があるのでしょうか?
http://www.koders.com/java/fid2E7B27F41ADBE1E39D69A4A4AC071AF622510C80.aspx?s=140
あってもなくても何もかわらない気がするのですが…。

128 :デフォルトの名無しさん:2010/08/02(月) 07:27:49
>>127
boolean addPoint の有効範囲を制限してる。
もしくは書いた人の美意識を満足させてるんじゃないかと。

129 :デフォルトの名無しさん:2010/08/02(月) 16:12:37
IEでファイルのダウンロードをする部分で解決できずに困っていて質問です。
ファイルのダウンロードはすでに問題なく動作しており以下のようになっております。

HTML側
onclick="location.href='./OpenFile?file=' + hensu;"

Servlet側
strFile//受け取ったファイル名
ServletOutputStream out;
out = response.getOutputStream();
File inFile = new File(strFile);
InputStream in = new FileInputStream(inFile);
int data = -1;
long longCount = 0;
while ((data = in.read()) != -1){
out.write(data);
longCount++;
if(longCount % 200 == 0){
out.flush();
}
}
in.close();
out.close();
int dispCount= getFromDatabase('DispCount');
dispCount++;
setDatabase('DispCount', dispCount);
この状態でHTMLをクリックするとファイルのダウンロードダイアログが表示されます。ダイアログを表示した時点で「表示カウント」を
+1してDBに書き込んでいるのですがキャンセル時だけ+2されているようで困っています。原因をご存知の方いらっしゃいませんか?
IE6,7,8で同じ
tomcat-5.0.30
j2re1.4.2_08

130 :デフォルトの名無しさん:2010/08/02(月) 20:14:12
Strutsというものを学習しなければならなくなりました。
よろしければ、概要から発展まであるわかりやすいサイトがあれば教えてください。

131 :デフォルトの名無しさん:2010/08/02(月) 21:08:26
>>125
勉強になりました
ありがとうございました


132 :デフォルトの名無しさん:2010/08/02(月) 21:24:54
>>130
http://struts.apache.org/1.3.10/userGuide/index.html

133 :デフォルトの名無しさん:2010/08/03(火) 02:20:51
>>128
変数の有効範囲が変わるんですね。
解説ありがとうございます。

134 :デフォルトの名無しさん:2010/08/03(火) 11:23:00
>>132
ありがとうございます。
よろしければ日本語のサイトもご存じであれば教えてください。

135 :デフォルトの名無しさん:2010/08/03(火) 15:50:49
ガスライティング

136 :デフォルトの名無しさん:2010/08/03(火) 18:15:00
わろた

137 :デフォルトの名無しさん:2010/08/03(火) 21:57:13
new Date(); で得た dd.getHours() を 変数a に入れるにはどうすればいいですか?

int a = dd.getHours();

ではダメなんですが・・・。

138 :デフォルトの名無しさん:2010/08/03(火) 22:15:21
>>137
普通にとれたけど。ddにnew Date()は代入している?
int a = new Date().getHours();
System.out.println(a);

ところでDate#getHoursは、@Deprecatedだからあまり使うべきじゃぁない。

139 :デフォルトの名無しさん:2010/08/03(火) 23:14:51
>>138
自己解決しました。

もう1つ質問させて頂きたいのですが、

dd = new Date();
date = dd.getDate();

として、dateに日を入れるようにしました。

次に、

<script language="JavaScript" src="./maru.pl"></script>
<script language="JavaScript">
<!--
document.write(date);   #####
// -->
</script>

上の#####のwrite( ) の中に変数(date)を入れたいのですが、
どうすれば変数扱いになるでしょうか。


140 :デフォルトの名無しさん:2010/08/03(火) 23:17:30
>>139
>>1

141 :デフォルトの名無しさん:2010/08/03(火) 23:26:05
JavaScriptワラタ

142 :デフォルトの名無しさん:2010/08/03(火) 23:29:43
maru.pl
これってパール?w

143 :デフォルトの名無しさん:2010/08/03(火) 23:31:16
JavScript=釣り、だろ

144 :デフォルトの名無しさん:2010/08/03(火) 23:40:08
// -->
今どきの釣りはこれだろw

145 :デフォルトの名無しさん:2010/08/03(火) 23:50:06
そんなことどうでもいいから金くれ

146 :デフォルトの名無しさん:2010/08/04(水) 02:16:36
完全に同時に実行される可能性のあるJavaアプリケーションで、
プロセス毎にユニークな(プロセスID的な)値を得る方法を教えてください。
最初は疑似乱数を使用する方法を考えたのですが、
この場合、シード自体がユニークな値の必要があります。

他に考えた方法
B. JNIもしくはJNAを使用してプロセスIDを取得する
C. GUID発行サーバを設置する

147 :デフォルトの名無しさん:2010/08/04(水) 03:12:26
VMIDってどうにかして取れないんだっけ?

148 :146:2010/08/04(水) 03:57:50
ありがとう。
適当な解説が見つかりました。

Get a unique identifier - Real's Java How-to
http://www.rgagnon.com/javadetails/java-0518.html

149 :デフォルトの名無しさん:2010/08/04(水) 06:28:56
複数行の文字列
text = "line1\nline2\nline3\nline4";
がある時に"line1\nline2\nline3" と "line4" を取得するために
以下のようなコードを書いてるんですが長すぎる気がします。
もっとスッキリした書き方はできないでしょうか?

String str1 = "";
String[] arr = text.split("\n");
for(int i = 0; i < arr.length - 1; i++){
 if (i == arr.length - 2) str1 += arr[i];
 else str1 += arr[i] + "\n";
}
String str2 = arr[arr.length -1];

150 :デフォルトの名無しさん:2010/08/04(水) 07:01:00
>>149
String text = "line1\nline2\nline3\nline4";
String str1 = text.substring(0, text.lastIndexOf("\n"));
String str2 = text.substring(text.lastIndexOf("\n") + 1);

151 :デフォルトの名無しさん:2010/08/04(水) 09:31:47
>>150
lastIndexOfなんて便利なメソッドがあったんですね。
ありがとうございます。

43 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)