Java入門・初心者質問スレ Part.4 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>329
Stringはよく使うクラスだから、特別な表記があるだけ。 >>328
この本で、オブジェクト指向を学ぶ
スッキリわかる Java入門 第2版、2014 >>325
可能性を上げてるだけなのに想定って
君の思う一番のコーディング以外は全てミスってことか? >>334
ダメな例だよ。
変数が変数たる存在を理解してない。 >>335
変数が理解するのかよw
説明できないなら自分ルールにとどめときな >>337
それが日本語だとすると
変数が理解してない
というように解釈できるぞ
正しい文章とは、誤解の余地がない文章だろう
そんなこといいから、そういったコーディングをした時に発生し得る問題を挙げろよ 普通なら「変数が変数たる理由を理解してない」っていうわな
まあ普通の人は各自で補って、それを論ったりはしないだろうけど あー定数やfinalでいいじゃんってことか
finalじゃないから>>324なんだろ
現場でやってれば、そういう問題集解いただけの発想だけでは居られない private staticメソッドを使う意味ってありますか?
オーバーロードしたpublic staticメソッドの受け先以外の使い方で >>341
staticメンバにしかアクセスしないprivateなメソッドはprivate staticで定義するんじゃないの long x
x = Integer.parseInt(str.substring(121,131))
文字列の一部から10桁のlong型の数値を取得しているのだけど
この取り出したい数値が大きい時に、 x=0 になってしまう不具合があるのだけどどうすればいいでしょうか スッキリわかるjava入門を電子書籍で読んでいるのですがラッパーの記述が何処にあるかわからないです
書籍をお持ちの方教えて頂けないでしょうか? >>347
ちょっと待て
おまえの本には巻末に索引が付いてないのか? >>348
ありがとうございます!
電子書籍なので気付かなかったです! 電子書籍なら何も考えずそのまま検索すれば良いだけのような? 電子書籍っていっても文字で情報を持ってるわけじゃないから検索はできない(普通に索引はある) 静的初期化ブロックでif文使ってるようなクラスのカバレッジを100%にすることって出来ますか? >>354 のようなのを見ると、どうして初心者は言葉足らずが多いのかと、いつも思うよ。 メソッドを作成し、呼び出せコリャ
メソッド名は命名規則にのっとって自由に決めてちょ。
値を定義済みの整数配列型と、整数型の値a, b を引数に渡して呼び出すと添え字 a の位置に b の値を挿入し整形済みの配列を戻り値として返すただし、元のデータは失われない
ただし、配列の長さは変化してよし。 自炊してもスキャンした画像をOCRソフトに読ませてテキスト作らせて画像と一緒にPDFファイルに組み込む事は可能。 >>354
君の言っていることの意味がわからない。 >>356
ヒントだけ書いとこう。
1. 配列を List に入れる。
2. add()で途中に挿入。
3. 配列にして返す。 >>354
無理です
リファクタリングしてからテストしてください >>356
public static void main(String[] args)
{
int[] src = {0, 1, 2};
for (int i = 0; i < 4; i++)
{
int[] dest = insert(src, i, 3);
System.out.println(Arrays.toString(dest));
}
}
static int[] insert(int[] src, int index, int value)
{
int[] dest = new int[src.length + 1];
System.arraycopy(src, 0, dest, 0, index);
dest[index] = value;
System.arraycopy(src, index, dest, index + 1, src.length - index);
return dest;
} 低レベルスレは宿題ばっかやるアホが多くてホント呆れるわ
チラシの裏でやれドアホ >>354
System.loadLibraryを特権計算か何かで呼んでるんだろうけどまずカバレッジ100%目指すってのがおかしい
言葉足らずとは思わないが >>365
やめたれ
まぁ確かに人に質問する態度ではないけど プログラミング超初心者です
Androidのアプリを作ることを目標にしてプログラミングを始めました
とりあえずプロゲートでJavaの文法を一通り学び終えたんですが、これからどのように勉強を進めていけば良いのかいまいちわかりません
フレームワークの勉強をした方がいいみたいなんですが、中々敷居が高くてどこからてを着ければ良いのやら、、
助言いただけると幸いです >>372
Androidの開発環境についてるサンプルアプリ動かしてそれ改造したりくっつけてきゃいいよ
設計学びたいなら本読め スレッドセーフについて教えて下さい。
よくフィールド変数は他スレッドから値が参照されたり、書き換えられたりするから、
使ってはいけない旨の記述を目にします。
例えば
class Calc{
private CalcSub calcSub;
public int execute(int param,int param2){
calcSub = new calcSub();
return calcSub.multiple(param,param2);
}
}
このようにメソッド内だけでCalcSubクラスをインスタンス化したときも、危ないのでしょうか。
メソッド内の変数はスレッドセーフと聞きますが。
呼び出すたびに新しいインスタンスを生成しても危ないのですか? 上記の場合、フィールドに無理やり変数を持つ意味はありませんが、
よくフレームワーク等だとフィールドに変数とアノテーションで宣言しているのを見かけたので
その場合はなぜスレッドセーフで、上記のような場合はそうじゃない(?)のか気になったで質問しました。
よろしくお願いします。 2, 30年やっていないと、マルチスレッド・プログラミングは出来ない
作っても、何十回に1回は、妙な動きをするから、使えない
しかも、たちが悪いことに、たいていは正常に動くから、
テストで発見できず、本番環境でバグる >>375
実際発生するかは確認してないが考え方として
スレッドαが新しいインスタンスaを作りメンバ変数に代入
スレッドβが新しいインスタンスbを作りメンバ変数に代入
スレッドαがメンバ変数からインスタンスb(あれあれー)を取得しメソッドをコール
スレッドβがメンバ変数からインスタンスbを取得しメソッドをコール
この場合はスレッドαがメソッドを終了するまでスレッドβがコールを待てば発生しないねsynchronized
またはメソッドローカルな変数だとαとβが格納する先がそれぞれ別だから上書きされない
だと思う >>377
ServletやAndroidはマルチスレッドでは マルチスレッドの物は、相互には呼べない。
呼べたら、バグだらけになるから大変
相手のキューに投入できるだけ。
それを相手が、自分のタイミングで、拾って処理する
間接的な通信方式だけが認められる。
直接通信はできない。
直接通信すると、バグるだけ >>381
まあまあ君、そんなに興奮しないでください jdk9に入ると言われてた型推論valって見送られたの? >>375
それでダメになるとしたら CalcSub が static のクラス変数を持っていて呼び出した処理の中でマルチスレッドを考慮せずにアクセスする場合だな。 >>375
直接の答えになってないけど、
わりと大雑把にデザインしていくしかないと思う
〜複数のスレッドからアクセスされるオブジェクトはこれで
そん中のメソッドがそれぞれ排他されている〜
こまかく排他や相互作用が入り組んでくると
んなもんはどうなってしまうか火を見るより明らか
排他処理のデザインを先にシンプルにかっちり作っといて
あとはそれだけを触らせる
まぁどうせ、どうしたってあとから徐々に複雑になっては来るんだけど… >>386
それは,まともなプログラムを書く上では不可能では
ステートはどうしても必要だ,NAND 二つでつくるフリップフロップですらステートがあるだろう? >>387
一般的なWEBシステムなら意識しなくてもそうなるってぐらい簡単だよ
デスクトップで色々とリソースに触るやつは少し工夫がいるかもね 要は、難しいところはFWに任せて、土方は簡単なところだけコーディングしましょうってこと >>387
そんな低レベルの話ではないでしょう…… では、CalcSubがこのような
クラスの場合は、上記のシチュエーションでも必ずスレッドセーフというわけですね。
class CalcSub{
final public int multiple(int value,int value2){
return value*value2;
}
ありがとうございまsた マルチスレッドでは、状態を持ったら、バグる。
だから状態を持たない、関数型言語が注目されている
そもそも、最速のNode.js なども、シングルスレッド。
Ruby の作者の、Matz ですら、マルチスレッドをやった事がない
まず、何十年もやっていないと無理。
マルチスレッドでは、シングルスレッド用の関数を使えない。
使うとバグるし、そもそも関数を、マルチスレッド対応で書く人は、いない
データ数が少ないと、マルチスレッドの方が遅くなる。
キャッシュ・メモリにも左右されるし、
速くなっても大したことない割には、開発費は何倍も掛かる。
というか、開発すればするほど、複雑すぎて開発不可能になっていくw 1週間あれば入門書読めるだろ
何十年とかバカじゃないか ほう、一週間でバクも起こさずにマルチスレッドプログラミングが出来るとな 一週間で入門できても
一通り習得するのは
一年じゃ足りないからな
たいていの技術は >>393
言語レベルでサポートされてるのに、どんだけ無能なんだよ 最近やる気が出ずにJava勉強してない・・・
やらないとと思いながら結局何もしてない・・・ ユウナって1人だけドレコ4つなんやな
クラが3
他は全員2 コマンド覚えるレベルの超初級なのですが、コマンド入力したらマウスカーソルなど当てるとその意味を表示するようなソフトやウェブサイトありましたら教えてください。 >>408
どんな環境で、何のコマンド?
まず用語からかな ググればいいような?
あ、そうだ。自分で作ればいいじゃん。
テキストファイルにコマンドと使い方書いといてそれ読んで画面にコマンド出しといてマウスカーソルが上に来たら使い方が出るみたいなやつ。 >>411
お前へのレスは最後にすると言ったな
あれは嘘だ >>396
句点「。」と読点「、」だけど、逆だと思ってるひとは多い。 Javaプログラマはマルチスレッドにしなくてもいいのにマルチスレッドで作ったり、それぞれのスレッドで同じデータを参照、更新したがるから変なことになる。 質問です。
フィールド定数として下記のようなインスタンスを持つのはマルチスレッドプログラミング的に問題ありますか?
private static final Comparator<Date> COMPARE = new Comparator<Date>() {
@Override
public int compare(Date s, Date t) {
return s.compareTo(t);
}
}; >>417
その Date が java.util.Date ならそれ自体がスレッドセーフでないためにうまく動かない可能性がある。
Date のインスタンスを渡す側の問題だ。COMPARE.compare(s, t) のように渡すことになるだろうが、
この s, t が他のスレッドと共有されており尚且ついつ書き換えられるかわからない場合は比較している
最中に書き換えられる可能性がある。 >>417
値が変化しないなら気にしなくておk
複数スレッドで書き換えるならvolatile付けとけ >>420
volatile 付けても複数のスレッドで同期取らずに書き換えるなら同じ事では? 用途としては、
class DateUtil {
private static final Comparator<Date> COMPARE = new Comparator<Date>() {
@Override
public int compare(Date s, Date t) {
return s.compareTo(t);
}
};
public static List<Date> sortDate(List<Date> dateList) {
Collections.sort(dateList, COMPARE);
return dateList;
}
}
こういうイメージです。
(sortするだけでわざわざreturnする必要ないかもしれませんが)
フィールド変数は、危ないかもしれませんが、定数COMPAREは、それ自身に、
インスタンス変数を持ちません。なので、こういう場合はスレッドセーフなのか気になりました。 >>422
それ自身はスレッドセーフだが List も Date もスレッドセーフではないので
使う側で同期を取るか、または他のスレッドからアクセスされないように作る
必要がある。 判定してる最中または後にt,sが示す時間が変更された場合か
スレッドセーフでないことをバグであるかのように見ている人がいるとやっかいそうだ
もうちょい誤解しにくい日本語訳ないかな Ruby の作者の、Matz でも、マルチスレッドはやった事がない
普通、関数を書く時に、マルチスレッド対応で書く人は、いない。
誰も書いた事がないはず。
マルチスレッド対応で書くには、数十年の研究が必要
マルチスレッドどころか、コンテナでは、read 走査中に、
要素を追加しただけで、バグるように作られているものが、ほとんど
初心者がマルチスレッドをやるなど、30年は早い マルチスレッドなんて簡単だよ
共有するデータはDBなどに集中させる
Javaでは基本的に共有しないでローカルコピーを使う
どうしてもJavaで共有したいならイミュータブルにするかスレッドセーフなライブラリを使う エンド - ユー子 - エージェント-JIET 公表価格 90~60 - エージェント×3 = 言い値50万以下
エンド - ユー子 - エージェント-JIET 公表価格 90~60 - エージェント×1 悪質な言い値で50万以下
エンド - ユー子 - エージェント-JIET 公表価格 90~60 - JIETに加入して公表価格で応募ができる 数十年も研究しなくても普通のプログラマなら数秒から数分で理解できると思うがなあ・・・ 普通のプログラマなら、プログラミングに関わるほとんどの概念は数分でマスターできるけど、ここ初心者スレだから、あまり簡単を強調しない方がいいかも ■ このスレッドは過去ログ倉庫に格納されています