- 1 名前:仕様書無しさん mailto:sage [03/09/24 05:33]
- このスレッドは、Sun認定Java資格の
SJC-P Sun Certified Programmer for the JAVA 2 Platform 1.4 Sun Certified Programmer for the JAVA 2 Platform 1.2 に関して、具体的な『実用情報』を集めるために立てました。 過去スレ・関連スレ>>2 受験手続き・チケット情報>>3 関連書籍 >>4 リンクなど >>5 ▼▼▼▼▼▼▼▼▼▼ ↓注目 ▼▼▼▼▼▼▼▼▼▼ このスレッドでは、 次の書き込みや議論は『 不要 』です。 「資格なんて意味ねーよ」 「実務経験関係なしにiStudyシコシコやってればとれる資格に意味ねぇ」 「3日で取れないやつはクソ」etc スレッドを荒らすだけの発言はこっち↓でやってください。 うひょ。 pc.2ch.net/test/read.cgi/prog/1062656417/ pc.2ch.net/test/read.cgi/prog/1042882513/ ▲▲▲▲▲▲▲▲▲▲ ↑注目 ▲▲▲▲▲▲▲▲▲▲ 前向きに、 SJC-Pに関する実用情報を議論するための スレッドにしましょう。 資格、万歳! 資格、マンセー!
- 343 名前:仕様書無しさん mailto:sage [04/01/12 01:40]
- プログラムのプの字もわからない僕が独学で出来るじゃばの本おせーて
- 344 名前:仕様書無しさん mailto:sage [04/01/12 04:24]
- >>343
さ、最初の方を読め!>>4とか>>5とか等。後は立ち読みして、自分に合っていそーな者を選ぼう!!
- 345 名前:仕様書無しさん mailto:sage [04/01/12 11:14]
- うーむ ここのスレずいぶん 親切だな。俺もSJC-Pとろっかな。
iStudyと青本用意したし 参戦します。よろしくです。
- 346 名前:仕様書無しさん [04/01/12 11:21]
- >>343
そうだね。 なお、やさしいJavaのURLはまちがっているな。 ttp://www.amazon.co.jp/exec/obidos/ASIN/4797319062/ 独習Javaは、2冊目の本だね。 一通り、おわったら、iアプリを作るのはどうだろう? あれもとりあえずJavaだからね。 世の中、奇特な人がいるもんでJavaアプリの解説をしている個人サイトもあるよ。 ttp://www.geocities.co.jp/SiliconValley-Bay/2972/ Httpの通信もできて、クライアント・サーバーシステムのクライアント側に使える。 いま、仕事でやっている。3日目だが。 カメラAPI、赤外線リモートコントロールAPIなど興味深いものもある。 転職組で、SJC-Pを取った人も、お奨めかな?クラス数も多くならないし。 JavaのオリジナルAPLを、その場でアピールできる。 結構、C/SのC側として使う例は多いみたい。 また、iアプリ、ゲームプログラミングの書籍は、いっぱい売っている。 そこら辺からアイディアをもらって、拡張していく。 今の端末は、プログラム領域の制限がゆるくなっているから、 泣く泣く削ったという機能を実装できる環境にある。
- 347 名前:346 [04/01/12 11:29]
- 別にiアプリでなくとも、可。
Vアプリ(J-フォン Javaアプリ)も同じこと。 好きな奴を使え。
- 348 名前:仕様書無しさん mailto:sage [04/01/12 16:54]
- class test {
public static void main(String args[]) { int x[] = {1,2,3,4,5}; disp(x); change(x); disp(x); } public static void change(int x[]) { int y[] = {11,22,33,44,55}; x = y; } public static void disp(int x[]) { for(int i=0; i<x.length; i++) System.out.print(x[i] + " "); System.out.println(""); } } これを動かすと 1 2 3 4 5 1 2 3 4 5 になりますが、 changeメソッドの x=y; で yの参照をxに代入しているのでは無いのですか? 配列なので参照を変更していると思うのですが… 全然違います? 厨房レベルの質問ですいません。
- 349 名前:仕様書無しさん [04/01/12 17:13]
- 変数の受け渡しは値渡しだから
呼び出し元への影響はないよ
- 350 名前:仕様書無しさん [04/01/12 17:17]
- >>348
「x = y」で、y の参照を x に代入しているが、 main にそれを戻してないから、main の x は、{1,2,3,4,5} の参照のままだと思う。
- 351 名前:仕様書無しさん [04/01/12 18:14]
- それって、試験に出るポイントそのままやんけ。
試験対策本を買って、解説読めば理解できるはず。 その解説が判らんってことだろ? 説明受けても理解できるか疑問...。
- 352 名前:仕様書無しさん [04/01/13 11:54]
- この問題って
xやyが配列出なくて普通のintだったら 1 11 と表示されるんですか?
- 353 名前:352 [04/01/13 11:55]
- 配列出→配列で
- 354 名前:仕様書無しさん [04/01/13 15:56]
- JDK1.5がリリースされたらSJC-Pの内容が難しくなるから取得するなら今の内かな?
追加される仕様を覚えてSJCP1.5が始まってから取得した方が良いような気もするけど。 とにかく今年Javaが新たな進化をしようとしてるから、これから勉強を始める人は気に留めてた方がいい。 ま、
- 355 名前:仕様書無しさん [04/01/13 18:31]
- >>352
実行環境はないんですか? 人任せでなく、実際にコンパイルして、実行してみるのが一番だと 思いますが。。。
- 356 名前:仕様書無しさん [04/01/13 18:43]
- >>352
参照型変数とint等のプリミティブ型変数は実データの持ち方が違うのを理解したほうがいいかも。 ほとんどの対策本はこの辺が判ってることが前提だから、普通のJava教本を読んだ方が 理解しやすいと思うよ。
- 357 名前:仕様書無しさん [04/01/13 20:52]
- >>354
アップグレード試験が始まるってことだよ。w コードネーム、「Tiger」。 =機械翻訳= ttp://www.excite.co.jp/world/url/body/?wb_url=java.sun.com/developer/technicalArticles/RoadMaps/J2SE_1.5/j2se_1_5.html&wb_lp=ENJA
- 358 名前:仕様書無しさん [04/01/13 20:57]
- ざっと見た感じ、template(Meta Data)?
ttp://java.sun.com/features/2003/05/bloch_qa.html
- 359 名前:仕様書無しさん mailto:sage [04/01/14 00:15]
- >>348
changeに渡している、int x[ ] は、 ただのコピーです。 コピーに値を代入しても、それをmainに返していないので、 mainにあるオリジナルは、変化無し。 解るかしら? 例えば int x = 1; int y = x; y = 2; 当然 xは、1でしょ。 もちろん、 x = y; を付け足したら、 xは、2でしょ? ああ、説明できない(゜дÅ )ソフトバンクシルバーに書いてあるT_T見て!
- 360 名前:仕様書無しさん [04/01/14 02:17]
- xの値を変えたければ、
this.x={11,22,33,44,55}; をしろということですか?
- 361 名前:仕様書無しさん [04/01/14 02:18]
- とおもったらxはmainのローカル変数だった。
んじゃどうやって変えるんだ???
- 362 名前:仕様書無しさん mailto:sage [04/01/14 03:35]
- mainのxを変えたければ単純にchangeメソッドをvoidではなく
int[]を戻すように変更すればいいんでない? public static void change(int x[]) { int y[] = {11,22,33,44,55}; return y; } で,mainメソッド内で,x = change(x); これじゃ,ダメ? それか,xをクラス変数にしてしまうとか。
- 363 名前:仕様書無しさん mailto:sage [04/01/14 03:39]
- ↑
この場合,changeメソッドの引数意味ないですね。 スマソ
- 364 名前:仕様書無しさん mailto:sage [04/01/14 03:44]
- ↑
うーむ,何か意味のないコードですね。
- 365 名前:仕様書無しさん [04/01/14 11:01]
- 根本的な原因は、、、
public static void change(int x[]) { int y[] = {11,22,33,44,55}; x = y; //ここ } 『//ここ』と書いてあるところでyの値を変えた時、当然xの値も変わる。 この辺が>>348君を困らせる原因となっているのだろうから、 >>359さんの説明では納得できないだろうね。
- 366 名前:仕様書無しさん mailto:sage [04/01/14 11:39]
- a
- 367 名前:仕様書無しさん mailto:sage [04/01/14 11:47]
- class test {
public static void main(String args[]) { int x[] = {1,2,3,4,5}; disp(x); ・・・@ change(x); disp(x); } public static void change(int x[]) { int y[] = {11,22,33,44,55}; x = y; ・・・A } public static void disp(int x[]) { for(int i=0; i<x.length; i++) System.out.print(x[i] + " "); System.out.println(""); } } @のx とAのxは異なるものです。 @のxは、mainメソッド内がスコープで、int型配列オブジェクトを参照しています。 Aのxは、changeメソッド内がスコープで、同じくint型配列オブジェクトを参照しています。 つづく
- 368 名前:仕様書無しさん mailto:sage [04/01/14 11:48]
- つづき
引数をchangeメソッドに渡すことで、Aのxに@のxを代入したことになりますが、 これは、参照先({1, 2, 3, 4, 5}配列)を渡したことになります。 つまり、changeメソッド開始時点では、 @のxと、Aのxが同じ配列オブジェクトを参照していると言うことです。 しかし、changeメソッド内の x = y; によって、 Aのxは、yの配列オブジェクト({11, 22, 33, 44, 55}配列)を参照することになります。 このとき、Aの参照しているオブジェクトを書き換えるのではなく、 Aの参照先を書き換えることに注意してください。 この結果、@のxの参照するオブジェクトは初期状態のまま保持されます。 こんな感じでいかがでしょう?
- 369 名前:仕様書無しさん [04/01/14 12:05]
- >>368
すばらしくわかりやすい!!!。 下手な参考書より理解できました。
- 370 名前:仕様書無しさん mailto:sage [04/01/14 12:57]
- 釣れまっか?
- 371 名前:仕様書無しさん mailto:age [04/01/14 23:40]
- 厨房で、すいません。
教えて君で、申し訳ない。 javaを始める言語環境の作り方を教えて! 自分なりに、 @JDKをダウンロード(1.4.2_03)。 Aパスを設定。win98なので、 「アクセサリ」「メモ帳」でファイルの種類を「すべてのファイル」にして、 Cドライブの「autoexec.bat」を開き、「c¥j2sdk1.4.0_03\bin;」と入力。 ていうか、set path=c:\jadkをインストールしたディレクトリ名¥bin; 」? 関連付けってどうやるんですか? フォルダを作ってない? 申し訳ないんですが、教えて下さい。
- 372 名前:仕様書無しさん mailto:sage [04/01/14 23:49]
- うーむ。初心者は何か本買った方がいいかと。。
Win98はめんどいんだよなぁ。。。
- 373 名前:371 mailto:age [04/01/14 23:58]
- >>372
レス、どうもです 本、見ながら設定してるんですけど(;;) 自分なりに、ms-dosプロントに入力して見ましたが、 コマンドが違いかディレクトリが違うていうメッセージが! 教えて下さい。
- 374 名前:仕様書無しさん [04/01/15 00:13]
- 確かにWin98はダメだね。
今の世の中、Win2K以降は必須。 あと、クレクレ厨房対策用に、 >>5 に有名どころの入門書 >>6 に有名どころのFAQサイトがある。 すまんが、そっちに逝ってくれ。 あと、オレが参考となった資料はこちら。 ttp://works.nri.co.jp/solution/index4-2.html Eclipse,Jakarta TomcatなどWebアプリケーションサーバーの開発環境 構築が出来る。 これらのサイトに逝って、一通り理解が出来れば職業PG 2〜3年目と同レベルになれると思う。 まあ、がんがれや。
- 375 名前:371 mailto:age [04/01/15 00:18]
- >>374
サンキュー。
- 376 名前:仕様書無しさん mailto:sage [04/01/15 20:12]
- アマゾンの日経のレビューに
『書店で見たとき、我が目を疑った。「さっき出た問題が書いてある」』 とか書いてありますけど実際のテストと比べてレベルの違いとかはどうですか? 対策本の中ではやっぱ一番お勧めですか?
- 377 名前:ほけんしょ [04/01/15 20:45]
- お久しぶりです
11月にSJC-P取得したほけんしょです。その節はお世話になりました おかげさまで来週からJava開発案件の契約社員として採用なりました これもSJC-P取得のおかげと思っています。 このところ寒い日が続きますが みなさんもお体に気をつけてがんばってください
- 378 名前:ほけんしょ [04/01/15 20:49]
- >>377
ちなみに契約金は4X万/月 ですが詳細設計〜テストなのでこの辺で実務経験を積むには良いと思い決定しました。
- 379 名前:仕様書無しさん mailto:sage [04/01/16 00:30]
- お ええなw 俺そんなにもらっとらんな 正社員やけど。
ちなみに あかんよ。 残業代 別じゃないと。
- 380 名前:仕様書無しさん mailto:sage [04/01/16 05:09]
- >>376
全部読むのしんどいけど、力はかなりつく 早く資格とりたいのならソフトバンクの方がいい 難易度は過去ログから見て 日経BP>>試験>>>ソフトバンク ぐらいらしい
- 381 名前:仕様書無しさん mailto:sage [04/01/16 20:51]
- 日経BP、腕ちぎれませんか?
厚すぎ!だと思うのですが...。
- 382 名前:仕様書無しさん mailto:sage [04/01/16 20:55]
- 2回目でぎりぎり合格。
日経BPのp175のコードとほぼ同じ問題が出た。 他にも出てたかもしれないけど、 青本中心で勉強してたので不明。 デカいし高いし持ち歩けないけど 後々まで役に立つ良本だと思う>日経BP
- 383 名前:仕様書無しさん mailto:sage [04/01/16 21:10]
- >>382さん
おめでとうございます。 2回目で合格ですか。 ちなみに経験はいかほどでしょうか? 当方、プログラミングも未経験ですが ただいま勉強中です。 ラッパーとかが何か覚えにくくて苦戦してます(苦笑) コレクションを捨てたとしても、まだやってないインナークラスと スレッドをやって本格的な試験対策をせねば…
- 384 名前:仕様書無しさん mailto:sage [04/01/17 00:31]
- なぜコレクションを捨てる・・・
- 385 名前:仕様書無しさん mailto:sage [04/01/17 00:36]
- 確実に点が取れるとこなのに・・・
- 386 名前:仕様書無しさん mailto:sage [04/01/17 00:37]
- >>384
実務では必要だけど合格するだけなら捨てても問題ないからね 覚えるのに時間がかかる割には問題数が少ない
- 387 名前:仕様書無しさん mailto:sage [04/01/17 00:40]
- ほけんしょよう。
がんばれよう。
- 388 名前:382 mailto:sage [04/01/17 01:18]
- >>383
ありがとう。 当方Java経験は1年ちょい。 ただしここ半年は実務でコード書いてない。 しかもプログラミングやってたといっても ほとんどコピペでOKのようなとこだったので 全然身についてなかった(と1回目不合格で悟る) 今回はスレッドを重点的にやった。 スレッドの正解率Upのおかげで滑り込みセーフ。 がんばってください。
- 389 名前:仕様書無しさん [04/01/17 01:23]
- Thread#join()とかObject#wait()、notify()、notifyAll()とかあの辺いまだにわからん。
困ったものだ。
- 390 名前:仕様書無しさん mailto:sage [04/01/17 02:10]
- まあ、みんな嫌いなとこだわな
- 391 名前:仕様書無しさん [04/01/17 11:46]
- >>389
当然テストによって違うのだろうけど、 私の時はスレッドの問題が10問くらい連続で出ました。 その辺の範囲は絶対捨てない方がいいですよ。
- 392 名前:仕様書無しさん mailto:sage [04/01/17 12:47]
- スレッドって結構出るって聞くよね?
地道にやらないと。
- 393 名前:仕様書無しさん mailto:sage [04/01/17 14:48]
- テンプレにある、スレッド本読破するといいと思います。
載っているコードは実際打ち込んで実行した方が良いだろうけど。 SJC-WCに向けて、XML勉強中・・・ふぅ。
- 394 名前:仕様書無しさん [04/01/17 17:54]
- スレッド関連は実際にコード書いて動かすことをやらないと、なかなか覚えられないだろうよ。
自分でマルチスレッド物を作って動かしてみ。 ちゃんと動いたら感動するから。
- 395 名前:仕様書無しさん mailto:sage [04/01/18 01:57]
- 【Java経験】なし(自習)
【言語経験】C, PL/SQL, VB, Ruby(趣味) 【試験番号】310-035(SJC-P) 【 正解数 】35/61 = 57% 【受験回数】1 【勉強期間】約1ヶ月(実質1週間程度) 【使用教材】日経BP 【出題内容】実行結果をテキストボックスに記述する方式の問題があって一瞬面食らいました。 同一範囲の知識を問う問題が連続して出題されていたように感じました。 【感想など】スレッドは皆さん仰るとおり難問でした。実際にコードを書いて理解したつもりでも 50%程度の正答率に留まりました。
- 396 名前:395 [04/01/18 02:04]
- 来月から実務なので自習を兼ねて資格取得しました。このスレは大変参考に
なりました。ありがとうございました。
- 397 名前:仕様書無しさん mailto:釣りだよ釣り [04/01/18 04:08]
- SJCとったら、JavaVM仕様の勉強かな。
特にGCの仕組みは学んでおかないと現場ではウンコ扱いだからな。 エデンとか、サバイバーとか領域の意味をしっかり把握して どんなタイミングでFullGCが走るか、ちゃんと勉強しておくようにな。 まぁ、派遣とかその他もろもろのウンコPGには関係の無い話かもな。
- 398 名前:仕様書無しさん mailto:sage [04/01/18 04:54]
- >>397
SunJREのローカル実装にこだわってる馬鹿発見。
- 399 名前:仕様書無しさん mailto:sage [04/01/18 09:55]
- アホは放置で
- 400 名前:仕様書無しさん [04/01/18 10:06]
- 今月のC magazineはjavaのThread特集だよ。
- 401 名前:仕様書無しさん mailto:sage [04/01/18 14:29]
- >>398,399
>>397のメール欄みろ。
- 402 名前:仕様書無しさん mailto:sage [04/01/18 15:03]
- >>397
おまいの言うウンコPGが二匹も釣れたようだ。 良かったな。
- 403 名前:399 mailto:sage [04/01/18 18:22]
- >>401
見てましたよ。 >>402 いえ、学生です。情報学科の
- 404 名前:仕様書無しさん mailto:sage [04/01/18 20:05]
- 実務でやり始めたが、ウンコPGが作ったプログラムを引き継ぐのは大変だ。
1つのファイル(モジュール)に、複数のクラスが入っている。(インナークラスでは無い) システム設計書なし、機能仕様書なし、外部設計書なし ソフトウェア設計書なし、デバッグ仕様書なし、デバッグ報告書1枚、 画面遷移の取り扱い説明書、あり つまり、無い無いずくし。 なんだかな〜。(阿藤快風に)
- 405 名前:仕様書無しさん mailto:sage [04/01/18 21:01]
- プログラミング未経験なんですが、SJC-Pを取ろうと
勉強しています。 よく、上達するには何かを作ってみろとか言われますが、 初心者の時、どんなのプログラムを書いてましたか? (もちろんレベルで出来る物の差はありますけど) サンプルコードを書き換えたりはしますが 何かを作れと言われても、具体的にどんなのを作れば良いのか 浮かばなくて…
- 406 名前:仕様書無しさん mailto:sage [04/01/18 21:44]
- >>405
3つの数字を用意して、それぞれ1〜100の間を繰り返し上下に動くようにする。 その変化するスピードは、3つそれぞれで異なるものとする。 その変化の様子をアプレットなり、コンソールなり、ウインドウなりで、 表示させる。 こんな感じでやってみては? とりあえず、制御構文と、スレッドの応用になります。 また、ボタンを作ってその数字を停止させたり、動かしたりを操作できるようにすれば、 wait(), notify()の練習にもなります。 (範囲外ですが、GUIの勉強にもなります) 「3つの数字」の「3」の部分をfinal int型で示すようにするなどして、 汎用性を持たせるようにするとよいかとおもいます。
- 407 名前:仕様書無しさん mailto:sage [04/01/18 21:57]
- >>404
ウンコPGがいるような会社にいるお前も・・・
- 408 名前:仕様書無しさん mailto:sage [04/01/18 23:31]
- とりあえず、コレクション簡単なんだから覚えてください。。
Vectorとか、Hashtableとかじゃないですよ
- 409 名前:仕様書無しさん mailto:sage [04/01/19 00:25]
- >>404
よく上司許したね。 ってか、クビ?
- 410 名前:仕様書無しさん [04/01/19 01:51]
- すいません質問です。
試験のチケットは有効期限ってどのくらいですか? 今自分は振込み用紙が来たところです。
- 411 名前:ジャバヒロ mailto:sage [04/01/19 02:36]
- public class Sample{
public static void main(String args[]){ int x = new int[1]; func(x); System.out.println(String.valueOf(x[0])); } static void func(int x[]){ x[0] = 100; } } ↑これって「100」と出力されるんですけど、どうしてですか? main()メソッドのx[0]は0で初期化されますよね? で、func()メソッドの引数として獲得されるx[]には main()メソッドで定義したx[]配列への参照がコピーして 渡されるんですよね? func()メソッド内で x[0] = 100; としたところで func()メソッドで獲得した引数としてのx[]の参照先が 変わるだけで、main()メソッドで定義したx[]配列には 影響ないんじゃないの?でも、「100」と出力されちゃう。 どなたか説明していただけませんか? 私の勘違いを指摘してください。
- 412 名前:仕様書無しさん mailto:sage [04/01/19 03:26]
- >>411
「参照」って言葉の意味を理解してますか? newとかで明示的に作成しない限り、基本的にオブジェクトそのものの数は増えない、と。
- 413 名前:仕様書無しさん mailto:sage [04/01/19 07:18]
- >>411
ん? 「func()メソッドで獲得した引数としてのx[]の参照先が 変わるだけで・・・」 ここがおかしいんでない? 確かにmain内の変数xとfunc内の変数xは別物だけど 参照先の実体は同じハズ
- 414 名前:仕様書無しさん mailto:sage [04/01/19 07:57]
- >411 func()メソッドで獲得した引数としてのx[]の最初の参照先はどこなのでしょう?
それがわかれば解決かと。プリミティブ型と参照型がごっちゃになっているのでしょう。 それと、 int x = new int[1];だとコンパイルエラーがでるはずですが。 int[] x = new int[1];が正しいかと......。
- 415 名前:仕様書無しさん mailto:sage [04/01/19 07:58]
- public class Sample{
public static void main(String args[]){ int[]x = new int[1]; func(x); System.out.println(String.valueOf(x[0])); } //引数名でxを使うとややこしいので、x_copyにしました。 static void func(int x_copy[]){ x_copy[0] = 100; } } 1. int型の配列xはx[0]の領域を指しています。 x→x[0] これはよさそう。 2. func(int型の配列の参照);メソッドにxを渡します。 3. x_copyはxがコピーされる。 ここで言うコピーとは、xの値(参照型なのでアドレス)とx_copyの値(当然アドレス) は同じということです。 x の値が0x0001(参照先のアドレス)ならば x_copy の値も0x0001(参照先のアドレス)となる。 参照が指している先は同じということなんですけれど、図にするとこんな感じ。 x →→→→→→→ 0x0001 ↑ x_copy →→→→→ ↑
- 416 名前:仕様書無しさん mailto:sage [04/01/19 07:59]
- x →→→→→→→ 0x0001
↑ x_copy →→→→→ ↑ 4. x_copyの0番目x_copy[0]に100を入れる つまり、0x0001アドレスの値を100にする 5. 表示したら100になる xが指しているアドレスとx_copyが指しているアドレスは 同じなので、アドレス内の値が変更されたら、当然xの値も変わっている。 説明するっていうことはむつかしいな。 この問題の重要な点は「参照」ではなく、staticメソッドは、 他のstaticメソッドへアクセスすることができるということを言いたいのかと思ったが..... 411がむばれ。
- 417 名前:仕様書無しさん mailto:sage [04/01/19 08:01]
- 同じところを指している図をつくりたいんだけれど、うまくいかないよ〜
うわ〜ん。 x →→→→→→→ 0x0001 ↑ x_copy →→→→→ ↑
- 418 名前:仕様書無しさん [04/01/19 12:35]
- >411
配列はオブジェクトと同じ扱いです。たとえint型だろうとね。 だから、メソッドにオブジェクトの参照を渡して、メソッド内でその参照に対して計算なり何なりすると、元々作ったオブジェクト中身も計算に伴って変化します。 これはとても理に叶ってると思いませんか?
- 419 名前:ジャバヒロ mailto:sage [04/01/19 13:19]
- >>412 〜 >>418
レスありがとうございます。 配列xの参照先アドレスと配列x_copyの参照先アドレスが同じなので func()メソッド内で配列x_copyの要素1番目に100を入れると main()メソッド内の配列xの要素1番目も0から100に変わるということですね。
- 420 名前:ジャバヒロ mailto:sage [04/01/19 13:31]
- ということは、以下のような場合は文字列"NG"の
参照先アドレスがstr_copyの参照先アドレスと違うということですか? public class Sample{ public static void main(String[] args){ String str = "OK"; func(str); System.out.println(str); } static void func(String str_copy){ str_copy = "NG"; } } この場合の出力結果は「OK」です。 func()メソッド内でstr_copyに文字列"NG"を入れるまでは str_copyの参照先アドレスはstrの参照先アドレスと同じだった。 func()メソッドの引数として渡されているstr_copyの参照先アドレスは この時点でははmain()メソッド内で定義したstrの参照先アドレスのコピーだから。 でも、func()メソッド内で出てくる文字列"NG"は別の参照先アドレスでぇ。。 (この辺で分からなくなってきてます) str_copyの参照先アドレスはstrのコピーから"NG"の参照先アドレスへ変わったけど main()メソッド内のstrの参照先アドレスには影響しないってことですか? 影響しないんですか?
- 421 名前:414-417 mailto:sage [04/01/19 14:33]
- intやdouble型とは違い、StringというやつはJavaの中で別物と思ったほうが良いです。
おそらく、初心者Java本では[equals]あたりを調べるとStringオブジェクトは特別なんですよ〜 的なことが書いてあると思うのですが。 public class Sample{ public static void main(String[] args){ @ String str = "OK"; String str2 = "OK"; A String str = "NG"; System.out.println(str); }
- 422 名前:414-417 mailto:sage [04/01/19 14:37]
-
メソッドが介在すると、わからなくなる(複雑に考えちゃったりするんですよね)ので、 普通の変数で考えてみましょう @では str →→→→→→→ 0x0001("OK"が入っているアドレス) ↑ str2 →→→→→→ ↑ となっていることは分かりますか?Str2のために新しい領域を確保していないのです。 A str →→→→→→ 0x0111("NG"が入っているアドレス) str2 →→→→→→ 0x0001("OK"が入っているアドレス) となるのは分かりますか? ちょっとトイレにいくので、じっくり考えてみてください。
- 423 名前:414-417 mailto:sage [04/01/19 15:03]
- ウンコしてすっきりしました。
問題文の間違えに気がつきました(悲) A String str = "NG"; → str = "NG";です。すみません。 上記のことがわかれば、メソッドにしても同じだと考えてよいです。 String型の参照str_copyにstrの値(アドレス)をコピーすると str →→→→→→→ 0x0001("OK"が入っているアドレス) ↑ str_copy →→→→→ ↑ こうなのですが、新しい文字列を格納すると、新しい領域を確保することになるのです。 参考書のString型とStringBuffer型について書いてあるページに目を通すと よくわかると思います。 こんなことも書いてあるかと↓ String型をnewをすると、任意に新しい領域がつくられます。 @ String str = "OK"; String str2 = new String("OK"); だとすると str →→→→→→ 0x0001("OK"が入っているアドレス) str2 →→→→→→ 0x00FF("OK"が入っているアドレス) newは新たな領域を任意に作成してほしい時に書いたりするのです。 ああっむつかしいな。
- 424 名前:414-417 mailto:sage [04/01/19 15:04]
-
ここはSJC-P用スレッドなので、そろそろ引っ込みます。 このあたりは基本文法なので、他のスレッドでお聞きになったほうがよろしいのかもしれませんね。 ウンコPGだが、一つ一つ理解していくと、りっぱなウンコになれたりして、かなり臭いので、 給料あがったりします。 ここのスレには大変お世話になりました。来週試験受けます。 結果報告します。 ジャバヒロもがむばれ。
- 425 名前:ジャバヒロ mailto:sage [04/01/19 15:22]
- <<424
意味分かりましたよ〜。ありがとうございます☆ 確かに板違いかもしれなかったです。すいません。 私ももっと学んで今年中には合格できるようにします。 本当にありがとうございました。
- 426 名前:仕様書無しさん mailto:sage [04/01/19 15:50]
- >>422
スマソ,直接スレと関係ないけど良ければ教えてください。 >str2のために新しい領域を確保していないのです。 クラス型の変数は例外なく参照先のアドレスを格納 するために4バイト分のメモリ領域を確保するのでは? 確保しないのであれば,変数str2そのものの情報は どこに記憶しておくの? メモリの中身には関心があるんだけど,こういうことを 詳しく説明している参考書ってあるのかな? 近くに大きい本屋さんがないもので。
- 427 名前:414-417および421-424 mailto:sage [04/01/19 20:39]
- >>426
もう一度、きちんと調べなおしたりして(W 試験前のウンコPGなので、嘘ついてしまわないようにしなければいけないと。 当方の説明が悪かったために誤解を招いてしまったようです。すみません。 たしかに、あの図だと勘違いしてしまいますね。 ご指摘の通り、クラス型変数は4バイト分の領域を確保します。 それが、strとstr2なんです。strとstr2は4バイトの領域にそれぞれの名前で確保されているます。 strとstr2の値(つまりオブジェクトを指すアドレス)が一緒(0x0001としましたよね) だと伝えたかったのです。 str の値(0x0001) ↑ str2の値(0x0001) のように書くべきでしたね。
- 428 名前:414-417および421-424 mailto:sage [04/01/19 21:07]
- 参考書には次のように書いてあります。
文字列リテラルは内部的にStringオブジェクトで表される。 その祭、同じ文字列のリテラルは同じStringオブジェクトで表すことになってる。 ......なんか、分かるんだがな、もうちょっと砕いたかつ、つっこんだ説明がほしいですね。 当方アフォですし(悲) String型(Stringクラス型と言ったほうが区別がはっきりしていいですね。) のオブジェクトというのはヒープ上(Staticな人達が存在する、すぐに消滅したりしないメモリ上のエリア) に生成されるんです。 Stringオブジェクトが作られた時にJVMはヒープ上で同じ文字列があるかどうかを探しくれます。 もし、あったらその「文字列が収まっているアドレス」をクラス型の変数に格納するのです。
- 429 名前:414-417および421-424 mailto:sage [04/01/19 21:08]
- 上記を理解すると
String str = "OK"; この時ヒープ上に("OK")が格納されているStringオブジェクトが生成 そのオブジェクトのアドレス(0x0001番とする)をstrに格納 String str2 = "OK"; JVMはヒープ上に("OK")が格納されているStringオブジェクトがあるかどうか 探して、("OK")Stringオブジェクトみつけたので、そのアドレス(0x0001番) をstr2に格納する String str3 = new String("OK") これはJVMに("OK")が格納されているStringオブジェクトを探さずに 新たなオブジェクトを作ってくれよと明示的に命令していることになります したがって、str3には新たな("OK")Stringオブジェクトのアドレス (0x00FF番とする)が格納される 結果 str(0x0011)→→→→→→→ ("OK")オブジェクト(アドレスは0x0001) ↑ str2(0x0011) →→→→→→ ↑ str3(0x00FF) →→→→→→ ("OK")オブジェクト(アドレスは0x00FF) となるんです。
- 430 名前:414-417および421-424 mailto:sage [04/01/19 21:18]
- さらに、上記がわかるとObjectクラスの@==とAequalsメソッドの使い分けが理解できます。
(受験者は必須の知識です。) @ if(str == str2) == は同じStringオブジェクトを参照しているかどうかをたずねています。 つまり、strとstr2の中の値(アドレス)が同じかどうかをたずねられています。 strとsrt2の値(アドレス)は同じなので、if(str == str2)はtrueになり、 strとsrt3の値(アドレス)は異なるので、if(str == str3)はtrueになります。 A if(str.equals(str2)) equalsはstrとstr2が同じ文字列を保持しているかどうか つまり、strとstr2が指すStringオブジェクトのインスタンスの中身が同じかたずねています。 この場合str、str2、str3が指すオブジェクトのインスタンスの中身は全て("OK")ですので、 どの組み合わせでもtrueになります。
- 431 名前:414-417および421-424 mailto:sage [04/01/19 21:19]
- さて、メモリに関してですが、BP本はこちらで良本とされているのでもっていますが、書籍としては私も入手していないですね。良い本があったら、どなたか教えてください。基本情報とかソフ開とかの資格の本なんかで結構いいのがあるのかもしれませんね。
自分がこれはよい説明だなと思ったのは↓です。 ttp://www.atmarkit.co.jp/fjava/rensai2/javaent02/javaent02.html 変数について、分かるような、分からないような 「俺、いまいち、いけてないな」という方は一読の価値があります。(1ページですし) 非常に分かりやすい、かつ正しい説明だと思います。 自分もこういう説明ができるようになりたい(悲) >426 こんなんでよろしいでしょうか?
- 432 名前:414-417および421-424 mailto:sage [04/01/19 21:23]
- ああっまた、まちがえた。
>430の@ strとsrt2の値(アドレス)は同じなので、if(str == str2)はtrueになり、 strとsrt3の値(アドレス)は異なるので、if(str == str3)はfalseになります。 です。ごめん。
- 433 名前:日経BP社 [04/01/19 21:33]
- 『Sun Java2認定ガイド』正誤表
store.nikkeibp.co.jp/teisei/seigo.html#8168X 【第1版1刷】をお持ちの方 ▼p.144の問題1と問題2の問題文 「アクセス修飾子」を 「アクセス修飾子またはアクセス制御」に直す ▼p.211の問題9の解答と解説 正答の「B」を「C」に、解説の1行目の 「1回」を「1回ずつ」に直す ▼p.232の「試験のポイント」 コードの2行目中の「,」を「;」に直す コードの下の文章で、「無効です」の前に 「forループ外では」を挿入する ▼p.263の2番目の段落 3行目の「可能です」を 「可能かもしれません」に直す ▼p.435の問題4の解説 誤答中の「C」を「B」に直す ▼p.511の表9-2 一番左の3行目の「nitifyAll()」を 「notifyAll()」に直す
- 434 名前:仕様書無しさん mailto:sage [04/01/19 21:50]
- Java FAQ www.gimlay.org/~javafaq/javafaq.html
のStringとか、 String#intern() とか immutableとかで検索すれば いろいろ出てくるはず。
- 435 名前:426 mailto:sage [04/01/20 06:05]
- >427-432
なるほど。理解できました。ご丁寧にありがd。 試験頑張ってください。 >434 サンクス。参考にさせて頂きます。
- 436 名前:仕様書無しさん [04/01/21 00:59]
- 今月のC magaのThread特集だけど、
一番最初のプログラム、Hello、Java、 Worldそれぞれ100個ずつ、 計300個表示されるとあるけど、どうなのかなぁ? if節って、直後の行が改行だと何もしないのかなぁ? それだったら意味がわかるんだけど。 皆さんどう思いますか?
- 437 名前:仕様書無しさん mailto:sage [04/01/21 23:39]
- >>436
自分で書いて試してみましょう。
- 438 名前:仕様書無しさん mailto:sage [04/01/23 01:04]
- >>430
Cで書いたほうが、ポインタでわかりやすいかな。。 const char *str1 = "OK"; const char *str2 = "OK"; char *str3 = (char *) malloc(8); strcpy(str3, "NG"); こんな感じ
- 439 名前:430およびウンコPG mailto:sage [04/01/23 01:49]
- >438
なるほど、ありがとうございます。 あれれ?ちょいと教えてください。 const str1もstr2ポインタが指す(指すというか、1次元配列ですね)の それぞれの値("OK")のメモリー領域は別だと思うのですが、 違うのでしょうか? この場合 str1とstr2の値(アドレス)は同じなのでしょうか? 自分は違うと思っていましたが..... Cはちょっとしかやっていなかったので、既に忘れてしまっているものでして.... constなんだか懐かしいです。あの時も理解が出来ず辛かった(W まあ、ポインタを理解していれば、 メモリがどのように使われるのかが分かっているはずなので、Stringクラスの メモリの使われ方なんていうのは糞にもならない「ハナクソ」程度に思われるのでしょうね。 しかし、ウンコPGって本当に良い命名だと思います。 とても気に入っています。この名前いただきますです。 今日はコレクションのお勉強です。これもいまいち分かりづらいので困ります。
- 440 名前:仕様書無しさん mailto:sage [04/01/23 02:14]
- >>439
C言語ならコンパイラ依存。ものによりけり。オプションで可能なものもありますよね。 Javaなら仕様で必ず同じですが。
- 441 名前:仕様書無しさん mailto:sage [04/01/23 14:44]
- >>21 に、
>最後に、前スレでカンペを張ってくれた人、大変助かりました。ありがとー ってあるんだけど、誰かログ持ってる人張ってくれませんか?お願いします。
- 442 名前:仕様書無しさん mailto:sage [04/01/23 20:46]
- はいよ♪
001) インターフェース内で宣言された変数はpublic static finalになるので再代入できない 002) インターフェース内で宣言されたメソッドはpublic abstructになるので実装クラスではpublicメソッドでオーバーライドする 003) メソッドの宣言なのにセミコロンで終わっている場合は抽象メソッドなのでクラスにもabstructが必要 004) インタフェースは複数のインターフェースをextendsできる 005) int型以下のサイズ同士の計算結果はint型 006) 配列のインデックスはint型。byte・short・charが使われるとint型に変換される 007) defaultが常に最後に無くてもかまわない 008) system.out.print("hoge" + 5 + 8);の場合の+演算子は文字列連結。結果はhoge58 009) シフトされるビット数は常に右オペランドをその基本データ型のビット数で割った余り 010) x>>3はx*2*2*2と同じ、x<<3はx/2/2/2と同じ 011) &は両方1の時、|はどちらかが1の時、^は一方が1の時のみ1 012) &&は左がfalseなら、||は左がtrueなら残りは評価しない 013) for文の反復式が実行されるのは正常に反復が1回終わった後 014) printStackTrace()でスタックトレースを表示することができる 015) if文の{}の省略は直後の1文のみがif文。インデントなど紛らわしいものに注意 016) チェック例外はどこかで処理しないとコンパイルできない 017) オーバーライドに失敗しているメソッドはオーバーロードに成功していないかに注意 018) RuntimeExceptionは処理も宣言も必要ない 019) アサーションフラグは、基本的に左側から順に評価される 020) シフト演算子は整数型のオペランドにのみ適用される 021) voidを返すメソッドをassert文の第二文に使えない。何らかの値を返す必要がある 022) どのオーバーライドメソッドを使うかは実行時のオブジェクト型で決まる 023) どのオーバーロードメソッドを使うかはコンパイル時の参照型で決まる 024) コンストラクタは継承されない 025) デフォルトコンストラクタはクラスと同じアクセスレベル
- 443 名前:仕様書無しさん mailto:sage [04/01/23 20:47]
- 025) デフォルトコンストラクタはクラスと同じアクセスレベル
026) インターフェースにはコンストラクタはない 027) 抽象クラスにはコンストラクタがある 028) 戻り値の型がオブジェクト参照のメソッドは戻り値型に暗黙的にキャストできるものなら何でも良い 029) x.lengthは配列の属性、x.length()はStringのメソッド 030) 連鎖メソッド(result=method1().method2().method3();)は左から順に評価される 031) NumberFormatExceptionはperseXxx()とvalueOf()が投げる 032) ceilとfloorは引数・戻り値共にdouble型のみ 033) substring()の第二引数のインデックスは1から始まる 034) インスタンスメソッドはオブジェクト型・staticメソッドは参照型で決められる 035) 例外がキャッチされないと、先にfinallyブロックが実行される 036) max min abs はdouble・float・long・intの戻り値・引数を取る4バージョンある 037) round はint・longの戻り値・引数を取る2バージョンある 038) sqrt()は負数を引数にとるとNaNになる 039) ceilは繰り上げ・floorは繰り下げ 040) Boolean型変数を条件文に使えない 041) primitive xxxValue() 、primitive parseXxx(String) 、Warapper valueOf(String)。 042) equals()でラッパークラスの比較をする場合、同じ物でないとfalseになる。同じクラスでもなく階層ツリーでもないため 043) 2つのオブジェクトがequals()メソッドで等しいと判断される場合、両方のハッシュコードは同じにならないといけない 044) ソート済みで順序なしのコレクションはない(ソートされたら並んでる) 045) ArrayList HashSet HashMapはシンプルなコレクション 046) RandomAccessインターフェースを実装しているのはVectorとArrayListのみ 047) LinkedList LinkedHashSet LinkedHashMap は順序付き(Linkedは順序ありと暗記) 048) TreeSet・TreeMapはソート済み、順序あり(Treeはソート済みで順序ありと暗記) 049) Vector Hashtable は同期化されている(古くからあるのは同期されてると暗記) 050) HashMapはnullキーがいくつあっても良い。Hashtableはnullキーはダメ、LinkedHashMapは1つだけ
|

|