プログラミング言語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質問・相談スレッド180★★
https://mevius.5ch.net/test/read.cgi/tech/1492780397/
★★Java質問・相談スレッド181★★
■ このスレッドは過去ログ倉庫に格納されています
2018/02/10(土) 17:49:40.56ID:l9ZzjyKP
784デフォルトの名無しさん
2018/10/08(月) 12:20:29.15ID:tKqgyITq >>783
別スレッドによって a が null にされてしまう可能性はあるな。だいたいの場合はそういうスレッドがないか、
またはあると分かっているならロックしてからアクセスするように作るから問題にならないんだろうけど。
別スレッドによって a が null にされてしまう可能性はあるな。だいたいの場合はそういうスレッドがないか、
またはあると分かっているならロックしてからアクセスするように作るから問題にならないんだろうけど。
785デフォルトの名無しさん
2018/10/08(月) 12:26:37.42ID:QRotEnod ん?こういう理解だけど。参照が渡されてるだけだから
別スレッドが参照を破棄しても関係ないぞ
func1(Object a){
if(a == null)
return;
a.get();//絶対にNPEが起きないマルチスレッド無関係
}
func2(Object a){
a = null;
}
別スレッドが参照を破棄しても関係ないぞ
func1(Object a){
if(a == null)
return;
a.get();//絶対にNPEが起きないマルチスレッド無関係
}
func2(Object a){
a = null;
}
786デフォルトの名無しさん
2018/10/08(月) 12:29:19.11ID:r0dViXxq そもそも式の中で副作用のある関数を呼び出すのは危険
&&や||は評価順序が決まってるからまだマシな方でそれ以外の演算子だと評価順序もどうなるかわからんし
&&や||は評価順序が決まってるからまだマシな方でそれ以外の演算子だと評価順序もどうなるかわからんし
787デフォルトの名無しさん
2018/10/08(月) 12:32:49.91ID:QRotEnod でも副作用がある関数はset,write,update,createとか大体それっぽい名前ついてるし
分かるでしょ?
というか情報処理はCRUDだからcreate,update,delete的な名前が必ずついてる
副作用を広くとらえればログ出力も副作用だけど、そういうのは問題無い
getは副作用無しか問題無い副作用のみ、CRUDのRに相当するものだから
だからコーディング規約を作るなら、CRUDを意識させるようなものであるべきで、
真理式でメソッドを呼び出すなとかいうわけわからん規約を作るべきではない
CRUDのうちRのみ呼び出していい、とすべき
分かるでしょ?
というか情報処理はCRUDだからcreate,update,delete的な名前が必ずついてる
副作用を広くとらえればログ出力も副作用だけど、そういうのは問題無い
getは副作用無しか問題無い副作用のみ、CRUDのRに相当するものだから
だからコーディング規約を作るなら、CRUDを意識させるようなものであるべきで、
真理式でメソッドを呼び出すなとかいうわけわからん規約を作るべきではない
CRUDのうちRのみ呼び出していい、とすべき
788デフォルトの名無しさん
2018/10/08(月) 12:37:02.60ID:QRotEnod ぶっちゃけCUDでも呼び出していい
結局、意味を捉えて間違えないように書けということでしかない
コーディング規約をどういじくってもそこから逃げれるわけじゃない
結局、意味を捉えて間違えないように書けということでしかない
コーディング規約をどういじくってもそこから逃げれるわけじゃない
789デフォルトの名無しさん
2018/10/08(月) 12:43:00.19ID:wqzMNkqt if (a == 0 || b++ < 1) {
}
こういう書き方をすると一見bが常にインクリメントされるように誤解されやすいからやめとけよって言ってるだけでしょ。
}
こういう書き方をすると一見bが常にインクリメントされるように誤解されやすいからやめとけよって言ってるだけでしょ。
790デフォルトの名無しさん
2018/10/08(月) 12:48:22.90ID:QRotEnod 真理式に複数の演算があって、かつ一部に副作用があるとまずい、ってことか
791デフォルトの名無しさん
2018/10/08(月) 13:19:09.60ID:H/mp1NsO 副作用・副作用完了点
評価順序・マクロ
MISRA-C でも、こういう間違いやすい所の、ルールは厳しい
評価順序・マクロ
MISRA-C でも、こういう間違いやすい所の、ルールは厳しい
792デフォルトの名無しさん
2018/10/08(月) 14:53:07.06ID:tKqgyITq >>785
それならないな。
残るは get() して 1 以下なのを検査した直後に別スレッドによって a の状態が変化して get() が返す値が変わるとかかな。
(そんなの想定の範囲内なら問題ないが)。
それならないな。
残るは get() して 1 以下なのを検査した直後に別スレッドによって a の状態が変化して get() が返す値が変わるとかかな。
(そんなの想定の範囲内なら問題ないが)。
793デフォルトの名無しさん
2018/10/10(水) 01:35:05.39ID:gneY7b7h adopt openjdkのjdk11リリースされたじゃん。
ttps://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot
LTSだぞ。
ttps://adoptopenjdk.net/support.html?variant=openjdk11&jvmVariant=hotspot
ttps://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot
LTSだぞ。
ttps://adoptopenjdk.net/support.html?variant=openjdk11&jvmVariant=hotspot
794デフォルトの名無しさん
2018/10/12(金) 06:07:22.65ID:LkXNeCMg Java 11のJREって無いんですか?
795デフォルトの名無しさん
2018/10/12(金) 08:34:35.39ID:kCbZI2NA クライアントJREは廃止された
今現在、要JREとして世に出ているアプリをエンドユーザーが実行する公式な方法は存在しない(自己責任で開発環境を入れるしかない)
今後のクライアントサイドJavaアプリの唯一の配布方法は、JDKに含まれるコマンドラインツールを使用して
プラットフォーム毎に実行環境とアプリを同梱した実行可能なパッケージを作ることである
クライアントサイドに関しては、もはやJavaはバイナリ互換ではない
OracleはクライアントサイドJavaを段階的に廃止しようとしており、新規には決して使ってはならない
今現在、要JREとして世に出ているアプリをエンドユーザーが実行する公式な方法は存在しない(自己責任で開発環境を入れるしかない)
今後のクライアントサイドJavaアプリの唯一の配布方法は、JDKに含まれるコマンドラインツールを使用して
プラットフォーム毎に実行環境とアプリを同梱した実行可能なパッケージを作ることである
クライアントサイドに関しては、もはやJavaはバイナリ互換ではない
OracleはクライアントサイドJavaを段階的に廃止しようとしており、新規には決して使ってはならない
796デフォルトの名無しさん
2018/10/12(金) 09:00:21.36ID:U0bHLz7N >>793
当てにならんよこんなの
こいつらはただのビルド屋で、自分達でソースに手を入れる体制はない
次のバージョンのOpenJDKがリリースされた後もOpenJDK公式リポジトリの旧バージョンのソースに対してLTS向けのパッチが提供されるかどうかは、
オラクル様の温情次第
当てにならんよこんなの
こいつらはただのビルド屋で、自分達でソースに手を入れる体制はない
次のバージョンのOpenJDKがリリースされた後もOpenJDK公式リポジトリの旧バージョンのソースに対してLTS向けのパッチが提供されるかどうかは、
オラクル様の温情次第
797デフォルトの名無しさん
2018/10/12(金) 20:45:34.37ID:LkXNeCMg >>795
サンクス
サンクス
798デフォルトの名無しさん
2018/10/22(月) 16:04:20.83ID:1yTQ4g+U 何時の間にかvar使えるようになってたな
799デフォルトの名無しさん
2018/10/22(月) 23:21:36.65ID:KYkLOyp1 いないいないvar
800デフォルトの名無しさん
2018/10/22(月) 23:32:16.95ID:sd28W5TQ Javaに型推論が無いことをディスられると、意識高い系Javaerさん達は
ローカル変数の型もinterfaceにするべきだからそんなもん要らんと上から目線で反論してたけど
梯子外されちゃって哀れだな
ローカル変数の型もinterfaceにするべきだからそんなもん要らんと上から目線で反論してたけど
梯子外されちゃって哀れだな
801デフォルトの名無しさん
2018/10/23(火) 03:01:58.72ID:IDcT8U1C これ2じゃなくて1が出力される。何で?
@Test
public void mapObjTest() {
Map<Long, Integer> m = new HashMap<>();
Long key = 1L;
m.put(key, 1);
Integer val = m.get(key);
val++;
System.out.println(m.get(key));
}
@Test
public void mapObjTest() {
Map<Long, Integer> m = new HashMap<>();
Long key = 1L;
m.put(key, 1);
Integer val = m.get(key);
val++;
System.out.println(m.get(key));
}
802デフォルトの名無しさん
2018/10/23(火) 03:05:36.61ID:IDcT8U1C 悪く言われるけどクライアントサイドについてJRE同梱は良いんじゃない?
もはやファイルサイズは小さな問題だし、JREのバージョン違いでの誤作動を減らせる。
クライアントサイドJavaがそれで悪くなったと思わないけどな、俺は
JavaFXが外されたのは悪くなったと思うけど、でもどうせ同梱する作業するときに入れるんだし
妥当な変化じゃないの?
もはやファイルサイズは小さな問題だし、JREのバージョン違いでの誤作動を減らせる。
クライアントサイドJavaがそれで悪くなったと思わないけどな、俺は
JavaFXが外されたのは悪くなったと思うけど、でもどうせ同梱する作業するときに入れるんだし
妥当な変化じゃないの?
803デフォルトの名無しさん
2018/10/23(火) 05:51:34.87ID:6lDUuVuA >>801
val++は↓これと同じ
val = val + 1
変数valに値を代入してる
↓こう書けば値は2になる、value.valueはドット演算子を使ってオブジェクトの状態を変えてる
public class Main {
public static void main(String[] args) {
Map<Integer, Value> map = new HashMap<>();
map.put(1, new Value(1));
Value value = map.get(1);
value.value++;
System.out.println(value.value);
}
}
class Value {
int value;
Value(int value) {
this.value = value;
}
}
変数に対する代入と
オブジェクトの状態を変えることとは
異なる操作なんやで
val++は↓これと同じ
val = val + 1
変数valに値を代入してる
↓こう書けば値は2になる、value.valueはドット演算子を使ってオブジェクトの状態を変えてる
public class Main {
public static void main(String[] args) {
Map<Integer, Value> map = new HashMap<>();
map.put(1, new Value(1));
Value value = map.get(1);
value.value++;
System.out.println(value.value);
}
}
class Value {
int value;
Value(int value) {
this.value = value;
}
}
変数に対する代入と
オブジェクトの状態を変えることとは
異なる操作なんやで
804デフォルトの名無しさん
2018/10/23(火) 07:00:55.65ID:6lDUuVuA 変数への操作か、オブジェクトへの操作かを区別する必要があって
それぞれの違いはこんな感じ
https://light.dotup.org/uploda/light.dotup.org554015.png
それぞれの違いはこんな感じ
https://light.dotup.org/uploda/light.dotup.org554015.png
805デフォルトの名無しさん
2018/10/23(火) 07:55:16.19ID:ukFWTvzy806デフォルトの名無しさん
2018/10/23(火) 08:11:13.69ID:ukFWTvzy 要するにval++は↓の省略系
val = new Integer(val.intValue()+1)
val = new Integer(val.intValue()+1)
807デフォルトの名無しさん
2018/10/23(火) 09:23:24.20ID:cDc5Fd7g808デフォルトの名無しさん
2018/10/23(火) 09:42:44.32ID:AS/7ikV7 すごーい
809デフォルトの名無しさん
2018/10/23(火) 23:29:12.49ID:baThXOF4 >>802
動的リンクしまくってるからFullJRE前提だわ。
動的リンクしまくってるからFullJRE前提だわ。
810デフォルトの名無しさん
2018/10/25(木) 05:33:58.31ID:KXlarInO Object#equals()
public boolean equals(Object obj) {
return (this == obj);
}
なんでreturn this == obj;じゃなく括弧で囲ってるの?
public boolean equals(Object obj) {
return (this == obj);
}
なんでreturn this == obj;じゃなく括弧で囲ってるの?
811デフォルトの名無しさん
2018/10/25(木) 09:55:01.19ID:hw/Q19JU 囲ってみたい気分だったのだろう
812デフォルトの名無しさん
2018/10/25(木) 11:06:47.39ID:jwOWZyFv return文に記述された式が複雑なときは括弧で括ったほうがmore readableだから推奨してる人のほうが多いように思うけど、
this == objが複雑かどうかは微妙だね。
でも自分なら括弧つけるかな。
理由は、括弧でくくることで、等式が値を返す数式として使われていることを明示できるから。
this == objが複雑かどうかは微妙だね。
でも自分なら括弧つけるかな。
理由は、括弧でくくることで、等式が値を返す数式として使われていることを明示できるから。
813デフォルトの名無しさん
2018/10/25(木) 11:34:47.74ID:r31i+JfI Javaの最黎期に書かれたものだろうから、コードスタイルが今の基準からすれば変でもおかしくない
今では一般的には括弧はつけないのが主流だね
今では一般的には括弧はつけないのが主流だね
814デフォルトの名無しさん
2018/10/25(木) 12:09:47.24ID:VLidr5ui 最近はアローで書いちゃうから一行だしな
815デフォルトの名無しさん
2018/10/25(木) 14:00:36.81ID:oNBD1gf9 計算がよくわからん時は、まず括弧で囲えって、
今でも教える人がいるからな
今でも教える人がいるからな
816デフォルトの名無しさん
2018/10/25(木) 14:21:09.91ID:6wYT/HJT かっこいい、かっこわるい?
817デフォルトの名無しさん
2018/10/25(木) 18:46:51.45ID:zmVgc+jl818デフォルトの名無しさん
2018/10/27(土) 15:01:56.02ID:1x6RXWmG javaでaccessdbと接続するようなソフト作ってみたいんですが
フレームワークって必要ですか
ちょっとフレームワーク自体よくわかってないです。
規模は社内で5人くらいで使用します。
フレームワークって必要ですか
ちょっとフレームワーク自体よくわかってないです。
規模は社内で5人くらいで使用します。
819デフォルトの名無しさん
2018/10/27(土) 19:11:03.52ID:RbshV9yz 検索すれば出てくるけど
ハマることが多そうだからオススメしない
Javaが要件なのかAccessが要件なのかわからんが
ハマることが多そうだからオススメしない
Javaが要件なのかAccessが要件なのかわからんが
820デフォルトの名無しさん
2018/10/27(土) 19:15:14.94ID:LS+3DLFQ821デフォルトの名無しさん
2018/10/27(土) 19:16:29.43ID:ZlRq8doU Ruby on Rails, Node.js などでは、開発環境では、SQLite を使うけど
822デフォルトの名無しさん
2018/10/27(土) 22:29:57.54ID:229rJcCX823デフォルトの名無しさん
2018/10/28(日) 03:09:10.51ID:7tRDHbkL >>822
バイナリ互換じゃなくなるけどソースコード互換ではあるので・・・
JavaでGUIアプリ作ってネットで配布する場合、エンドユーザーの環境に依存するの辛いでしょ
むしろJRE同梱したい、と思うのが普通だよ
JRE同梱によるファイルサイズ増加はもはや問題にならないし
どうせJRE同梱作業するなら、その時にJavaFX入れれば良いので、分離されたのも妥当な気がするし
むしろクライアントサイドで進歩してると言っても良いのでは
バイナリ互換じゃなくなるけどソースコード互換ではあるので・・・
JavaでGUIアプリ作ってネットで配布する場合、エンドユーザーの環境に依存するの辛いでしょ
むしろJRE同梱したい、と思うのが普通だよ
JRE同梱によるファイルサイズ増加はもはや問題にならないし
どうせJRE同梱作業するなら、その時にJavaFX入れれば良いので、分離されたのも妥当な気がするし
むしろクライアントサイドで進歩してると言っても良いのでは
824デフォルトの名無しさん
2018/10/28(日) 03:59:58.74ID:WcIuuSyz >JavaでGUIアプリ作ってネットで配布する場合、エンドユーザーの環境に依存するの辛いでしょ
JRE同梱だと回避できて、JARだけだとダメな問題ってどういうのがあるん?
実際にクライアントの環境が異なってたらどうやって提供しようが辛さは一緒におもえる
だいたいJRE同梱なんかされたら何仕込まれてもわからん
サンドボックスのしっかりした仕組みがあるわけじゃなし
そもそもWindowsとかOS側が信用できない
共通のJavaだから信頼感あったのに
JRE同梱だと回避できて、JARだけだとダメな問題ってどういうのがあるん?
実際にクライアントの環境が異なってたらどうやって提供しようが辛さは一緒におもえる
だいたいJRE同梱なんかされたら何仕込まれてもわからん
サンドボックスのしっかりした仕組みがあるわけじゃなし
そもそもWindowsとかOS側が信用できない
共通のJavaだから信頼感あったのに
825デフォルトの名無しさん
2018/10/28(日) 04:08:51.40ID:z9u8vCUJ 今どき.NETですらランタイム同梱する流れだからな
826デフォルトの名無しさん
2018/10/28(日) 04:22:29.53ID:WcIuuSyz MSはユーザーの個人情報盗みたい側だし
827デフォルトの名無しさん
2018/10/28(日) 04:26:41.29ID:7tRDHbkL >>824
何言ってるか良く分からんが、JRE同梱すればJREのバージョン違いによる問題が無くなるだろう。
いちいちJREをインストールしてもらう手間も無くなる。
例えば一部のJREはJavaFXを同梱しているが、一部はそうではない。
何仕込まれても、ってのは良く分からんが
スタンドアロンアプリでもセキュリティマネージャーは動くはず
何言ってるか良く分からんが、JRE同梱すればJREのバージョン違いによる問題が無くなるだろう。
いちいちJREをインストールしてもらう手間も無くなる。
例えば一部のJREはJavaFXを同梱しているが、一部はそうではない。
何仕込まれても、ってのは良く分からんが
スタンドアロンアプリでもセキュリティマネージャーは動くはず
828デフォルトの名無しさん
2018/10/28(日) 04:32:23.62ID:7tRDHbkL 確かにこれまでと比べると、オラクルのサイトからJRE落としてそれで動かしてたのに比べると
アプリ毎にJRE同梱されちゃうとおかしなネイティブ実行ファイルが同梱されてないか、という問題はある
しかし同梱されたプラットフォーム固有の実行ファイルはハッシュ値とかで適切なファイルかを照合できるはず
あとそもそもバイトコード部分でも相当な処理が可能だから、さほどセキュリティリスクが変わると思わない
ネットからプログラムを落とすなら、オープンソースか信頼できる大御所か
これまでと変わらないのでは
アプリ毎にJRE同梱されちゃうとおかしなネイティブ実行ファイルが同梱されてないか、という問題はある
しかし同梱されたプラットフォーム固有の実行ファイルはハッシュ値とかで適切なファイルかを照合できるはず
あとそもそもバイトコード部分でも相当な処理が可能だから、さほどセキュリティリスクが変わると思わない
ネットからプログラムを落とすなら、オープンソースか信頼できる大御所か
これまでと変わらないのでは
829デフォルトの名無しさん
2018/10/28(日) 04:34:29.37ID:z9u8vCUJ >>826
ランタイム同梱の意味わかってる?
ランタイム同梱の意味わかってる?
830デフォルトの名無しさん
2018/10/28(日) 04:36:35.55ID:WcIuuSyz 問題はJREのバージョンか
たしかに多少の問題はあるが
JRE同梱必須にしたらJavaの目指していた未来と可能性そのものを切り捨てることになる
そうできるってのとそうしなきゃいけないってのはえらい違い
たしかに多少の問題はあるが
JRE同梱必須にしたらJavaの目指していた未来と可能性そのものを切り捨てることになる
そうできるってのとそうしなきゃいけないってのはえらい違い
831デフォルトの名無しさん
2018/10/28(日) 04:42:15.05ID:7tRDHbkL JREを同梱しないと、10年経ったら動かなくなってると思う
クライアントサイドはJRE同梱で作れと強制する事は、そんな悪い事じゃないと思う
そうしないとJavaがバージョンアップしづらい問題もあるから、オラクルはそうしたいんだろう
クライアントサイドはJRE同梱で作れと強制する事は、そんな悪い事じゃないと思う
そうしないとJavaがバージョンアップしづらい問題もあるから、オラクルはそうしたいんだろう
832デフォルトの名無しさん
2018/10/28(日) 04:46:39.09ID:vBzuIBdi 元々Write once,Test anywhere
って失望されてたじゃ無いか。。。
HTML5も同じだけど、理想と現実は遥かに遠い隔たりがある。
って失望されてたじゃ無いか。。。
HTML5も同じだけど、理想と現実は遥かに遠い隔たりがある。
833デフォルトの名無しさん
2018/10/28(日) 04:48:23.37ID:GS4HIDpq スタティックリンクの肥大した実行ファイルと一緒だよね
Write Onceで全プラットフォームで動いたら開発者としては理想じゃないかな
Write Onceで全プラットフォームで動いたら開発者としては理想じゃないかな
834デフォルトの名無しさん
2018/10/28(日) 04:49:04.83ID:7tRDHbkL オラクルはJavaを高速バージョンアップしたいみたいな事も言ってるが、
一連の話は整合性がある
サーバーサイドはエンジニアが管理しててJRE固定できる、
クライアントサイドはJRE同梱。
現状だとJavaから古いAPIを削除したら多くのアプリが動かなくなるから、
移行期間を作ってそのようなアプリが減るのを待つ。
そうしないとJavaに未来が無いという判断は、理解できなくない。
一連の話は整合性がある
サーバーサイドはエンジニアが管理しててJRE固定できる、
クライアントサイドはJRE同梱。
現状だとJavaから古いAPIを削除したら多くのアプリが動かなくなるから、
移行期間を作ってそのようなアプリが減るのを待つ。
そうしないとJavaに未来が無いという判断は、理解できなくない。
835デフォルトの名無しさん
2018/10/28(日) 05:01:48.54ID:WcIuuSyz じぶんとこのOracleDBは枯れまくってても平気なくせに
836デフォルトの名無しさん
2018/10/28(日) 05:47:19.26ID:D9Gt7gmT 改変されたJREを同梱されたら終わりではないか?
837デフォルトの名無しさん
2018/10/28(日) 05:51:56.29ID:7tRDHbkL だから、同梱されたファイルのハッシュ値調べればわかるし、
アンチウイルスだって有名な実行ファイルについてハッシュ値を知識として持っておくべき。
オープンソースは誰かが検証すべき。
で、もともとバイトコード部分でも相当な事ができるからセキュリティリスクは変化してない。
アンチウイルスだって有名な実行ファイルについてハッシュ値を知識として持っておくべき。
オープンソースは誰かが検証すべき。
で、もともとバイトコード部分でも相当な事ができるからセキュリティリスクは変化してない。
838デフォルトの名無しさん
2018/10/28(日) 14:47:49.66ID:Ii5bdv+P クラス変数にもvar使わせてほしいよな
無名クラスにリフレクションで値を代入するフレームワークとかでてきそうだし
class Hoge {
public var xyz = new Object() { int x, y, x };
}
無名クラスにリフレクションで値を代入するフレームワークとかでてきそうだし
class Hoge {
public var xyz = new Object() { int x, y, x };
}
839デフォルトの名無しさん
2018/10/28(日) 23:50:32.90ID:vn58j50+ それをやると型を特定するために延々先を辿らなきゃいけなくなるんだ…
840デフォルトの名無しさん
2018/10/28(日) 23:52:24.19ID:qcVVu7B5 Class#forNameで動的リンクするときjlinkとかは依存するクラス検出できないから
結局手動で全部依存関係調べるかfull jre使うかの二択になる。
>>838
互換性が保証できなくなるからやらないだろ。
実行時の型と推論された型は違うから。
結局手動で全部依存関係調べるかfull jre使うかの二択になる。
>>838
互換性が保証できなくなるからやらないだろ。
実行時の型と推論された型は違うから。
841デフォルトの名無しさん
2018/10/29(月) 00:01:40.82ID:k1+zlMbU というかあれだぞ。
javapackagerなくなったからjava11ではjre同梱したパッケージ作れないし、
なくなったのはpublic jreだけでjreのビルド自体はadopt openjdkがやってるからjre自体はあるぞ。
javapackagerなくなったからjava11ではjre同梱したパッケージ作れないし、
なくなったのはpublic jreだけでjreのビルド自体はadopt openjdkがやってるからjre自体はあるぞ。
842デフォルトの名無しさん
2018/10/29(月) 00:06:53.79ID:RWf1bRTo >>838
コンパイラの仕組み上困難
Javaコンパイラはまず、メンバのシグネチャだけを解析してクラスごとにメンバのお品書きを作る
そして、それが一通り終わった後に各メソッド本体やフィールド代入元の式を解析する
ところがフィールドの型にvarを許してしまうと、お品書きを作る段階でフィールド代入元の式を解析しなきゃいけなくなる
それによりコンパイラのパスが増えてしまうから、コンパイル速度が大きく低下する
コンパイラの仕組み上困難
Javaコンパイラはまず、メンバのシグネチャだけを解析してクラスごとにメンバのお品書きを作る
そして、それが一通り終わった後に各メソッド本体やフィールド代入元の式を解析する
ところがフィールドの型にvarを許してしまうと、お品書きを作る段階でフィールド代入元の式を解析しなきゃいけなくなる
それによりコンパイラのパスが増えてしまうから、コンパイル速度が大きく低下する
843デフォルトの名無しさん
2018/10/29(月) 01:24:28.42ID:Cn2rCt1V844デフォルトの名無しさん
2018/10/29(月) 02:54:18.59ID:doCXynSY >>841
Java 11でクライアントサイドはどういう扱いになってるの?
Java 11でクライアントサイドはどういう扱いになってるの?
845デフォルトの名無しさん
2018/10/29(月) 03:02:24.77ID:doCXynSY 新しいパッケージングツールの要件はJavaFX未対応とされている
http://openjdk.java.net/jeps/343
JavaFX由来のパッケージングツールが削除された
じゃあ、JavaFXアプリをエンドユーザーに配布したい場合、どうするの?
現在見つかる情報は、非JavaFXの自己完結型パッケージャ、
JavaFXのビルド方法だけで、JavaFXの自己完結型パッケージャが行方不明なんだけど
http://openjdk.java.net/jeps/343
JavaFX由来のパッケージングツールが削除された
じゃあ、JavaFXアプリをエンドユーザーに配布したい場合、どうするの?
現在見つかる情報は、非JavaFXの自己完結型パッケージャ、
JavaFXのビルド方法だけで、JavaFXの自己完結型パッケージャが行方不明なんだけど
846デフォルトの名無しさん
2018/10/29(月) 04:02:15.84ID:doCXynSY847デフォルトの名無しさん
2018/10/29(月) 22:22:22.37ID:Cn2rCt1V アウト、セーフ、よよいのよい
848デフォルトの名無しさん
2018/10/29(月) 23:23:48.16ID:KWB0XUD6849デフォルトの名無しさん
2018/10/30(火) 14:22:42.63ID:ySliw7Bj public synchronized void method1(){}
こういうメソッドレベルでsynchronizedした場合、
synchronized(this){}ということですか?
つまり他のところでsynchronized(this)が書かれていたら、どちらかが待機になるんでしょうか
こういうメソッドレベルでsynchronizedした場合、
synchronized(this){}ということですか?
つまり他のところでsynchronized(this)が書かれていたら、どちらかが待機になるんでしょうか
850デフォルトの名無しさん
2018/10/30(火) 15:22:20.46ID:E+8/TrgC >>849
その通り
thisをロックするのはパフォーマンスの低下やデッドロックの原因になるため、現代では一般には悪手とされている
synchronizedがデフォルトでthisをロックするのはJavaがまだオモチャでカジュアルに排他制御してた時代の名残で、
ちゃんと作るなら排他制御には private メンバを使って外に漏らさないようにした方が安全
その通り
thisをロックするのはパフォーマンスの低下やデッドロックの原因になるため、現代では一般には悪手とされている
synchronizedがデフォルトでthisをロックするのはJavaがまだオモチャでカジュアルに排他制御してた時代の名残で、
ちゃんと作るなら排他制御には private メンバを使って外に漏らさないようにした方が安全
851デフォルトの名無しさん
2018/10/31(水) 12:34:18.73ID:6PFXXFSS thisをロックするのとロック専用オブジェクトをロックするのは
性能の違いがあるんですか?
性能の違いがあるんですか?
852デフォルトの名無しさん
2018/10/31(水) 14:41:22.75ID:3SYFbLW8 >>851
thisはクラス外からも当然見えているわけで、他のクラスも同じオブジェクトを同時にロックしている可能性がある
どえせ内部的に同期してるんなら他のクラスが同時にアクセスしてくることは何の問題もないはずで、これは完全に無駄なブロックだ
クラス外から見えるオブジェクトをロックするのはパフォーマンスだけではなくてデッドロックの可能性を高める非常に悪い行為
thisはクラス外からも当然見えているわけで、他のクラスも同じオブジェクトを同時にロックしている可能性がある
どえせ内部的に同期してるんなら他のクラスが同時にアクセスしてくることは何の問題もないはずで、これは完全に無駄なブロックだ
クラス外から見えるオブジェクトをロックするのはパフォーマンスだけではなくてデッドロックの可能性を高める非常に悪い行為
853デフォルトの名無しさん
2018/10/31(水) 15:22:21.60ID:6PFXXFSS デッドロックの可能性は分かるんですが、
その性能の劣化というのは、クラス外でたまたまロックに使われていた場合、
待機時間が生じるから、ということですか?
待機時間以外に構造的に複雑なオブジェクトをロックすることでの性能劣化はありえますか?
その性能の劣化というのは、クラス外でたまたまロックに使われていた場合、
待機時間が生じるから、ということですか?
待機時間以外に構造的に複雑なオブジェクトをロックすることでの性能劣化はありえますか?
854デフォルトの名無しさん
2018/10/31(水) 15:45:06.31ID:3SYFbLW8855デフォルトの名無しさん
2018/10/31(水) 15:58:04.06ID:lmDzWSZe 意味不明なエラーで苦しめw
856デフォルトの名無しさん
2018/10/31(水) 16:17:19.41ID:SePuugIe ロック可能なのは全部ロックしたら苦しんだ黒歴史・・・
857デフォルトの名無しさん
2018/10/31(水) 17:20:43.08ID:6PFXXFSS 専用オブジェクトでロックしても結局プログラマーが入念にチェックする以外
無い気がするんですが合ってますか?
よく言われてるようなロック順序云々では解決しない気がするんですが
無い気がするんですが合ってますか?
よく言われてるようなロック順序云々では解決しない気がするんですが
858デフォルトの名無しさん
2018/10/31(水) 17:23:06.92ID:xpjrbgPR Javaはいつかなくなるんですか
859デフォルトの名無しさん
2018/10/31(水) 19:25:31.36ID:ZwMW2kAu いつか
860デフォルトの名無しさん
2018/10/31(水) 19:27:08.55ID:iY3LkiS1 きっとどこかで生き残る
861デフォルトの名無しさん
2018/10/31(水) 19:30:32.81ID:umCB7ism 俺のディスクの上で生き残る
862デフォルトの名無しさん
2018/10/31(水) 19:48:34.38ID:umCB7ism デッドロックと言えば、サーバをまたいだロックを掛けててデッドロックになった時は原因究明が大変だったなあ。
863デフォルトの名無しさん
2018/10/31(水) 20:18:06.23ID:YzLC1QbG864デフォルトの名無しさん
2018/10/31(水) 21:04:23.41ID:6PFXXFSS >>863
クラスA#method1() method3呼び出し
クラスA#method2()
クラスB#method3() method2呼び出し
この状況でmethod1,3を異なるスレッドが呼び出したらデッドロックになりうるのでは?
クラスA,Bがそれぞれ専用のロックオブジェクトを持っていて
method1,2,3の内部でロックオブジェクトでロックしているとして
クラスA#method1() method3呼び出し
クラスA#method2()
クラスB#method3() method2呼び出し
この状況でmethod1,3を異なるスレッドが呼び出したらデッドロックになりうるのでは?
クラスA,Bがそれぞれ専用のロックオブジェクトを持っていて
method1,2,3の内部でロックオブジェクトでロックしているとして
865デフォルトの名無しさん
2018/10/31(水) 21:13:55.51ID:umCB7ism そういやJavaVMって実行時にデッドロックを見つけ出す機能はないのかな?
OSのファイルロックだと見つけてくれたりするよな。NFS絡むと無理だけど。
(あ、でも2プロセスでロック掛け合った場合だけかな?)
OSのファイルロックだと見つけてくれたりするよな。NFS絡むと無理だけど。
(あ、でも2プロセスでロック掛け合った場合だけかな?)
866デフォルトの名無しさん
2018/10/31(水) 21:30:17.03ID:6PFXXFSS デッドロックを通知する仕組みはあるようです。JConsole
安全なsynchronizedというものは、そのメソッドがどこから呼び出されているか、
どれを呼び出しているかというような依存関係で決まって、
単純な記述方法で安全性を確保する事はできないのではと思いました。
どのオブジェクトをロックしてもこの問題は残ります。
https://www.jpcert.or.jp/java-rules/lck07-j.html
これなんかもそうですが、ロック順序だけで解決できると考えてしまっていますが、
synchronizedブロック内のロジックが他のメソッドを呼び出している場合、
まだデッドロックが発生する可能性があると思います。
派生していくメソッド呼び出しのどこかにsynchronizedブロックがあれば。
もちろん、多くの場合、プログラムは様々なメソッドを呼び出します。
>>857はこの理解で正しいかという意味です
安全なsynchronizedというものは、そのメソッドがどこから呼び出されているか、
どれを呼び出しているかというような依存関係で決まって、
単純な記述方法で安全性を確保する事はできないのではと思いました。
どのオブジェクトをロックしてもこの問題は残ります。
https://www.jpcert.or.jp/java-rules/lck07-j.html
これなんかもそうですが、ロック順序だけで解決できると考えてしまっていますが、
synchronizedブロック内のロジックが他のメソッドを呼び出している場合、
まだデッドロックが発生する可能性があると思います。
派生していくメソッド呼び出しのどこかにsynchronizedブロックがあれば。
もちろん、多くの場合、プログラムは様々なメソッドを呼び出します。
>>857はこの理解で正しいかという意味です
867デフォルトの名無しさん
2018/10/31(水) 21:40:58.89ID:KdCoWYCo 頑張れぼうやw
868デフォルトの名無しさん
2018/10/31(水) 22:59:47.53ID:GrkkoIKB >>864のケースで仮にAがthisをロックしていたとしたら、B#method3がA#method2を呼ばずともB#method3内で直接または間接的にAのロックを試みただけでデッドロックするだろう。
privateなロックオブジェクトを用いたからといってデッドロックの可能性はゼロにはならないが、thisを使うのに比べれば確実に可能性は低くなる。
あえてリスクの大きくパフォーマンスの低下する方を選択する積極的な理由がない。
privateなロックオブジェクトを用いたからといってデッドロックの可能性はゼロにはならないが、thisを使うのに比べれば確実に可能性は低くなる。
あえてリスクの大きくパフォーマンスの低下する方を選択する積極的な理由がない。
869デフォルトの名無しさん
2018/10/31(水) 23:05:48.35ID:VI6I+9K/ >>866
何を言いたいのか理解できないが、どこの誰がどんなタイミングでロックを取りに来ようとも、ロックの順番さえ守ってれば絶対にデッドロックは起こらないよ。
何を言いたいのか理解できないが、どこの誰がどんなタイミングでロックを取りに来ようとも、ロックの順番さえ守ってれば絶対にデッドロックは起こらないよ。
870デフォルトの名無しさん
2018/10/31(水) 23:43:17.95ID:QZT9zuHU DB などほとんどのアプリでは、デッドロックでタイムアウトする。
絶対に回避できない
ロックする順番は、2プロセスの場合、
プロセスAがX, Y、
プロセスBがY, X
3プロセスの場合、
プロセスAがX, Y、
プロセスBがY, Z、
プロセスCがZ, X
絶対に回避できない
ロックする順番は、2プロセスの場合、
プロセスAがX, Y、
プロセスBがY, X
3プロセスの場合、
プロセスAがX, Y、
プロセスBがY, Z、
プロセスCがZ, X
871デフォルトの名無しさん
2018/11/01(木) 00:20:30.29ID:IO/IeQZr >>870
ロックの順番があべこべなのだからデッドロックするのは当然だろう
ロックの順番があべこべなのだからデッドロックするのは当然だろう
872デフォルトの名無しさん
2018/11/01(木) 06:39:30.81ID:MRwfHAbj873デフォルトの名無しさん
2018/11/01(木) 07:11:11.17ID:m171VN/W874デフォルトの名無しさん
2018/11/01(木) 07:11:48.43ID:m171VN/W >>868
>どのオブジェクトをロックしてもこの問題は残ります。
>どのオブジェクトをロックしてもこの問題は残ります。
875デフォルトの名無しさん
2018/11/01(木) 07:13:39.94ID:m171VN/W 現在している話は、普通のプログラムにおいてロックの順番を守る妥当な方法は存在しないという話です。
synchronizedブロック内でメソッド呼び出しがあった時点でそうなります。
それに対してロックの順番を守ればいいとかthisをロックしろとか言い続けているのは話が分かっていません。
synchronizedブロック内でメソッド呼び出しがあった時点でそうなります。
それに対してロックの順番を守ればいいとかthisをロックしろとか言い続けているのは話が分かっていません。
876デフォルトの名無しさん
2018/11/01(木) 07:17:18.61ID:m171VN/W もう少し分かり易い説明を思いつきました。
ここにある問題は、synchronizedブロックで一旦ロック順序を守ったとしても、
そのブロック内から呼び出されているメソッド及びそこから派生的に呼び出されている全てのメソッドにおいて
synchronziedブロックを使う場合デッドロックが生じうるという問題で、
リファクタリング等において恒久的に懸念が残り続けるという問題です。
これは一時ロック順序を守ったコードを書いても解決しません。
ここにある問題は、synchronizedブロックで一旦ロック順序を守ったとしても、
そのブロック内から呼び出されているメソッド及びそこから派生的に呼び出されている全てのメソッドにおいて
synchronziedブロックを使う場合デッドロックが生じうるという問題で、
リファクタリング等において恒久的に懸念が残り続けるという問題です。
これは一時ロック順序を守ったコードを書いても解決しません。
877デフォルトの名無しさん
2018/11/01(木) 07:20:14.51ID:m171VN/W すみません、経験上凡人レベルの人に話しても理解されなくて、辛い思いをするだけです。
話を終わります。
話を終わります。
878デフォルトの名無しさん
2018/11/01(木) 07:36:25.75ID:PBz6MbCm そうや。情報処理資格のテキストに書いてある。
楽観的とか、ああいうやつ
何も知らない奴が、ギャアギャア言ってるだけ
楽観的とか、ああいうやつ
何も知らない奴が、ギャアギャア言ってるだけ
879デフォルトの名無しさん
2018/11/01(木) 07:55:33.73ID:MRwfHAbj ID:QZT9zuHU = ID:m171VN/W
バカのまま永遠にデッドロックしとけ
バカのまま永遠にデッドロックしとけ
880デフォルトの名無しさん
2018/11/01(木) 08:23:01.98ID:Tn1c1okn 例題とかじゃなくて、どういう時にロックが必要になるか考えて実際にやってみたらいいんじゃないか
そんな複雑なsynchronizedの使い方をしたことはしないだろう
そんな複雑なsynchronizedの使い方をしたことはしないだろう
881デフォルトの名無しさん
2018/11/01(木) 09:20:12.40ID:AYHv18S/ >すみません、経験上凡人レベルの人に話しても理解されなくて、辛い思いをするだけです。
世間は俺のことを分かってくれない(馬鹿のFAQ)w
世間は俺のことを分かってくれない(馬鹿のFAQ)w
882デフォルトの名無しさん
2018/11/01(木) 09:30:29.97ID:KWvf1ga0 ID:m171VN/Wは天才すぎる故に凡人レベルの嫉妬を買ってしまった
883デフォルトの名無しさん
2018/11/01(木) 09:40:00.51ID:mQsUQM4b いや本当。凡人レベルの人には話が通じませんよね。
という具合にみんなして同調しておけばいいのに。
という具合にみんなして同調しておけばいいのに。
■ このスレッドは過去ログ倉庫に格納されています
