【初心者】Java質問・相談スレッド82【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/02/25(土) 23:38:06質問をする前に、貴方が見なければならないサイトについての情報は、
下の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 を使え。
前スレッド
【初心者】Java質問・相談スレッド81【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1139654818/
/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/
次スレは>>980あたりで。
0577デフォルトの名無しさん
2006/03/07(火) 15:47:44配列がなかったら… 配列クラスを自作して肝心な所は
native でやるしかないかな?
0578デフォルトの名無しさん
2006/03/07(火) 15:48:46アクセスの仕方によっては無駄が多そうだが。
0579デフォルトの名無しさん
2006/03/07(火) 15:52:230580デフォルトの名無しさん
2006/03/07(火) 16:17:170581デフォルトの名無しさん
2006/03/07(火) 16:21:210582デフォルトの名無しさん
2006/03/07(火) 16:53:12eclipseでやってたらこんなエラー出てきたんすけど
これって何?
0583デフォルトの名無しさん
2006/03/07(火) 16:54:280584デフォルトの名無しさん
2006/03/07(火) 17:02:08extends IndexOutOfBoundsException
不正なインデックスを使って配列がアクセスされたことを示すためにスローされます。
つまり、インデックスが負または、配列のサイズ以上の場合です。
0585デフォルトの名無しさん
2006/03/07(火) 17:10:20java.lang.ArrayIndexOutOfBoundsException
↓
ArrayIndexOutOfBoundsException
↓
Array Index Out Of Bounds Exception
↓
array 配列
index インデックス(添字)
out of bounds 範囲外
exception 例外
0586デフォルトの名無しさん
2006/03/07(火) 17:41:46お時間ある方、下のコード実行してみてもらえないでしょうか?
*/
String[] array = new String[1000000];
ArrayList arrayList = new ArrayList();
for(int i = 0; i < array.length; i++){
array[i] = "a";
arrayList.add("a");
}
System.gc();
System.out.println("wait 5 seconds...");
try{
Thread.sleep(5000);
} catch(InterruptedException ie){}
/*
0587586
2006/03/07(火) 17:42:17*/
String tmp;
long time = System.currentTimeMillis();
for(int i = 0; i < array.length; i++){
tmp = array[i];
}
System.out.println("Array : " + (System.currentTimeMillis() - time) + " ms");
time = System.currentTimeMillis();
for(int i = 0; i < arrayList.size(); i++){
tmp = (String)arrayList.get(i);
}
System.out.println("ArrayList : " + (System.currentTimeMillis() - time) + " ms");
time = System.currentTimeMillis();
String[] tmpArray = new String[arrayList.size()];
arrayList.toArray(tmpArray);
for(int i = 0; i < tmpArray.length; i++){
tmp = tmpArray[i];
}
System.out.println("toArray : " + (System.currentTimeMillis() - time) + " ms");
0588586
2006/03/07(火) 17:44:25圧倒的に配列が速いのは知っていたのですが、
そのため、わざわざtoArrayして回していたのです。
ためしに上記コードを実行してみたら、
ArrayListとtoArrayがほとんど同じ速度です・・・・
皆さんのPCでも同じような結果でしょうか?
0589535
2006/03/07(火) 17:59:40PentiumM1.2GHz メモリ512MB Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
Array : 0 ms
ArrayList : 47 ms
toArray : 110 ms
0590デフォルトの名無しさん
2006/03/07(火) 18:02:35JDKのバージョンが抜けてますよ?
0591589
2006/03/07(火) 18:03:360592586
2006/03/07(火) 18:45:21失礼しました。
C:\j2sdk1.4.2_11\bin\java -server Test
wait 5 seconds...
Array : 30 ms
ArrayList : 190 ms
toArray : 150 ms
C:\j2sdk1.4.2_11\bin\java -client Test
wait 5 seconds...
Array : 20 ms
ArrayList : 80 ms
toArray : 220 ms
C:\jrockit-j2sdk1.4.2_08\jre\bin\java -server Test
wait 5 seconds...
Array : 10 ms
ArrayList : 100 ms
toArray : 111 ms
C:\jrockit-j2sdk1.4.2_08\jre\bin\java -client Test
wait 5 seconds...
Array : 10 ms
ArrayList : 70 ms
toArray : 211 ms
この辺りでやってみました。
Pentium3 700MHz 512M です。
0593デフォルトの名無しさん
2006/03/07(火) 20:59:49(home)>java -Xms192M -Xmx192M -showversion String9
java version "1.5.0_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_03-b07)
Java HotSpot(TM) Client VM (build 1.5.0_03-b07, mixed mode, sharing)
wait 5 seconds...
Array : 101 ms
ArrayList : 320 ms
toArray : 311 ms
>>588
>ArrayListと配列を比べた場合、
>圧倒的に配列が速いのは知っていたのですが、
単にArrayList#toArray()のオーバーヘッドで相殺されただけじゃね。
単純にArrayListと配列の速度比較したら配列が遅いかもしれんが、
だからって「ArrayListが遅い」わけじゃない。
99.9%の場面でArrayListのスピードで十分。
「配列と比べたArrayListの速度」が問題になるようなの極々わずか。
0594デフォルトの名無しさん
2006/03/07(火) 21:59:34この場合もinitialSize設定しとけば、差はかなり縮まるはず。
0595デフォルトの名無しさん
2006/03/07(火) 22:07:09インデクサや関数呼び出しのオーバーヘッドの差かな?
0596デフォルトの名無しさん
2006/03/07(火) 22:21:48jrockitはWebLogicのBEAのやつなん。
速度はすごく速い。
でも、地味にバグを見つけてしまった・・・・
0597デフォルトの名無しさん
2006/03/07(火) 23:06:12最近のVMだとそのへんの最適化が進んでるって話だし。
0598デフォルトの名無しさん
2006/03/07(火) 23:17:37戻り値を明確にして、分かりやすいコードを書くために
以下のように、メソッドの引数と同じ変数名で戻り値を受け取るのは
よくないのでしょうか?
呼出し側
StringBuffer buf = new StringBuffer();
buf = methodA(buf);
System.out.print(buf); // ここで methodA() で書き変えた内容が出る。
呼び出される側
StringBuffer methodA(StringBuffer buf) {
buf.append("Hello");
retrun buf;
}
0599デフォルトの名無しさん
2006/03/07(火) 23:24:21↓これでも同じ動作だろ?
呼出し側
StringBuffer buf = new StringBuffer();
methodA(buf);
System.out.print(buf); // ここで methodA() で書き変えた内容が出る。
0600デフォルトの名無しさん
2006/03/07(火) 23:27:48呼び出し側からは、methodA の引数と戻り値が同じインスタンスなのか
判別できません。
# 個人的にはオカシイと思う点が少なくても二箇所あります。
# 自分向けの表現では気持ち悪い、気味が悪いかな
0601デフォルトの名無しさん
2006/03/08(水) 00:28:32>>StringBuffer buf = new StringBuffer();
>>buf = methodA(buf);
おい!!
0602エスパー
2006/03/08(水) 01:17:54ちょっと変か
0603デフォルトの名無しさん
2006/03/08(水) 01:54:22メソッド引数と、その戻り値を受け取る変数が同じなんてことはざらに
あるぞ。別におかしくともなんともないだろ。
たとえば、ある文字列を渡すと、後ろに「hoge」とくっつけるメソッドが
あるとしたら
String testStr = "test";
testStr = appendHoge( testStr);
System.out.println( testStr);
って普通のコードだと思うけど?
ただな、StringBufferを引数で渡して、そのStringBufferを戻り値で返すって、
いったい何がしたいんだよ。俺も>>599と同じように思った。
0604デフォルトの名無しさん
2006/03/08(水) 02:09:07返されるかも知れないし、返されないかも知れない。
0605デフォルトの名無しさん
2006/03/08(水) 03:02:20StringBufffer sb = new StringBuffer().append( 1 ).append( -1.3 ).append( "hoge" );
例えばこういった append の連続使用は多いケースだろ。
0606デフォルトの名無しさん
2006/03/08(水) 03:36:17それ「StringBufferを引数で渡して」るわけじゃないし。
0607デフォルトの名無しさん
2006/03/08(水) 06:11:02toArray(Object[] nArray) の場合は、引数である配列の要素数が足りなかったとき、
メソッド内部で新しい配列を生成するので、違うインスタンスが返される。
足りてれば問題ない。
ただし、この場合にも、引数と戻り値は別物として扱ったほうが無難だと思う。
# 変数名の再利用はバグの温床になるからである。
>>605
appendの場合は、目的がハッキリしている。
返って>>598の場合は、「戻り値を明確に」するという目的はあるものの、
その目的とソースが一致していない。
目的を達成するためにそのように記述する必然性が全く無い。
0608デフォルトの名無しさん
2006/03/08(水) 12:44:48ドライバーマネージャーを使った接続でもJTAを適応できるでしょうか?
JTAに関する説明のサイトを見るとほとんどがデータソースを使っているので…
0609デフォルトの名無しさん
2006/03/08(水) 13:29:02バージョンや環境でえらく差が出るような。
こっちで実行した結果を挙げとく。
(ハードは PowerPC G4 800MHz, 640MBの iBook G4)
$ uname -a
Darwin xxxxx.local 8.5.0 Darwin Kernel Version 8.5.0: Sun Jan 22 10:38:46 PST 2006; root:xnu-792.6.61.obj~1/RELEASE_PPC Power Macintosh powerpc
$ java -Xms192M -Xmx192M -showversion ss
java version "1.4.2_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_09-232)
Java HotSpot(TM) Client VM (build 1.4.2-54, mixed mode)
wait 5 seconds...
Array : 47 ms
ArrayList : 174 ms
toArray : 99 ms
0610デフォルトの名無しさん
2006/03/08(水) 15:29:09いじってるんだけど、なかなか良い感じ。
ttps://simple-log.dev.java.net/
ライセンスは、Apache License 2.0。
Log4jとの比較情報とかもある。
ttps://simple-log.dev.java.net/log4jComparison.html
簡単なオブジェクトダンプとかもやってくれるんで便利。
試しにネストさせたArrayListとかを放り込んでみたら、
ちゃんとネストしてログ出力されたス。
名前通り、設定もシンプル。
0611デフォルトの名無しさん
2006/03/08(水) 16:07:03専門用語ばかり使ってて、お前ら初心者がプログラミングなんかやるのは100年早ぇんだよ
ってな空気プンプン漂ってない?
分かりやすく理解できるような参考書って無いよね
0612デフォルトの名無しさん
2006/03/08(水) 16:09:22バカが近寄らないようにしてるだけ
2chはバカばっかりじゃねーかってツッコミは無しな
0613デフォルトの名無しさん
2006/03/08(水) 16:13:570614デフォルトの名無しさん
2006/03/08(水) 16:22:130615デフォルトの名無しさん
2006/03/08(水) 16:29:400616デフォルトの名無しさん
2006/03/08(水) 16:38:57始めからオブジェクト指向に慣れたほうが。
0617デフォルトの名無しさん
2006/03/08(水) 17:35:18プリンターの用紙・トレイ一覧を取得する際、以下のような処理でMediaアトリビュートを
取得できるのですが、これの名称の取得をするにはどのようにすればよいのでしょうか?
(特に、MediaTrayの定数に無いものの名称が知りたいです)
Media[] media= (Media[])PrinterJob.getPrinterJob().getPrintService().getSupportedAttributeValues(Media.class,null,null);
javaのダイアログでは「トレイ1」といった名称が出ているので、取得できそうなのですが
方法がわかりません・・・・
よろしくお願いいたします。
0618デフォルトの名無しさん
2006/03/08(水) 17:44:52と
double a = Double.parseDouble(args[0]);
の違いってなんですか?
0619デフォルトの名無しさん
2006/03/08(水) 18:06:05なんでそんなことが気になるのかわからんが…
前者はDoubleのインスタンスが生成されてて、後者は生成されない。
0620デフォルトの名無しさん
2006/03/08(水) 18:11:09チョイ待て。後者だってDoubleのインスタンスは作られないだろ。
0621デフォルトの名無しさん
2006/03/08(水) 18:11:400622デフォルトの名無しさん
2006/03/08(水) 18:15:32好き嫌い
0623デフォルトの名無しさん
2006/03/08(水) 18:25:09後者を使うべし
0624デフォルトの名無しさん
2006/03/08(水) 19:08:32プギャー
0625デフォルトの名無しさん
2006/03/08(水) 19:20:32ところで↓こういうコード知ってる?
public static double parseDouble(String s) throws NumberFormatException {
return FloatingDecimal.readJavaFormatString(s).doubleValue();
}
0626デフォルトの名無しさん
2006/03/08(水) 19:37:38実装上の都合が、漏洩しているのが良くないのだろう。
0627デフォルトの名無しさん
2006/03/08(水) 19:41:190628デフォルトの名無しさん
2006/03/08(水) 21:05:43日本語でおk
0629デフォルトの名無しさん
2006/03/08(水) 22:28:16Eclipseスレにまで同じ質問しただろ。
コピペすんな馬鹿
0630デフォルトの名無しさん
2006/03/08(水) 22:29:18え、1年のときからJavaを教わることができる東大は馬鹿なのか?
うちは三流大で未だにCでやってる
0631デフォルトの名無しさん
2006/03/08(水) 22:31:27Javaをはじめようと思ってます。
Cはある程度できるけど、Web系のシステムは全然やったことありません。
どの本からはじめたらいいでしょうか。あるいは勉強法など。
※Sunのオンラインチュートリアルを途中まで進めましたが、
英語なのでやはり時間がかかってしまい。
0632デフォルトの名無しさん
2006/03/08(水) 22:38:15いいじゃないか、C。
Cでスタックとヒープのメモリ管理の仕方を覚えておくと、
JavaやC#に移行したときに原理が解っていいぞ。
0633デフォルトの名無しさん
2006/03/09(木) 01:59:40クラス名の先頭は大文字にしろや!!!
0634デフォルトの名無しさん
2006/03/09(木) 02:14:18Cをやることは大いに構わないと言うか
お勧めするが、それしかやらないのは非常にいたい。
オブジェクト指向一つ理解できないのが情報工学科を
卒業するなんて恥ずかしい。
0635デフォルトの名無しさん
2006/03/09(木) 02:17:020636デフォルトの名無しさん
2006/03/09(木) 10:06:51SQLを発行して、コネクションをクローズした場合、発行したSQLはコミットされますか?
--
Connection con = コネクション取得処理
con.setAutoCommit(false);
//con に対してINSERTなどのSQL発行
con.close();
0637デフォルトの名無しさん
2006/03/09(木) 10:28:090638636
2006/03/09(木) 11:08:16質問しといてアレなんですが、実際に確かめてみたらコミットされるようでした。
(Oracle10g)
下記によると、DBによって異なるが必ずコミットかロールバックされる様ですね。
http://akimoto-jp.com/java/Database/Jdbc-api/Connection.html
0639デフォルトの名無しさん
2006/03/09(木) 11:18:10俺もされないと思ってた。
参考になった。サンクス。
0640デフォルトの名無しさん
2006/03/09(木) 11:20:150641デフォルトの名無しさん
2006/03/09(木) 11:21:240642636
2006/03/09(木) 11:37:54ところで、データベースアクセスエラー時の動作検証などみなさんどうやって行ってますか?
僕の場合、SQL発行してるところでLANケーブル抜いてみる
->ただし、この場合コネクションオブジェクトごと壊れるみたいで、クローズもロールバックもきかない
ソースコード中にエラーが起こるようなコードを書く
->書き換えたコードを元に戻さないと大変なことになる
やってて、どうもスマートじゃないなぁと思う今日この頃です。
0643デフォルトの名無しさん
2006/03/09(木) 11:48:54スゴスwwwwwwww
0644デフォルトの名無しさん
2006/03/09(木) 12:14:15うちのテストも似たようなものです。スマートじゃなくてもいいんじゃない?
直接関連する部分は広くない(例外あげりゃいい)し、そういうところは使いまわしてるし。
0645デフォルトの名無しさん
2006/03/09(木) 12:39:02出来なきゃちょっと辛いでしょ。大体いつも設定ファイルの記述でデータソースと
JDBC ドライバ直呼びと選択できるよう設計するし。
0646637
2006/03/09(木) 13:04:560647デフォルトの名無しさん
2006/03/09(木) 15:33:35例外処理を書かなければコンパイルを通らない場合と、例額処理を書かなくても
コンパイルを通る場合があるようですが、これは何がちがうんでしょうか?
public class TryTest
{
public static void main(String[] args)
{
ExThrowSQL();//これは例外を書かないといけないが
ExThrowOutBounds();//こっちは例外を書かなくてもコンパイルできる
}
public static void ExThrowSQL() throws SQLException
{
;
}
public static void ExThrowOutBounds() throws ArrayIndexOutOfBoundsException
{
;
}
}
0648647
2006/03/09(木) 15:34:38あるthrows句もつメソッド⇒あるthriows句をもつメソッド
例額処理⇒例外処理
です
0649デフォルトの名無しさん
2006/03/09(木) 15:40:02( ´・ω・`)?
0650デフォルトの名無しさん
2006/03/09(木) 15:43:57http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/RuntimeException.html
0651デフォルトの名無しさん
2006/03/09(木) 15:48:100652デフォルトの名無しさん
2006/03/09(木) 15:50:51ありがとうございました。
0653デフォルトの名無しさん
2006/03/09(木) 15:53:51JAVAの特徴の一つとして、よくマルチプラットフォームがあげられますが
それだった,NetmowrsoujaNpaidesukak fwfwqうえwwwwwwwwwd
0654デフォルトの名無しさん
2006/03/09(木) 15:55:580655デフォルトの名無しさん
2006/03/09(木) 15:58:30ここは質問Wofesuresfzyanaidenasdうえeeawwwwwwwww
0656名無し募集中。。。
2006/03/09(木) 16:02:320657653,655
2006/03/09(木) 16:08:25正直すまんかった。
今では反seiSiterwurwreうえwaawwweefr
0658デフォルトの名無しさん
2006/03/09(木) 16:11:390659デフォルトの名無しさん
2006/03/09(木) 16:50:070660デフォルトの名無しさん
2006/03/09(木) 22:07:20int number = 2;
do{
boolean prime = true;
for(int i = 2; i < number / 2 + 1; i++){
if((number % i) == 0) prime = false;
}
if(prime == true){
System.out.print(number + " ");
++count;
}
++number;
}while (count < 10);
System.out.println("");
素数を書き出すプログラムなんですが、これの
for(int i = 2; i < number / 2 + 1; i++)
この部分で何をやってるのかよく分からないのですが…
0661デフォルトの名無しさん
2006/03/09(木) 22:16:300662デフォルトの名無しさん
2006/03/09(木) 23:16:090663デフォルトの名無しさん
2006/03/09(木) 23:18:430664デフォルトの名無しさん
2006/03/10(金) 00:25:17サンプルってどこかにないでしょうか?
0665デフォルトの名無しさん
2006/03/10(金) 00:48:07何からクライアントにダウンロードするのか
話はそれからだ
0666デフォルトの名無しさん
2006/03/10(金) 00:56:52サーバ側でファイル作ったらFileOutputStreamで保存しておいて、クライアントの要求によって
それをstreamに書き出せばいい。
クライアントってぐらいだから、多分ネットワーク経由でデータを流したいんだろうけど
それはsocketからoutputStreamを読めばいいだけの事。 別に特別な事はない。
I/O関係とネットワーク関係のサンプル見れば解る。
0667デフォルトの名無しさん
2006/03/10(金) 03:29:49float型の扱いに困っています。VC++で出力されたfloatの値は
4バイトで出力されますが、Javaでは8バイトで読み込まないと
いけないのですが、どう対処すればよいでしょうか?
0668デフォルトの名無しさん
2006/03/10(金) 03:45:53どうやって読み込んでるの?
0669デフォルトの名無しさん
2006/03/10(金) 03:54:150670デフォルトの名無しさん
2006/03/10(金) 04:00:07次にJava に対しても同じようにチェックし、
両者の違いがないこと、または、違いを吸収できるような仕掛けを考える。
大抵は、IEEEのなんたらに「準拠」しているっぽい?が、
あまり、「だいたい上手く動く」というアプリケーションは使いたくない。
0671デフォルトの名無しさん
2006/03/10(金) 04:20:05VC++限定でいいならfloatはJavaと同じIEEE 数値規格っぽいな。
>public static float Float#intBitsToFloat(int)
これってint読んでるんだから4byteじゃね?
0672デフォルトの名無しさん
2006/03/10(金) 10:29:44http://www.nurs.or.jp/~sug/soft/java/java32.htm
文中の…
アクセスを禁止したい基底クラスのメソッドは、「委譲」されたクラスで定義しなければ、呼び出されようがないのである。
という意味がさっぱりわからないのですが、教えていただけないでしょうか。
0673デフォルトの名無しさん
2006/03/10(金) 10:40:240674デフォルトの名無しさん
2006/03/10(金) 10:41:36具体的に付けたいプロパティは、swing.defaultlaf。
欲を言えば、JNI_CreateJavaVMで起動されるJVM全て、
無理なら、java.exe、javaw.exeのような、プラットフォーム毎のjvm起動コマンドで
作られるJVM。
環境変数とかで、なんとかなりそうなんですが。
0675672
2006/03/10(金) 10:59:18委譲における
「基底クラス」って何なのかがわからないんです。
↓の場合Aが基底クラス?それともB?
class A{
B b = new B();
A.meth1()
{
b.meth1()
}
}
Class B{
public int meth1(){
......
}
}
0676デフォルトの名無しさん
2006/03/10(金) 11:13:10基底クラスの意味を間違えてる。
クラス:Tabemono
↓
Tabemonoを継承して クラス:Kudamonoを作ったとする
↓
Kudamonoを継承して クラス:Apple とクラス:Orangeを作ったとする
この場合、Tabemonoが基底クラスとなるわけだ。
■ このスレッドは過去ログ倉庫に格納されています