★★Java質問・相談スレッド183★★
レス数が950を超えています。1000を超えると書き込みができなくなります。
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理 http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
(p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※
質問時の心得
・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。
・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。
前スレ
★★Java質問・相談スレッド182★★
https://mevius.5ch.net/test/read.cgi/tech/1542595026/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured なんで世のリファクタツールは
returnを複数持つ関数をインライン展開できませんか
ラベルつきブレークにしてください スレッドセーフでない…別のスレッドで…仮に…同じクラスを…読み書きした場合…
どうなるの?…プリミティブのint、long、doubleは…以前の値、新しい値、混ざった値…
になるのは解ってるけど…クラスだったらどうなる? クラスポインタをすげ変えてる間にスレッドが衝突したりはするまい ふつうはクラスをアンロードしたりはしない
クラスをアンロードしないなら複数スレッドから触っても問題ない
クラスではなくインスタンスの参照を保持するオブジェクト変数のことであれば、volatile 付けるか synchronize 等で同時実行制御すれば安全になる オブジェクト変数という言い方はおかしいか
オブジェクト型フィールドかな >>856
intと参照への代入は古い値か新しい値のどちらかになる
つまりアトミックではある
longとdoubleなら混ざった値になることもある
ただ、同じクラスを書き換えるって言い方が怪しいな
クラスやインスタンスのメンバの値を書き換える場合の振る舞いはそのメンバの型に依存する volatileはその名が示す通り、排他制御のためのものではない。 ?
volatileが排他制御のためのものである、なんて言ってる人いないよね >>862
Java 5からvolatileの仕様が変更されたんだよ
64ビット値の書き込み・読み取りがアトミックになることも保証されるようになってる volatile の仕様変更について詳しく知りたかったら JSR-133 で検索してね Javaのオブジェクト参照って64bit環境だと64bitなんだっけ
↓こういうの書くときはvolatile付けたほうがいいのかな?
if (sobj == null) sobj = new Obj();
return sobj; C#だと参照型、bool、byte、、、intはアトミックって仕様として決まってるけどJavaはどうなのかな >>863
volatileの仕様がどうであれ排他制御目的ならsynchronize使っとけってことだろたぶん >クラスではなくインスタンスの参照を保持するオブジェクト変数のことであれば、volatile 付けるか synchronize 等で同時実行制御すれば安全になる
この書き方がいろいろ微妙だからでしょ
変数への読み書きがatomicかどうかで言えば
参照はvolatileつけなくても常にatomic
primitiveはlong, doubleを除いてatomic
long, doubleはvolatileをつければatomic >>866
シングルトンにしたいならvolatileにしてもダメ
AtomicReferenceがいい
厳密さにこだわらないならvolatileなしもアリ >>869
微妙?
この文のvolatileは安全であるに掛かってて、その理由は可視性の問題
排他制御に掛かってると読むのは誤読だし、ID:nwZ7YrBt0のほうが全然理解が深いでしょ >>872
何をもってスレッドセーフと言うかという前提の違いなのかな
volatile付ければ安全って書いてるから
ほぼ同時にスレッド1でwriteしてスレッド2でreadした時に
実際に実行された順序通りの結果が保証されてなければ
writeやreadはスレッドセーフじゃないって考え方でしょ?
オレは順序の保証がなくてもアトミックならreadやwrite自身はスレッドセーフって考え方
順序が問題になるような使い方してるならvolatile付けるだけじゃ駄目だしね >>873
「volatileが排他制御のためのものである、なんて言ってる人いないよね」ってのが俺の発言だよ
反論するなら暗に名に「言ってる人がいるかどうか」がポイントであって、各人が安全をどう捉えるかの違いなんてどうでもええがな
反論ではなく皆さん気を付けましょうねという話ならわかる >>873
そもそもID:nwZ7YrBt0の発言は明らかに参照の更新がatmicであることを理解した上での一歩進んだ可視性の話を付け加えて安全と言及してるんだから何れにしても釈迦に説法 「volatileを付けると安全になる」
これが微妙なんよ
volatileをスレッドセーフティを提供する手段として考えてるのが超微妙
排他制御云々書いた人の考えはわからないけど
volatile付ければ安全て言われるとそりゃないわってなる >>876
C/C++ では volatile なんて全く当てにぜずに、例えば posix-thread を使う(し C++11 lator では p-thread が取り込まれてしまった)のですが、Java ではまだ volatile を当てにするコードが生き残っているのですか? volatile付けるだけで安全なんて発言ないよ
その解釈には無理がある
文脈を理解できない人にまでいちいち配慮してらんないよ
スレ民の個々のスキルなんてマチマチなんだからvolatileをうまく使えるかどうかは本人次第
スレッドセーフティを語る上で可視性を軽視している方が微妙だと思う プリミティブの振舞いは知ってるんだけど…Stringを同時に…読み書きすると…どうなりますか?
結局…スレッドセーフにするんだけど…今まで…なんで動いてたのかって…事で… 全ての参照割り当ては…アトミックと…言っているが…本当なんでしょうか?
https://stackoverflow.com/questions/7421558/is-string-s-foobar-atomic
Stringなので…クラスポインタ…書き換える所で…でっていう事で…
クラッシュしなかったら…間違っててもいいんだよ
とりあえず…運が良かっただけだろうね…直しとくわ… >>876
排他制御をコードブロック(複数ステートメント)にのみ使うものだと思ってるのかな?そこが認識が一致しない原因かもしれない
複数ステートメントだったらsynchronized等を使って排他制御する
これはあなたの言う通り、間違ってないです
でも単一ステートメントでフィールドの読み取り・書き込みをする場合は?
これもlongやdoubleの場合は排他制御が必要になる
もちろん複数ステートメントの場合と同じくsynchronized使ってもいいんだけど、この場合はvolatileでも代用できる
上位32ビットの書き込みと下位32ビットの書き込みの間に他スレッドからの読み取りがおこなわれないことが保証されるのだからこれも立派な排他制御ですよ volatile を付けて、仮想アセンブラを見てみれば?
どういう仮想命令に変換されているか 結局…動いてたのは…アトミックだったからだろう…直すか直さないか…しとくわ…
ありがとう… Java Silverって黒問さえ出来れば同じような問題が出るのでしょうか
受験者の方のご意見いただけたらと思います。 >>882
JVMの中間コードは元よりも少しだけ機械が処理しやすい形に変換されたソースコードに過ぎず、実際のマシンの動作と対応するものではない
そんなものを見たところで何の証拠にもならん
お前の好きなルビ糞のVMだって一緒だ
巣に帰れ >>885
ほとんど同じだった、ブロンズ、シルバー、ゴールドとったけど
ブロンズが一番難しかった、オブジェクト指向の概念とかよくわからん Javaの勉強始めたところですが、メソッドのソースって何処を見れば掲載されていますか?
equalsメソッドをAPIドキュメントで見ても、
サマリーやパラメーターや条件は記載さているのですが、
以下のソースはどこ見ればわかるのでしょうか?
public boolean equals(Object obj) {
return (this == obj);
} 現時点では必要はないかと思いますが
ご参考に、どのようなところを調べれば分かるのでしょうか?
ご教示いただけたら幸いです。 https://github.com/openjdk/jdk
oracle jdkとは差分があるかもしれんけどここ見れば いまのJDK配布物にはsrc.zip同梱されてないんだっけ?
IDEにもよるけどsrc.zipアタッチしておけばメソッド名クリックで中身を潜っていけるのでおすすめ Angularが良くわかないんだけど、例えばmd-toobarとmat-toolbarはなにが違うの?
いま触っているのが全部md-xxxだけど、ググるとmat-xxxばかり
package.jsonも、angularーmaterialになっているけど、ググって出てくるのは@angular/materialで、違いが分からない マルチです。すみません
どうか教えてください
以下のようにarrayList要素を2つ含んだarrayListがあります。
alist = [["a","b","c"],["d","e","f"]]
["a","b","c"]を取得したい場合は以下です。
alist.get(0);
ではarrayList["d","e","f"]の"d"を取得したい場合はどのように書けばいいのでしょうか?
alist.get(0).get(0)とは書けませんでした。 ジェネリクスList<List<T>>を使ってないんじゃないの?
getしたのがObject型だとgetメソッドがないことになる
ジェネリクスかキャストしてみて >>901
ああ確かに宣言時に指定してなかったかもしれません
助かりました。ありがとうございます >>900
alist.get(1).get(0)
これできない?
できないとすると本当に2重の ArrayList になっているのかだな。
もし一番内側のリストが ArrayList ではなく実は配列というのであれば alist.get(1)[0] になる。 むう。>>902と>>903の時間が逆転している・・・ ありがとうございます。無事躓いた箇所をパスできました。
結論から言ってジェネリクスのしていがされておりませんでした。
ただ字分が不勉強なこともあり、get(0)で取り出したものをnew listに入れてそこからgetすることとしました。
喫緊の課題だったとはいえ、マルチに関わらず回答寄せて下さりありがとうございます。
今後はマルチにならぬよう気をつけます。
>>903
回答下さりありがとうございます。また申し訳ないです。 初歩的な質問ですみません。
ある文字列を半角の?マークで分割したいのですが、
splitメソッドに?を渡そうとするとエラーが出ます。
バックスラッシュでエスケープを試みても同じです。
半角の?を文字列として、メソッドに渡す方法はありませんでしょうか? ありがとうございますm(__)m
バックスラッシュ2つでいけました! Javaでオンラインゲーム作りたいんですが
できますか? 世界で最も売れたマインクラフトも作れるよ!
やったね! >>910
大槻 有一郎
「15歳からはじめるJavaオンラインゲームプログラミング教室」
ISBN-10 4899772319
ISBN-13 978-4899772316 ぽくの構想のオンラインゲームは
0.1秒おきに通信が成功しないとならぬのです
でもそんな無料高速サーバーどこにあるのか全然わかりません
ググっても見つかりませんでした
だれか教えてください >>916
localhostっていうサーバーが超高速らしいです
1ms未満で応答返ってきます! 127.0.0.1
というサイトもものすごく応答が早いよ! 127.0.0.1 は私が予約しているから勝手に使わないで! 15歳以下だったらニオイなんて気にして無かったかも ビーンズの香ばしいニオイはジャコウネコのトムのもの BufferedImage[] imgs
ImageIO.write(imgs[i], "jpeg", new File(i+".jpg"));にファイルを書き出したところ、プロジェクトファイルの直下にファイルが書き出されます。
ファイルの書き出し先は指定できるのでしょうか? new Fileにファイル名だけじゃなくて出力したいパスも指定すれば指定したとこに出力できる Javaから始める人は
プログラマに向いてないって本当ですか? 世の中にはVBプログラマもいるが、例えばホリエモン なぜ
int a[]=new int[10];
だといけないのでしょうか?
int[] a=new int[10];
にしろと命令されます 上はint型のa[]って名前の変数にint型配列を代入しようとしてるからだめ
下はint型配列のaって名前の変数にint型配列を代入してるから正しい
さすがに変数宣言の書き方はググってたどり着けるようにしないとこの先厳しいと思うよ int a[]=new int[10];
これは古い書き方
C言語から移行しやすいようにしたんだろうね
int[] a=new int[10];
これで統一したほうがわかりやすいからだと思う >>935
どっちも通るのな...知ったかしちゃって恥ずいわー
Cの名残だったりするんかね 「型の情報 変数名」という語順の原則を破る例外的な文法規則だからね
C言語をデザインした人が当時はどっちの書き方もアリだろと感じたけど、やっぱ新規のソースではイレギュラーは少ないほうがいいよ ポインタのある言語の頃は変数の前や後ろに&だの*だのがべたべたくっついてたから
int a[] みたいな宣言も今ほどキモくなかったんだと思う 知ったかする奴ほど光の速さでレスつけるのはやっぱり
無知無能な奴ほど周りから認められようと必死で自己顕示欲が強いからなんだろうね 人格攻撃するだけの卑屈な振る舞いが善意の回答より勝ることがあるとは思えん
鶏口となるも牛後となるなかれと思うよ Spring Boot, h2, @Entityでテーブルを自動生成しようとしているのですが
失敗します。このバージョンの組み合わせでは動かないという情報は
どこかないでしょうか? 久し振りに趣味プログラミング再開してみたら何だこれ。えらいこと面倒くさい手順が必要なのな。 GUIをやめてスクリプトで動かすようにすれば
面倒くさい手順が簡単になるよ レス数が950を超えています。1000を超えると書き込みができなくなります。