[表示 : 全て 最新50 1-99 2ch.scのread.cgiへ]
Update time : 06/07 02:42 / Filesize : 10 KB / Number-of Response : 40
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Java入門・初心者質問スレ



1 名前:デフォルトの名無しさん [2016/05/12(木) 05:18:33.40 ID:nzHoBPh8.net]
Java初心者のためのスレッドです。

2 名前:デフォルトの名無しさん [2016/05/12(木) 07:04:37.72 ID:/eB9RrGz.net]
< `∀´>ニダー

3 名前:デフォルトの名無しさん mailto:sage [2016/05/12(木) 11:54:40.41 ID:LTEnCbUt.net]
すいません
public以外の修飾詞って何のためにあるんでしょうか
春からjavaはじめてなるべくせまい範囲でアクセスできるように書いた方がいいと教わったのですが意味がわかりません
とりあえずprivateってかいておいてコンパイルエラーがでるたびにpublicに書き直す必要があって
だったらはじめからpublicってかいておいたほうがprivateの完全上位互換だと思うのです

4 名前:デフォルトの名無しさん mailto:sage [2016/05/12(木) 13:52:26.21 ID:zeyNygYO.net]
素人は、フィールドをprivate、メソッドをpublicにしておけ。
フィールドをクラス外から、アクセスできないようにする(カプセル化)

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

外からフィールドにアクセスしたいのなら、そのフィールドに、
getter/setter(アクセッサ)を宣言して、それを通してアクセスする

5 名前:デフォルトの名無しさん mailto:sage [2016/05/12(木) 14:08:00.84 ID:LTEnCbUt.net]
obj.val++;

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

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

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

>外からアクセスされて
の部分がよくわからないのですが
具体的にどういうケースで問題になるのでしょうか

6 名前:デフォルトの名無しさん mailto:sage [2016/05/12(木) 18:12:02.87 ID:zeyNygYO.net]
プログラム開発で一番ダメなのが、グローバル変数を使ったり、
オブジェクト同士・モジュール同士の密結合。
密結合で開発していくと、いずれスパゲティ・泥団子になっていって、修正できなくなっていく

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

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

つまり、フィールドをprivateにして、外からオブジェクトの状態を変える場合は、
publicのメソッド・アクセッサを通して、アクセスする

7 名前:デフォルトの名無しさん mailto:sage [2016/05/12(木) 18:30:03.02 ID:zeyNygYO.net]
Java・Windows・LinuxのAPIを使う場合でも、
オブジェクトの中のフィールドを設定することはまずない

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

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

例えば、ファイルを読むのでも、obj.read() とか、
オブジェクトの詳細を知らずに、簡単に使えなければならない

8 名前:デフォルトの名無しさん mailto:sage [2016/05/12(木) 20:01:25.53 ID:LTEnCbUt.net]
うーん… 難しい

プログラム上便利に短くかけることが運用しやすいとは限らないってことですか…
いまいち実感できないですけど…

9 名前:デフォルトの名無しさん mailto:sage [2016/05/12(木) 21:21:12.65 ID:hY0jzmnf.net]
>>7
フィールドの詳細を知らなくちゃいけないから大変www確かにお前の頭では大変そうだな

10 名前:デフォルトの名無しさん mailto:sage [2016/05/12(木) 21:23:21.11 ID:Vmwu/plU.net]
>>8
C#みたいにプロパティのある言語使ってると、javaは冗長で嫌になるよね



11 名前:デフォルトの名無しさん mailto:sage [2016/05/13(金) 06:59:23.53 ID:5RjflIb0.net]
xをそのままpublicにしちゃうとどこからでも読み書き可能になってしまうから
getXはpublicにしとくけど、setXはデフォルトにしといて同パッケージ内からしか書けないとか
柔軟に対応できるというメリットもある

12 名前:デフォルトの名無しさん [2016/05/13(金) 15:21:46.75 ID:yywl+o9x.net]
最初は、ソースコードの100行目に、obj.a = 1 だけがあり、
簡単なように見えても、次に、200行目に修正が入ると、

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

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

これがオブジェクト内のスコープじゃないのだから、やってられんわw

13 名前:デフォルトの名無しさん [2016/05/14(土) 00:18:07.59 ID:MDtr7m89.net]
これまでDB関連ばかりやってたから、言語と言っていいかわからないが、
PL/SQLくらいであとそのPLを動かすためのshくらいしかやったことない。

Javaの資料とか見てると、英語の羅列じゃん・・・
一通りの文法覚えたら、メソッドとException関連をじっくり見た方がいいのかな?

14 名前:デフォルトの名無しさん [2016/05/14(土) 08:42:14.37 ID:uvV1TjlT.net]
なぜオブジェクト指向で作るのかっていう本読めばいいよ。

15 名前:デフォルトの名無しさん mailto:sage [2016/05/14(土) 09:53:58.19 ID:fLeelvLJ.net]
>>8
大きなシステムを分担して組む時の話だよ

組織が大きくなると担当をしっかり決めて部外者が勝手に触らない
必要なら決められた窓口を通して依頼や調整をする
それと同じことをプログラム内のルールとしても実践するだけ

16 名前:デフォルトの名無しさん mailto:sage [2016/05/14(土) 13:45:29.21 ID:5pXvQAwD.net]
>>13
Javaのお進め図書・情報・url
ula.2ch.net/test/read.cgi/echo.2ch.net/tech/1457392971/l50

ここに推薦書が書いてある

17 名前:デフォルトの名無しさん mailto:sage [2016/05/14(土) 14:31:43.29 ID:gAeocMbe.net]
隔離スレのほうがレベル高い話してる…

18 名前:デフォルトの名無しさん [2016/05/17(火) 02:55:12.85 ID:op8lS/VF.net]
ひとつの利点として
とりあえずsetter(getter)が仲介すると
変数の定義域(値域)が設定出来るってのはあるよね

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

少なくとも外部から値の範囲が汚染されないのは大きい
作る時にオブジェクト内での動作に集中出来る

19 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 08:11:51.20 ID:+pynX6Ny.net]
byte使え

20 名前:デフォルトの名無しさん mailto:sage [2016/05/18(水) 18:14:51.82 ID:Kc9Ol4u0.net]
工場の機械って工場の人しか使っちゃダメだろ
突然見ず知らずの人が使い出したら困るだろ
アクセス修飾子っていうのは見ず知らずの人に機械を触らせないためのルールだよ

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

そうすれば工場の人は勝手に機械をいじられないし、見ず知らずの人は機械の使い方を知らなくても目的が果たせる。



21 名前:デフォルトの名無しさん mailto:sage [2016/05/18(水) 20:56:08.39 ID:HhGNLqnc.net]
使う側が理解して使う場合無駄なオーバーヘッドが入るだけじゃん

22 名前:デフォルトの名無しさん mailto:sage [2016/05/18(水) 20:58:39.95 ID:/QzLYINM.net]
使う側が知ってるならリフレクション
つまり忍び込んで勝手に使う

23 名前:デフォルトの名無しさん mailto:sage [2016/05/19(木) 14:42:20.03 ID:W+na7P2U.net]
正しく動くようになってから速くするのが鉄則だよ
あんま詳しくないけど関数呼び出しのオーバーヘッドは思いの他、軽いらしい

ゲームみたいなのは、また別なのかもしれんが

24 名前:デフォルトの名無しさん mailto:sage [2016/05/20(金) 13:43:38.26 ID:l93PzyPZ.net]
javaで

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

1
2 2
3 3 3
4 4 4 4

は検索ででるけど

1
2 3
4 5 6


  ・


はでない

25 名前:デフォルトの名無しさん mailto:sage [2016/05/20(金) 17:33:39.04 ID:L/JKULD4.net]
簡単な方法なら表示用に変数を1個持って、1回表示したら1ずつ加算していけばいい

26 名前:デフォルトの名無しさん mailto:sage [2016/05/21(土) 10:44:45.47 ID:dQoHFKwA.net]
難しく書くのが難しいな
ideone.com/GpApJB

27 名前:デフォルトの名無しさん mailto:sage [2016/05/21(土) 14:05:21.39 ID:dQoHFKwA.net]
whileとかforとか前世紀の遺物だな
ナウい書き方するとこんな感じ
ideone.com/r4YieI

28 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 01:53:29.89 ID:ILfmqIwk.net]
>>27
ナウいが前世紀じゃないかっw

29 名前:デフォルトの名無しさん [2016/06/06(月) 07:59:27.97 ID:jYEPRp2A.net]
スッキリ分かるjava入門を読んでるいるのですが
コンストラクタの項でそのインスタンス型フィールドの値を初期化できる程度しか覚えられてないんですが
こんな程度で先に進んじゃって大丈夫でしょうか?thisもあまりよくわかってないし読み戻したほうがいいのかな

30 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 09:15:04.16 ID:e+TlXwYN.net]
真面目にやるならAPI仕様を参照できる状態にしてJava言語仕様を暗記



31 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 11:58:33.14 ID:n0tXPRWo.net]
すっきり実践編やってみな

32 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 18:22:44.32 ID:jYEPRp2A.net]
プログラミング自体が入門レベルなので実践編はきついです。
曖昧な記憶でもいいから一回読み切るやり方が正しいんでしょうか?
早く入門レベルを脱したいです

33 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 18:37:54.69 ID:yI68iStU.net]
テトリスを作ってみなはれ

34 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 19:02:01.23 ID:/EU6sUkv.net]
>>32

ブロンズの問題集でもやって見れば?

35 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 19:44:14.76 ID:LbzoRXHI.net]
一回読み終えてまた最初からやり直せばいいのよ
ド初心者なら3周してわからないところを潰すくらいでちょうどいいと思うの

36 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 20:13:59.73 ID:AvO2qKU5.net]
>>32
受験勉強と違うから色々覚えるのが目的になっちゃダメだと思うよ
自分がやりたい事を最小限の知識で実現するように努力した方がいい
一番大事なのは何をプログラムしたいか、そのためにはどういうプログラムが必要か考える事だと思う

37 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 20:40:56.36 ID:mpQlVXrL.net]
暗記しようとする必要はないと思う。試験するわけじゃないしな。
したければしても良いけど、わからないことに出くわしたらそのたびにそれについて調べるというのを繰り返せば自動的に記憶にも残る。

38 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:56:55.92 ID:41OqMrsx.net]
そもそも、その本は間違っているかも知れないし、
特定の本を信用しても、仕方がない

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

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

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

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

100%暗記できるような人は、むしろ何が重要なのか、わかっていない

39 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 02:24:15.54 ID:ip6Cz1PK.net]
なるほど。取りあえずあと100ページで終わるので読み終えてみます。
細かいとこ理解しないで次に進むと凄い気持ち悪い感じが…したんですが、まぁ考えが変わりました。
ありがとうございました。頑張ります






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<10KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef