トップページ⇒tech
1002コメント343KB

Java入門・初心者質問スレ [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/05/12(木) 05:18:33.40ID:nzHoBPh8
Java初心者のためのスレッドです。
0002デフォルトの名無しさん2016/05/12(木) 07:04:37.72ID:/eB9RrGz
< `∀´>ニダー
0003デフォルトの名無しさん2016/05/12(木) 11:54:40.41ID:LTEnCbUt
すいません
public以外の修飾詞って何のためにあるんでしょうか
春からjavaはじめてなるべくせまい範囲でアクセスできるように書いた方がいいと教わったのですが意味がわかりません
とりあえずprivateってかいておいてコンパイルエラーがでるたびにpublicに書き直す必要があって
だったらはじめからpublicってかいておいたほうがprivateの完全上位互換だと思うのです
0004デフォルトの名無しさん2016/05/12(木) 13:52:26.21ID:zeyNygYO
素人は、フィールドをprivate、メソッドをpublicにしておけ。
フィールドをクラス外から、アクセスできないようにする(カプセル化)

もし、外からアクセスされて、値を変えられたら、正常に処理できない

外からフィールドにアクセスしたいのなら、そのフィールドに、
getter/setter(アクセッサ)を宣言して、それを通してアクセスする
0005デフォルトの名無しさん2016/05/12(木) 14:08:00.84ID:LTEnCbUt
obj.val++;

みたいなコードをかきたいのにわざわざ

obj.setValue(obj,getValue() + 1);

みたいなコードをかかないといけなくなるってことですよね?

>外からアクセスされて
の部分がよくわからないのですが
具体的にどういうケースで問題になるのでしょうか
0006デフォルトの名無しさん2016/05/12(木) 18:12:02.87ID:zeyNygYO
プログラム開発で一番ダメなのが、グローバル変数を使ったり、
オブジェクト同士・モジュール同士の密結合。
密結合で開発していくと、いずれスパゲティ・泥団子になっていって、修正できなくなっていく

どこかを修正すると、他の部分にバグが生じる。
1か所修正すると、数か所にバグが出るようになる

だからオブジェクトなどをカプセル化して、狭いスコープに封じ込めて、
外からいじれないようにする(疎結合)

つまり、フィールドをprivateにして、外からオブジェクトの状態を変える場合は、
publicのメソッド・アクセッサを通して、アクセスする
0007デフォルトの名無しさん2016/05/12(木) 18:30:03.02ID:zeyNygYO
Java・Windows・LinuxのAPIを使う場合でも、
オブジェクトの中のフィールドを設定することはまずない

もし、obj.a = 1; obj.b = 2; のように、直接フィールドに設定すれば、
フィールドの詳細を理解しなくてはならないから、すごく大変

設定する順序は、先にaに設定してから、bに設定するとか、
そういうことを考えるだけでも、開発はできなくなる

例えば、ファイルを読むのでも、obj.read() とか、
オブジェクトの詳細を知らずに、簡単に使えなければならない
0008デフォルトの名無しさん2016/05/12(木) 20:01:25.53ID:LTEnCbUt
うーん… 難しい

プログラム上便利に短くかけることが運用しやすいとは限らないってことですか…
いまいち実感できないですけど…
0009デフォルトの名無しさん2016/05/12(木) 21:21:12.65ID:hY0jzmnf
>>7
フィールドの詳細を知らなくちゃいけないから大変www確かにお前の頭では大変そうだな
0010デフォルトの名無しさん2016/05/12(木) 21:23:21.11ID:Vmwu/plU
>>8
C#みたいにプロパティのある言語使ってると、javaは冗長で嫌になるよね
0011デフォルトの名無しさん2016/05/13(金) 06:59:23.53ID:5RjflIb0
xをそのままpublicにしちゃうとどこからでも読み書き可能になってしまうから
getXはpublicにしとくけど、setXはデフォルトにしといて同パッケージ内からしか書けないとか
柔軟に対応できるというメリットもある
0012デフォルトの名無しさん2016/05/13(金) 15:21:46.75ID:yywl+o9x
最初は、ソースコードの100行目に、obj.a = 1 だけがあり、
簡単なように見えても、次に、200行目に修正が入ると、

if(x == 1){
obj.a = 1
}else{
obj.a = 2
}

こういうようにオブジェクト内の詳細が、外側のスコープに、
ソースコードの飛び飛びの場所に出現する

これがオブジェクト内のスコープじゃないのだから、やってられんわw
0013デフォルトの名無しさん2016/05/14(土) 00:18:07.59ID:MDtr7m89
これまでDB関連ばかりやってたから、言語と言っていいかわからないが、
PL/SQLくらいであとそのPLを動かすためのshくらいしかやったことない。

Javaの資料とか見てると、英語の羅列じゃん・・・
一通りの文法覚えたら、メソッドとException関連をじっくり見た方がいいのかな?
0014デフォルトの名無しさん2016/05/14(土) 08:42:14.37ID:uvV1TjlT
なぜオブジェクト指向で作るのかっていう本読めばいいよ。
0015デフォルトの名無しさん2016/05/14(土) 09:53:58.19ID:fLeelvLJ
>>8
大きなシステムを分担して組む時の話だよ

組織が大きくなると担当をしっかり決めて部外者が勝手に触らない
必要なら決められた窓口を通して依頼や調整をする
それと同じことをプログラム内のルールとしても実践するだけ
0016デフォルトの名無しさん2016/05/14(土) 13:45:29.21ID:5pXvQAwD
>>13
Javaのお進め図書・情報・url
http://ula.2ch.net/test/read.cgi/echo.2ch.net/tech/1457392971/l50

ここに推薦書が書いてある
0017デフォルトの名無しさん2016/05/14(土) 14:31:43.29ID:gAeocMbe
隔離スレのほうがレベル高い話してる…
0018デフォルトの名無しさん2016/05/17(火) 02:55:12.85ID:op8lS/VF
ひとつの利点として
とりあえずsetter(getter)が仲介すると
変数の定義域(値域)が設定出来るってのはあるよね

例えばRGB(r, g, b)で
r=0〜255しかオブジェクト内で想定してないのに外からr =9999とか値を設定されたらオブジェクトがどんな動作するか想定出来ない
setterを噛ませれば引数が0〜255以外の時に値を丸めておいたり出来る

少なくとも外部から値の範囲が汚染されないのは大きい
作る時にオブジェクト内での動作に集中出来る
0019デフォルトの名無しさん2016/05/17(火) 08:11:51.20ID:+pynX6Ny
byte使え
0020デフォルトの名無しさん2016/05/18(水) 18:14:51.82ID:Kc9Ol4u0
工場の機械って工場の人しか使っちゃダメだろ
突然見ず知らずの人が使い出したら困るだろ
アクセス修飾子っていうのは見ず知らずの人に機械を触らせないためのルールだよ

見ず知らずの人が機械を動かすときは工場の人(publicなメソッド)にお願いして、機械を動かしてもらう

そうすれば工場の人は勝手に機械をいじられないし、見ず知らずの人は機械の使い方を知らなくても目的が果たせる。
0021デフォルトの名無しさん2016/05/18(水) 20:56:08.39ID:HhGNLqnc
使う側が理解して使う場合無駄なオーバーヘッドが入るだけじゃん
0022デフォルトの名無しさん2016/05/18(水) 20:58:39.95ID:/QzLYINM
使う側が知ってるならリフレクション
つまり忍び込んで勝手に使う
0023デフォルトの名無しさん2016/05/19(木) 14:42:20.03ID:W+na7P2U
正しく動くようになってから速くするのが鉄則だよ
あんま詳しくないけど関数呼び出しのオーバーヘッドは思いの他、軽いらしい

ゲームみたいなのは、また別なのかもしれんが
0024デフォルトの名無しさん2016/05/20(金) 13:43:38.26ID:l93PzyPZ
javaで

打ち込んだ段数まで順にピラミッド型に数字並べるのってどうするの?

1
2 2
3 3 3
4 4 4 4

は検索ででるけど

1
2 3
4 5 6
・
・
  ・


はでない
0025デフォルトの名無しさん2016/05/20(金) 17:33:39.04ID:L/JKULD4
簡単な方法なら表示用に変数を1個持って、1回表示したら1ずつ加算していけばいい
0026デフォルトの名無しさん2016/05/21(土) 10:44:45.47ID:dQoHFKwA
難しく書くのが難しいな
http://ideone.com/GpApJB
0027デフォルトの名無しさん2016/05/21(土) 14:05:21.39ID:dQoHFKwA
whileとかforとか前世紀の遺物だな
ナウい書き方するとこんな感じ
http://ideone.com/r4YieI
0028デフォルトの名無しさん2016/05/30(月) 01:53:29.89ID:ILfmqIwk
>>27
ナウいが前世紀じゃないかっw
0029デフォルトの名無しさん2016/06/06(月) 07:59:27.97ID:jYEPRp2A
スッキリ分かるjava入門を読んでるいるのですが
コンストラクタの項でそのインスタンス型フィールドの値を初期化できる程度しか覚えられてないんですが
こんな程度で先に進んじゃって大丈夫でしょうか?thisもあまりよくわかってないし読み戻したほうがいいのかな
0030デフォルトの名無しさん2016/06/06(月) 09:15:04.16ID:e+TlXwYN
真面目にやるならAPI仕様を参照できる状態にしてJava言語仕様を暗記
0031デフォルトの名無しさん2016/06/06(月) 11:58:33.14ID:n0tXPRWo
すっきり実践編やってみな
0032デフォルトの名無しさん2016/06/06(月) 18:22:44.32ID:jYEPRp2A
プログラミング自体が入門レベルなので実践編はきついです。
曖昧な記憶でもいいから一回読み切るやり方が正しいんでしょうか?
早く入門レベルを脱したいです
0033デフォルトの名無しさん2016/06/06(月) 18:37:54.69ID:yI68iStU
テトリスを作ってみなはれ
0034デフォルトの名無しさん2016/06/06(月) 19:02:01.23ID:/EU6sUkv
>>32

ブロンズの問題集でもやって見れば?
0035デフォルトの名無しさん2016/06/06(月) 19:44:14.76ID:LbzoRXHI
一回読み終えてまた最初からやり直せばいいのよ
ド初心者なら3周してわからないところを潰すくらいでちょうどいいと思うの
0036デフォルトの名無しさん2016/06/06(月) 20:13:59.73ID:AvO2qKU5
>>32
受験勉強と違うから色々覚えるのが目的になっちゃダメだと思うよ
自分がやりたい事を最小限の知識で実現するように努力した方がいい
一番大事なのは何をプログラムしたいか、そのためにはどういうプログラムが必要か考える事だと思う
0037デフォルトの名無しさん2016/06/06(月) 20:40:56.36ID:mpQlVXrL
暗記しようとする必要はないと思う。試験するわけじゃないしな。
したければしても良いけど、わからないことに出くわしたらそのたびにそれについて調べるというのを繰り返せば自動的に記憶にも残る。
0038デフォルトの名無しさん2016/06/07(火) 00:56:55.92ID:41OqMrsx
そもそも、その本は間違っているかも知れないし、
特定の本を信用しても、仕方がない

誰も君に、その本を100%暗記しろなんて頼んでいないし、
もし頼まれたとしても、聞かなければよいだけ

100%理解せずに、読めばいい。
100%理解できないと、先に進めない人をよく見かけるけど、
そういう人は、先には進めない

すべての物事にはリスクがある。
50%ほど理解したら先に進む方が、むしろリスクが少ない

これこそ生来、人間が持っている忘却力なのだ。
自分の脳を通すことで、不必要なものを忘れて、
重要なことだけを覚えて、人生を効率化するようになっている

100%暗記できるような人は、むしろ何が重要なのか、わかっていない
0039デフォルトの名無しさん2016/06/07(火) 02:24:15.54ID:ip6Cz1PK
なるほど。取りあえずあと100ページで終わるので読み終えてみます。
細かいとこ理解しないで次に進むと凄い気持ち悪い感じが…したんですが、まぁ考えが変わりました。
ありがとうございました。頑張ります
0040デフォルトの名無しさん2016/06/07(火) 09:38:49.84ID:dPQve5Cg
ま、ある程度わかってきたら実際にサンプルプログラムみたいのな小さいの作って色々試してみると良い。
0041デフォルトの名無しさん2016/06/07(火) 20:23:22.06ID:UCJwx0XG
もう何度も言われてきてるだろうけど教えて

Javaって静的なコンパイル言語で早いと言われているけれど、Eclipseは非常に重いけど理由は?
PhotoshopやIllustratorが何で書かれているかは知らないけれど、あれも非常に重くて遅いけどCとかコンパイル言語で書かれてるんだよね?
本当にJavaとか早いの?
0042デフォルトの名無しさん2016/06/07(火) 21:06:18.92ID:JBCZTfFC
普通は中間言語までしかコンパイルされず
バイトコードインタプリタで実行されてる

cよか遥かに遅いしCADとか画像処理みたいのはJAVAだけじゃキツいじゃろね
そういう事を単独でさせる為の言語じゃない

新調したPCだとeclipseは重くないなぁ
それほど重い処理も無さそうだけど
逆にこんだけ拡張性のあるもんが分かりやすく書けるのは凄いと思うんだが
0043デフォルトの名無しさん2016/06/07(火) 21:20:13.75ID:FPF8u3mi
Javaは遅いよ。
0044デフォルトの名無しさん2016/06/07(火) 21:31:55.39ID:vZWlpmFJ
Eclipseはそれにメモリが少なかったり、Pleiadesのフルやプラグイン入れまくっていると重いし
Java自体、環境次第でJITの動きも変わってくるから一概に遅いとは言えないわ
そもそもどのプログラムもそうだけどコードが糞ならどの言語でも遅くなる。

そもそも話の限り>>41のスペックが貧弱なだけな気がする
0045デフォルトの名無しさん2016/06/07(火) 21:48:39.39ID:UCJwx0XG
>>42-43
ありがと
自分はLLをずっとやってて、最近JavaやGoを使い始めたんだけど、
簡単なコードのコンパイル(javacやgo run)だけで時間かかる(数秒、または数十秒)んで、何故これが早いと言われるのかなと思ったもので


>>44
重いは表現が間違ってたかも
WindowsXPとか昔のパソコンで使ってた時は本当に重かったけれど
でも遅いのは確かだと思う
スペックは、自作Linux, CPU: corei3, Memory: 8DB
ノートの場合はCPU: corei5
0046デフォルトの名無しさん2016/06/07(火) 22:53:35.57ID:NeAadZdx
コンパイル速度なのか実行速度なのか、どっちに文句言ってるの?
0047デフォルトの名無しさん2016/06/07(火) 23:10:24.79ID:Izwt65pO
三期の11話なみのRuby 速度で動ければ誰も文句は言わない
0048デフォルトの名無しさん2016/06/08(水) 00:08:40.70ID:ZBwXDrqR
LLライクな動作っていうとJavaREPLかね
9でjshell搭載予定らしいが全裸待機っていうのもどうかと思うしな
0049デフォルトの名無しさん2016/06/08(水) 05:54:07.00ID:E3Y0fydP
>>41
画像系は、多くのメモリを使う。
各プロセスの使用メモリをチェックすれば?

Eclipse, Gradle なんかも、速くコンパイルをするなら、
JVMを起動しっ放しにすればよいけど(常駐化)、その分、メモリを使ってしまう

Javaが遅いのは、I/O処理。
50年も最適化を研究しているから、CPUセントリックな処理は、Cよりも速い

Rubyでも、JRubyだと、10万回〜100万回のループ時間が、0.3秒ぐらいで同じ。
1千万回(1秒)以上では、CRubyよりも速くなる

つまりJRubyでは、この回数分ループすると、機械語に置き換えたり、
分岐予測を使ったり、さらなる最適化をする
0050デフォルトの名無しさん2016/06/08(水) 07:12:18.25ID:Ko7KPTTd
JavaはCの20倍速いという論文もある。
0051デフォルトの名無しさん2016/06/08(水) 12:43:12.18ID:dkuXgh3b
I/OもNIOのおかげでかなり高速化してるよね
IOは使い物にならないくらい遅いけど
0052デフォルトの名無しさん2016/06/08(水) 16:42:46.58ID:BCgime2A
でもJavaのnioの定着度の低さは異常
channelなにそれやjava8のstreamもなにそれのひとをしばしば見かけるわ

初心者向けサイトが未だにstream使ってるところが多いからそのままnio知らずにやってんだろうなぁって思う
0053デフォルトの名無しさん2016/06/08(水) 16:43:46.23ID:BCgime2A
>未だにstream使ってる
未だにInput/Output Streamを使ってる
0054デフォルトの名無しさん2016/06/08(水) 17:27:08.74ID:EYWDZbyT
>>50
それって何をやらせた時なんだろうね?
0055デフォルトの名無しさん2016/06/08(水) 18:21:37.35ID:Q4ck869A
昔はJavaは確かにCよりずっと「速い」ことがあった。
だが、Javaのバーチャルマシンを開発した本人によると、
それはバグのせいであったとさ。普通行われているベンチマークの
測定の仕方には問題があって、大勢がそうした「誤ったやり方」を
していたおかげでJavaの方が速いと言われていたのだが、
ちゃんとした測定をやるとCの方が速くてJavaは遅かったという
常識的な結論に至るのだよ。開発者自身が認めているんだから
そうなんだろ。
Cの20倍速いというのはその「間違った方法」を踏襲している
昔の論文だよ。
0056デフォルトの名無しさん2016/06/08(水) 18:44:31.08ID:kX/X1XCc
下記にメモったプログラムでLED_2_ONを押すとパケットで送り続ける
ようにしたいんですが、教えてください!やり方は問いません!!
ttp://plsk.net/rocknroll

最初書き込み先まちがえました!
0057デフォルトの名無しさん2016/06/08(水) 19:14:28.31ID:dkuXgh3b
>>56
androidっぽいのでスレチでは?
0058デフォルトの名無しさん2016/06/08(水) 19:24:24.39ID:kX/X1XCc
>>57

スレ違いでしたか!申しわけありません。
0059デフォルトの名無しさん2016/06/08(水) 19:45:25.60ID:bHvDUpho
速度の話しもそろそろスレチ気味だろ
0060デフォルトの名無しさん2016/06/08(水) 23:16:40.18ID:7xYKaWGH
javaを業務の合間に勉強しようと思い2週間程いろいろなHPを見ていますが、
ここのHPの内容を一通り見れば理解できるかも ってど素人に都合のいいサイトありますか?

あと僕が理解できなかったとこなんですが、以下のサンプルで
import java.util.***
public class AAA { ←�@
static public void main(String[] args){
AAA aaa = new Arrylist [] ←�A
for ( ){
--なんしかの処理
}
void BBB {
--なんしかの処理
}
 }                ←�B

�@でクラスAAAを定義してそのクラスの定義途中?で�AのAAAクラスのオブジェクトを作成するって、
何かが僕の中で引っかかって悩んでいます。
�@から�Bの内容を全て包括したのが、�Aであるなら�A以降�Bの処理までは�Aの時点でリードしてないんじゃ・・・
という初歩的なものです //卵が先?親鳥が先?みたいな感じなんですが

うまく説明できずにすみません。こんなので悩むってことは、基礎の基礎からやり直せって事なんですかね?

2週間で納得できた事は、UNIXの xargs と String[] args が似たようなもんだったんだ。というくらい(泣)
0061デフォルトの名無しさん2016/06/08(水) 23:36:07.42ID:E3Y0fydP
関数の巻き上げかも。
巻き上げとは、下の行で定義した関数を、上の行で呼び出せる

f(); → 呼び出せる
f(){ 定義 }

構文解析では、上の行を読んだ際、関数:f → シンボル未解決、のようにいったん処理しておいて、
下の行を読んだ際、関数:f → 定義あり、のようにシンボル表に書き込む

�@円囲み数字のような、Windows固有の環境依存文字を使ってはいけない。
他のOSでは、読めないから
0062デフォルトの名無しさん2016/06/08(水) 23:46:10.01ID:7xYKaWGH
>>61
回答ありがとうございます。
関数の巻き上げっすね。。。メモメモ

�@�A�BはMacから記載してしまいました。
今後気をつけます。
0063デフォルトの名無しさん2016/06/09(木) 01:11:31.02ID:xz94zbOX
>>60
java入門でググってでてくる、一番簡単なJava入門というサイトで自分は勉強した
後は入門書読んだり

質問の答え
mainメソッドはstaticでクラスに属するメソッドだから、AAAをインスタンス化しなくても実行できる
クラスはインスタンスの雛型みたいな存在で、staticメソッドやフィールドはその雛型を見て実行される。
ちなみにインスタンス化は、クラスのコピーをメモリに作ること

このサンプル、どこから見つけたか知らないけど、突っ込みどころ多すぎる
このサンプルの情報源は使わない方がいいかも

継承関係の無い型でインスタンス化してるし、インスタンス化の最後は()

ArrayListの間違え?ならジェネリクスの型指定も推奨される

void BBBはメソッド?
メソッドなら()が抜けてる上に、メソッドの中にメソッドを書いている謎
インナークラスでも無さそうだし
0064デフォルトの名無しさん2016/06/09(木) 12:31:33.58ID:863pratv
>>61
丸で囲った数字はUnicodeに定義されているし元のエンコードであるWindows-31j(またはcp932)も今ではWindows固有のものではなくなっている。
0065デフォルトの名無しさん2016/06/09(木) 12:34:01.10ID:58zVJbW4
>>64
おじいちゃんなんだよきっと
0066デフォルトの名無しさん2016/06/09(木) 12:37:23.87ID:CSH5zx3A
拾うべきポイントは2ちゃんねるがどのエンコーディングを使ってるかと
クライアント(とブラウザ)が該当フォントをサポートしてるかどうかだろう
0067デフォルトの名無しさん2016/06/09(木) 17:46:48.45ID:Ms1oj4bl
そういや今の2ちゃんはどうなったんだろ。専ブラは許可制にして何かやってたよね。書き込み内容の送信は今も変わらずcp932なのかな?
0068デフォルトの名無しさん2016/06/10(金) 07:27:25.95ID:o8hFzx97
2chって、ダブルクォーテーションを使うと、そこで送信文が終了するよな?

いったいどうプログラミングしたら、そういうバグが出るのか、聞きたいよな?
0069デフォルトの名無しさん2016/06/10(金) 07:33:35.22ID:FgCN9jAe
t”e”s”t
0070デフォルトの名無しさん2016/06/10(金) 07:34:27.78ID:FgCN9jAe
ならなくね?
0071デフォルトの名無しさん2016/06/10(金) 09:14:37.58ID:YX5Xpu4P
わろた
そんなわかりやすいバグあったらとっくに修正してるだろ
0072デフォルトの名無しさん2016/06/10(金) 09:37:17.37ID:E5hpPV0K
>>68
それは初耳だが、その情報はどこから仕入れたのだ?
0073デフォルトの名無しさん2016/06/10(金) 11:00:34.52ID:o8hFzx97
文章が切れているのを、しょっちゅう見かける

ダブルクォーテーションの次に、= を付けるだったかな?
0074デフォルトの名無しさん2016/06/10(金) 11:02:49.19ID:FgCN9jAe
t”=e”=s”=t
0075デフォルトの名無しさん2016/06/10(金) 11:03:32.71ID:FgCN9jAe
遊ばれている気がするし、何よりスレチだな・・・。
0076デフォルトの名無しさん2016/06/10(金) 12:56:47.75ID:E5hpPV0K
専ブラのバグでは?
0077デフォルトの名無しさん2016/06/10(金) 17:27:07.43ID:YiBZsNFP
釣られすぎだろ...
0078デフォルトの名無しさん2016/06/10(金) 17:32:35.64ID:2OxUQDLt
o8hFzx97はNG〜
スレ民釣れまくってるね
0079デフォルトの名無しさん2016/06/10(金) 23:51:32.58ID:1F9oZ6BS
先生 ここの例題の解答例で分からないとこがあります。
http://www.techscore.com/tech/Java/JavaSE/Thread/answer/5-1/

FileCopyExample.java の下記の場所の readerThread.join();は writerTThread.join();かな?と勝手に思って先に読み進めました

  writerThread.start();
        try {
            System.out.println("書き込み開始");
            readerThread.join();
            System.out.println("書き込み完了");

writerThread.start() で呼ばれるのはWriteImp.java のpublic void run() の{中身}なんですよね?
そう考えると1つ上に書いてある private String text = null; は何か別の意味があるのでしょうか?
public void run() の{中身}しかコールされないのに、なんであんな位置に・・・

こりゃぁ、手強そうと思い、amazonで「スッキリわかるJava入門」ポチりました。
0080デフォルトの名無しさん2016/06/11(土) 00:47:14.15ID:NyI1yYzN
>>79
スッキリJavaは、実践編でないとスレッドの話はでてこない、残念

以下回答
WriteImp.javaのフィールドで変数textを宣言しているのは、
run()メソッドとsetText()メソッドの2つのメソッドでtextを使用しているから

setText()はmain()メソッドの中ほどで使われている(下記の部分)
//読み込んだデータを渡す
writer.setText(reader.getText());


main()メソッドの中身の簡単な流れを以下に
WritelmpとReadlampをインスタンス化(writer, reader)
↓
readerのrun()メソッドをスレッドとして実行、join()する
↓
readerのtextの内容をwriterのtextに渡す
writer.setText(reader.getText());
↓
writerのrun()メソッドをスレッドとして実行、join()する

以上
0081デフォルトの名無しさん2016/06/11(土) 00:52:49.52ID:NyI1yYzN
>>80
追記

下のreaderThread.join()はwriterThread.join()の間違えたでいいと思う
0082デフォルトの名無しさん2016/06/11(土) 08:54:03.40ID:mzLyb6AV
本に出てるコードって実行確認しないで書いてるのかと思う時あるけどあり得るのだろうか?
0083デフォルトの名無しさん2016/06/11(土) 10:53:40.26ID:igPKgwcR
>>82
あまりにも短くて簡単なサンプルプログラムだとあるかもな。まあ、著者がどういう人かにもよるだろうけど。
0084デフォルトの名無しさん2016/06/11(土) 13:19:09.25ID:ppFl8ALU
実行してるのは著者じゃなくて実は編集担当だったりする
0085デフォルトの名無しさん2016/06/11(土) 16:09:28.63ID:Z8akOUlB
>>80
ありがとうございます。

run()メソッドとsetText()メソッドの2つのメソッドでtextを使用するのだから、共通で定義したいためこの位置で定義してる。
ということは、
例題ではスレッドでの呼び出しをした時、run()メソッドの中身を実行するのだけど、外で定義しているのもあるからrun()の書いてあるclass全部を読み込んでいる
という理解でいいですか?

追加質問ですみません
この場合に、run()以外のメソッドが複数あったとして、そのrun()以外のメソッドでのみ使用する変数をこの位置に宣言すると、
run()メソッドを実行するステップでは無駄にヒープ食っちゃうってこと?ですよね。
0086デフォルトの名無しさん2016/06/11(土) 17:45:22.19ID:8E7fVOdN
>>85

Javaの場合、参照型の変数をメソッドやコンストラクタの引数として渡した場合、参照先が渡される
なので、
readerThread.start();
で実行されるのは、readerインスタンスのrun()メソッド

Thread readerThread = new Thread(reader);
いくらReadlmpクラスが大きくても、↑で使われるヒープ領域の大きさは変わらない

参照の話があいまいなら、スッキリの入門は役に立つと思う
0087デフォルトの名無しさん2016/06/12(日) 06:24:35.36ID:jEWcwNCz
javaでツールを作れるようになるにはどういう順番でこれらの本を読めばいいですか?
まだjavaどころかプログラミング自体初心者なんですが・・・
スッキリ分かるjava入門 ← これは読みました
スッキリ分かるjava実践編
スッキリ分かるSQL入門
スッキリ分かるサーブレット&JSP編
0088デフォルトの名無しさん2016/06/12(日) 06:55:00.43ID:E6s9UVRT
ツールってなんだよ。
GUI作るならJavaFXの書籍でも買ったら?
WebならSpringBootとかが簡単。
0089デフォルトの名無しさん2016/06/12(日) 07:07:57.13ID:jEWcwNCz
そうですねGUIでツールとか作ってみたいです
ただプログラミング関してはスッキリ分かるjava入門しか読んだことがないくらいの初心者なので
難しいとこに一気に行かないで凄い簡単なところから押さえていきたいと思ってます
0090デフォルトの名無しさん2016/06/12(日) 07:18:20.29ID:jEWcwNCz
教えていただいたjavaFXで検索してみて
http://libro.tuyano.com/index2?id=8356003という入門サイトを見つけたのですが
最初から難解すぎて無理でした
やっぱりもっと難易度の低いことからやっていきたいんですがどうすればいいですかね?
0091デフォルトの名無しさん2016/06/12(日) 07:29:40.94ID:E6s9UVRT
>>90
スッキリ分かるjava入門をちゃんと理解していればわかるレベルだと思うけれど・・・。
もう一度読み直すことをおすすめする。
分からないようなら別の入門書を買うと良いかな。
■ このスレッドは過去ログ倉庫に格納されています